#undef NDEBUG #include #include #include #include #include #include #include #include #include "from_string.h" #include "editor_event.h" #include "world_editor.h" #include "buildings_data.h" #include "buildings_editor.h" class HandleChangeBuildingType : public Object { GDCLASS(HandleChangeBuildingType, Object) BuildingsEditor *editor; void change_building_type(int index) { OptionButton *building_type = editor->get_as_node("%building_type"); const String &item = building_type->get_item_text(index); int bmode = editor->get_buildings_editor_mode(); if (bmode == 0 || bmode == 1 || bmode == 2) /* select, move, rotate */ editor->change_building_type(item); /* do not change building types in create mode (3) */ } public: HandleChangeBuildingType(BuildingsEditor *editor) : Object() , editor(editor) { OptionButton *building_type = editor->get_as_node("%building_type"); building_type->connect("item_selected", this, "change_building_type"); } virtual ~HandleChangeBuildingType() { OptionButton *building_type = editor->get_as_node("%building_type"); if (building_type->is_connected("item_selected", this, "change_building_type")) building_type->disconnect("item_selected", this, "change_building_type"); } protected: static void _bind_methods() { ClassDB::bind_method( D_METHOD("change_building_type", "index"), &HandleChangeBuildingType::change_building_type); } }; class HandleButton : public Object { GDCLASS(HandleButton, Object) BuildingsEditor *editor; String button_path; String event_string; Array event_args; Button *get_button() { Button *button = editor->get_as_node