You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Improve TileSetAtlasSourceEditor UI
* Updates the overall layout, moving mode buttons to the top. * Uses inspector category instead of a Label to show what's being edited. This also allows better scrolling behavior.
This commit is contained in:
@@ -1207,8 +1207,6 @@ TileDataDefaultEditor::TileDataDefaultEditor() {
|
|||||||
label->set_theme_type_variation("HeaderSmall");
|
label->set_theme_type_variation("HeaderSmall");
|
||||||
add_child(label);
|
add_child(label);
|
||||||
|
|
||||||
toolbar->add_child(memnew(VSeparator));
|
|
||||||
|
|
||||||
picker_button = memnew(Button);
|
picker_button = memnew(Button);
|
||||||
picker_button->set_flat(true);
|
picker_button->set_flat(true);
|
||||||
picker_button->set_toggle_mode(true);
|
picker_button->set_toggle_mode(true);
|
||||||
@@ -2659,8 +2657,6 @@ TileDataTerrainsEditor::TileDataTerrainsEditor() {
|
|||||||
add_child(label);
|
add_child(label);
|
||||||
|
|
||||||
// Toolbar
|
// Toolbar
|
||||||
toolbar->add_child(memnew(VSeparator));
|
|
||||||
|
|
||||||
picker_button = memnew(Button);
|
picker_button = memnew(Button);
|
||||||
picker_button->set_flat(true);
|
picker_button->set_flat(true);
|
||||||
picker_button->set_toggle_mode(true);
|
picker_button->set_toggle_mode(true);
|
||||||
|
|||||||
@@ -64,11 +64,15 @@ void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::set_id(int p_id) {
|
|||||||
emit_signal(SNAME("changed"), "id");
|
emit_signal(SNAME("changed"), "id");
|
||||||
}
|
}
|
||||||
|
|
||||||
int TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::get_id() {
|
int TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::get_id() const {
|
||||||
return source_id;
|
return source_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_set(const StringName &p_name, const Variant &p_value) {
|
bool TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_set(const StringName &p_name, const Variant &p_value) {
|
||||||
|
if (p_name == "id") {
|
||||||
|
set_id(p_value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
String name = p_name;
|
String name = p_name;
|
||||||
if (name == "name") {
|
if (name == "name") {
|
||||||
// Use the resource_name property to store the source's name.
|
// Use the resource_name property to store the source's name.
|
||||||
@@ -86,6 +90,10 @@ bool TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get(const StringN
|
|||||||
if (!tile_set_atlas_source) {
|
if (!tile_set_atlas_source) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (p_name == "id") {
|
||||||
|
r_ret = get_id();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
String name = p_name;
|
String name = p_name;
|
||||||
if (name == "name") {
|
if (name == "name") {
|
||||||
// Use the resource_name property to store the source's name.
|
// Use the resource_name property to store the source's name.
|
||||||
@@ -97,6 +105,8 @@ bool TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get(const StringN
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get_property_list(List<PropertyInfo> *p_list) const {
|
void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||||
|
p_list->push_back(PropertyInfo(Variant::NIL, TTR("Atlas"), PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
|
||||||
|
p_list->push_back(PropertyInfo(Variant::INT, "id", PROPERTY_HINT_RANGE, "0," + itos(INT_MAX) + ",1"));
|
||||||
p_list->push_back(PropertyInfo(Variant::STRING, "name", PROPERTY_HINT_NONE, ""));
|
p_list->push_back(PropertyInfo(Variant::STRING, "name", PROPERTY_HINT_NONE, ""));
|
||||||
p_list->push_back(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"));
|
p_list->push_back(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"));
|
||||||
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "margins", PROPERTY_HINT_NONE, "suffix:px"));
|
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "margins", PROPERTY_HINT_NONE, "suffix:px"));
|
||||||
@@ -106,12 +116,6 @@ void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get_property_list
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_bind_methods() {
|
void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_bind_methods() {
|
||||||
// -- Shape and layout --
|
|
||||||
ClassDB::bind_method(D_METHOD("set_id", "id"), &TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::set_id);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_id"), &TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::get_id);
|
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "id", PROPERTY_HINT_RANGE, "0," + itos(INT_MAX) + ",1"), "set_id", "get_id");
|
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("changed", PropertyInfo(Variant::STRING, "what")));
|
ADD_SIGNAL(MethodInfo("changed", PropertyInfo(Variant::STRING, "what")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,11 +387,15 @@ void TileSetAtlasSourceEditor::AtlasTileProxyObject::_get_property_list(List<Pro
|
|||||||
// ID and size related properties.
|
// ID and size related properties.
|
||||||
if (tiles.size() == 1) {
|
if (tiles.size() == 1) {
|
||||||
if (tiles.front()->get().alternative == 0) {
|
if (tiles.front()->get().alternative == 0) {
|
||||||
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "atlas_coords", PROPERTY_HINT_NONE, ""));
|
p_list->push_back(PropertyInfo(Variant::NIL, TTR("Base Tile"), PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
|
||||||
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "size_in_atlas", PROPERTY_HINT_NONE, ""));
|
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "atlas_coords"));
|
||||||
|
p_list->push_back(PropertyInfo(Variant::VECTOR2I, "size_in_atlas"));
|
||||||
} else {
|
} else {
|
||||||
p_list->push_back(PropertyInfo(Variant::INT, "alternative_id", PROPERTY_HINT_NONE, ""));
|
p_list->push_back(PropertyInfo(Variant::NIL, TTR("Alternative Tile"), PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
|
||||||
|
p_list->push_back(PropertyInfo(Variant::INT, "alternative_id"));
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
p_list->push_back(PropertyInfo(Variant::NIL, TTR("Tiles"), PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Animation.
|
// Animation.
|
||||||
@@ -443,6 +451,11 @@ void TileSetAtlasSourceEditor::AtlasTileProxyObject::_get_property_list(List<Pro
|
|||||||
|
|
||||||
HashMap<String, int> counts; // Counts the number of time a property appears (useful for groups that may appear more than once)
|
HashMap<String, int> counts; // Counts the number of time a property appears (useful for groups that may appear more than once)
|
||||||
for (List<PropertyInfo>::Element *E_property = list.front(); E_property; E_property = E_property->next()) {
|
for (List<PropertyInfo>::Element *E_property = list.front(); E_property; E_property = E_property->next()) {
|
||||||
|
// Don't show category for TileData.
|
||||||
|
if (E_property->get().usage & PROPERTY_USAGE_CATEGORY) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const String &property_string = E_property->get().name;
|
const String &property_string = E_property->get().name;
|
||||||
if (!tile_data->is_allowing_transform() && (property_string == "flip_h" || property_string == "flip_v" || property_string == "transpose")) {
|
if (!tile_data->is_allowing_transform() && (property_string == "flip_h" || property_string == "flip_v" || property_string == "transpose")) {
|
||||||
continue;
|
continue;
|
||||||
@@ -566,7 +579,6 @@ void TileSetAtlasSourceEditor::_update_fix_selected_and_hovered_tiles() {
|
|||||||
void TileSetAtlasSourceEditor::_update_atlas_source_inspector() {
|
void TileSetAtlasSourceEditor::_update_atlas_source_inspector() {
|
||||||
// Update visibility.
|
// Update visibility.
|
||||||
bool inspector_visible = tools_button_group->get_pressed_button() == tool_setup_atlas_source_button;
|
bool inspector_visible = tools_button_group->get_pressed_button() == tool_setup_atlas_source_button;
|
||||||
atlas_source_inspector_label->set_visible(inspector_visible);
|
|
||||||
atlas_source_inspector->set_visible(inspector_visible);
|
atlas_source_inspector->set_visible(inspector_visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -576,11 +588,9 @@ void TileSetAtlasSourceEditor::_update_tile_inspector() {
|
|||||||
if (!selection.is_empty()) {
|
if (!selection.is_empty()) {
|
||||||
tile_proxy_object->edit(tile_set_atlas_source, selection);
|
tile_proxy_object->edit(tile_set_atlas_source, selection);
|
||||||
}
|
}
|
||||||
tile_inspector_label->show();
|
|
||||||
tile_inspector->set_visible(!selection.is_empty());
|
tile_inspector->set_visible(!selection.is_empty());
|
||||||
tile_inspector_no_tile_selected_label->set_visible(selection.is_empty());
|
tile_inspector_no_tile_selected_label->set_visible(selection.is_empty());
|
||||||
} else {
|
} else {
|
||||||
tile_inspector_label->hide();
|
|
||||||
tile_inspector->hide();
|
tile_inspector->hide();
|
||||||
tile_inspector_no_tile_selected_label->hide();
|
tile_inspector_no_tile_selected_label->hide();
|
||||||
}
|
}
|
||||||
@@ -798,6 +808,8 @@ void TileSetAtlasSourceEditor::_update_tile_data_editors() {
|
|||||||
tile_data_editor_dropdown_button->set_text(TTR("Select a property editor"));
|
tile_data_editor_dropdown_button->set_text(TTR("Select a property editor"));
|
||||||
}
|
}
|
||||||
tile_data_editors_label->set_visible(is_visible);
|
tile_data_editors_label->set_visible(is_visible);
|
||||||
|
tile_data_editors_tree->set_visible(is_visible);
|
||||||
|
tile_data_painting_editor_container->set_visible(is_visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileSetAtlasSourceEditor::_update_current_tile_data_editor() {
|
void TileSetAtlasSourceEditor::_update_current_tile_data_editor() {
|
||||||
@@ -954,21 +966,18 @@ void TileSetAtlasSourceEditor::_update_toolbar() {
|
|||||||
if (current_tile_data_editor_toolbar) {
|
if (current_tile_data_editor_toolbar) {
|
||||||
current_tile_data_editor_toolbar->hide();
|
current_tile_data_editor_toolbar->hide();
|
||||||
}
|
}
|
||||||
tool_settings_vsep->show();
|
|
||||||
tools_settings_erase_button->show();
|
tools_settings_erase_button->show();
|
||||||
tool_advanced_menu_buttom->show();
|
tool_advanced_menu_buttom->show();
|
||||||
} else if (tools_button_group->get_pressed_button() == tool_select_button) {
|
} else if (tools_button_group->get_pressed_button() == tool_select_button) {
|
||||||
if (current_tile_data_editor_toolbar) {
|
if (current_tile_data_editor_toolbar) {
|
||||||
current_tile_data_editor_toolbar->hide();
|
current_tile_data_editor_toolbar->hide();
|
||||||
}
|
}
|
||||||
tool_settings_vsep->hide();
|
|
||||||
tools_settings_erase_button->hide();
|
tools_settings_erase_button->hide();
|
||||||
tool_advanced_menu_buttom->hide();
|
tool_advanced_menu_buttom->hide();
|
||||||
} else if (tools_button_group->get_pressed_button() == tool_paint_button) {
|
} else if (tools_button_group->get_pressed_button() == tool_paint_button) {
|
||||||
if (current_tile_data_editor_toolbar) {
|
if (current_tile_data_editor_toolbar) {
|
||||||
current_tile_data_editor_toolbar->show();
|
current_tile_data_editor_toolbar->show();
|
||||||
}
|
}
|
||||||
tool_settings_vsep->hide();
|
|
||||||
tools_settings_erase_button->hide();
|
tools_settings_erase_button->hide();
|
||||||
tool_advanced_menu_buttom->hide();
|
tool_advanced_menu_buttom->hide();
|
||||||
}
|
}
|
||||||
@@ -2355,38 +2364,65 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
|
|||||||
set_process_unhandled_key_input(true);
|
set_process_unhandled_key_input(true);
|
||||||
set_process_internal(true);
|
set_process_internal(true);
|
||||||
|
|
||||||
// -- Right side --
|
|
||||||
HSplitContainer *split_container_right_side = memnew(HSplitContainer);
|
|
||||||
split_container_right_side->set_h_size_flags(SIZE_EXPAND_FILL);
|
|
||||||
add_child(split_container_right_side);
|
|
||||||
|
|
||||||
// Middle panel.
|
// Middle panel.
|
||||||
ScrollContainer *middle_panel = memnew(ScrollContainer);
|
|
||||||
middle_panel->set_horizontal_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
|
|
||||||
middle_panel->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
|
|
||||||
split_container_right_side->add_child(middle_panel);
|
|
||||||
|
|
||||||
VBoxContainer *middle_vbox_container = memnew(VBoxContainer);
|
VBoxContainer *middle_vbox_container = memnew(VBoxContainer);
|
||||||
middle_vbox_container->set_h_size_flags(SIZE_EXPAND_FILL);
|
middle_vbox_container->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
|
||||||
middle_panel->add_child(middle_vbox_container);
|
add_child(middle_vbox_container);
|
||||||
|
|
||||||
|
// -- Toolbox --
|
||||||
|
tools_button_group.instantiate();
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_fix_selected_and_hovered_tiles).unbind(1));
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_tile_id_label).unbind(1));
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_atlas_source_inspector).unbind(1));
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_tile_inspector).unbind(1));
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_tile_data_editors).unbind(1));
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_current_tile_data_editor).unbind(1));
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_atlas_view).unbind(1));
|
||||||
|
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_toolbar).unbind(1));
|
||||||
|
|
||||||
|
HBoxContainer *toolbox = memnew(HBoxContainer);
|
||||||
|
middle_vbox_container->add_child(toolbox);
|
||||||
|
|
||||||
|
tool_setup_atlas_source_button = memnew(Button);
|
||||||
|
tool_setup_atlas_source_button->set_text(TTR("Setup"));
|
||||||
|
tool_setup_atlas_source_button->set_flat(true);
|
||||||
|
tool_setup_atlas_source_button->set_toggle_mode(true);
|
||||||
|
tool_setup_atlas_source_button->set_pressed(true);
|
||||||
|
tool_setup_atlas_source_button->set_button_group(tools_button_group);
|
||||||
|
tool_setup_atlas_source_button->set_tooltip_text(TTR("Atlas setup. Add/Remove tiles tool (use the shift key to create big tiles, control for rectangle editing)."));
|
||||||
|
toolbox->add_child(tool_setup_atlas_source_button);
|
||||||
|
|
||||||
|
tool_select_button = memnew(Button);
|
||||||
|
tool_select_button->set_text(TTR("Select"));
|
||||||
|
tool_select_button->set_flat(true);
|
||||||
|
tool_select_button->set_toggle_mode(true);
|
||||||
|
tool_select_button->set_pressed(false);
|
||||||
|
tool_select_button->set_button_group(tools_button_group);
|
||||||
|
tool_select_button->set_tooltip_text(TTR("Select tiles."));
|
||||||
|
toolbox->add_child(tool_select_button);
|
||||||
|
|
||||||
|
tool_paint_button = memnew(Button);
|
||||||
|
tool_paint_button->set_text(TTR("Paint"));
|
||||||
|
tool_paint_button->set_flat(true);
|
||||||
|
tool_paint_button->set_toggle_mode(true);
|
||||||
|
tool_paint_button->set_button_group(tools_button_group);
|
||||||
|
tool_paint_button->set_tooltip_text(TTR("Paint properties."));
|
||||||
|
toolbox->add_child(tool_paint_button);
|
||||||
|
|
||||||
// Tile inspector.
|
// Tile inspector.
|
||||||
tile_inspector_label = memnew(Label);
|
|
||||||
tile_inspector_label->set_text(TTR("Tile Properties:"));
|
|
||||||
tile_inspector_label->set_theme_type_variation("HeaderSmall");
|
|
||||||
middle_vbox_container->add_child(tile_inspector_label);
|
|
||||||
|
|
||||||
tile_proxy_object = memnew(AtlasTileProxyObject(this));
|
tile_proxy_object = memnew(AtlasTileProxyObject(this));
|
||||||
tile_proxy_object->connect("changed", callable_mp(this, &TileSetAtlasSourceEditor::_tile_proxy_object_changed));
|
tile_proxy_object->connect("changed", callable_mp(this, &TileSetAtlasSourceEditor::_tile_proxy_object_changed));
|
||||||
|
|
||||||
tile_inspector = memnew(EditorInspector);
|
tile_inspector = memnew(EditorInspector);
|
||||||
tile_inspector->set_vertical_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
|
tile_inspector->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
tile_inspector->set_show_categories(true);
|
||||||
tile_inspector->edit(tile_proxy_object);
|
tile_inspector->edit(tile_proxy_object);
|
||||||
tile_inspector->set_use_folding(true);
|
tile_inspector->set_use_folding(true);
|
||||||
tile_inspector->connect("property_selected", callable_mp(this, &TileSetAtlasSourceEditor::_inspector_property_selected));
|
tile_inspector->connect("property_selected", callable_mp(this, &TileSetAtlasSourceEditor::_inspector_property_selected));
|
||||||
middle_vbox_container->add_child(tile_inspector);
|
middle_vbox_container->add_child(tile_inspector);
|
||||||
|
|
||||||
tile_inspector_no_tile_selected_label = memnew(Label);
|
tile_inspector_no_tile_selected_label = memnew(Label);
|
||||||
|
tile_inspector_no_tile_selected_label->set_v_size_flags(SIZE_EXPAND | SIZE_SHRINK_CENTER);
|
||||||
tile_inspector_no_tile_selected_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
|
tile_inspector_no_tile_selected_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
|
||||||
tile_inspector_no_tile_selected_label->set_text(TTR("No tiles selected."));
|
tile_inspector_no_tile_selected_label->set_text(TTR("No tiles selected."));
|
||||||
middle_vbox_container->add_child(tile_inspector_no_tile_selected_label);
|
middle_vbox_container->add_child(tile_inspector_no_tile_selected_label);
|
||||||
@@ -2418,77 +2454,22 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
|
|||||||
middle_vbox_container->add_child(tile_data_painting_editor_container);
|
middle_vbox_container->add_child(tile_data_painting_editor_container);
|
||||||
|
|
||||||
// Atlas source inspector.
|
// Atlas source inspector.
|
||||||
atlas_source_inspector_label = memnew(Label);
|
|
||||||
atlas_source_inspector_label->set_text(TTR("Atlas Properties:"));
|
|
||||||
atlas_source_inspector_label->set_theme_type_variation("HeaderSmall");
|
|
||||||
middle_vbox_container->add_child(atlas_source_inspector_label);
|
|
||||||
|
|
||||||
atlas_source_proxy_object = memnew(TileSetAtlasSourceProxyObject());
|
atlas_source_proxy_object = memnew(TileSetAtlasSourceProxyObject());
|
||||||
atlas_source_proxy_object->connect("changed", callable_mp(this, &TileSetAtlasSourceEditor::_atlas_source_proxy_object_changed));
|
atlas_source_proxy_object->connect("changed", callable_mp(this, &TileSetAtlasSourceEditor::_atlas_source_proxy_object_changed));
|
||||||
|
|
||||||
atlas_source_inspector = memnew(EditorInspector);
|
atlas_source_inspector = memnew(EditorInspector);
|
||||||
atlas_source_inspector->set_vertical_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
|
atlas_source_inspector->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
atlas_source_inspector->set_show_categories(true);
|
||||||
atlas_source_inspector->edit(atlas_source_proxy_object);
|
atlas_source_inspector->edit(atlas_source_proxy_object);
|
||||||
middle_vbox_container->add_child(atlas_source_inspector);
|
middle_vbox_container->add_child(atlas_source_inspector);
|
||||||
|
|
||||||
// Right panel.
|
// -- Right side --
|
||||||
VBoxContainer *right_panel = memnew(VBoxContainer);
|
VBoxContainer *right_vbox_container = memnew(VBoxContainer);
|
||||||
right_panel->set_h_size_flags(SIZE_EXPAND_FILL);
|
add_child(right_vbox_container);
|
||||||
right_panel->set_v_size_flags(SIZE_EXPAND_FILL);
|
|
||||||
split_container_right_side->add_child(right_panel);
|
|
||||||
|
|
||||||
// -- Dialogs --
|
|
||||||
confirm_auto_create_tiles = memnew(AcceptDialog);
|
|
||||||
confirm_auto_create_tiles->set_title(TTR("Auto Create Tiles in Non-Transparent Texture Regions?"));
|
|
||||||
confirm_auto_create_tiles->set_text(TTR("The atlas's texture was modified.\nWould you like to automatically create tiles in the atlas?"));
|
|
||||||
confirm_auto_create_tiles->set_ok_button_text(TTR("Yes"));
|
|
||||||
confirm_auto_create_tiles->add_cancel_button()->set_text(TTR("No"));
|
|
||||||
confirm_auto_create_tiles->connect("confirmed", callable_mp(this, &TileSetAtlasSourceEditor::_auto_create_tiles));
|
|
||||||
add_child(confirm_auto_create_tiles);
|
|
||||||
|
|
||||||
// -- Toolbox --
|
|
||||||
tools_button_group.instantiate();
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_fix_selected_and_hovered_tiles).unbind(1));
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_tile_id_label).unbind(1));
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_atlas_source_inspector).unbind(1));
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_tile_inspector).unbind(1));
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_tile_data_editors).unbind(1));
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_current_tile_data_editor).unbind(1));
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_atlas_view).unbind(1));
|
|
||||||
tools_button_group->connect("pressed", callable_mp(this, &TileSetAtlasSourceEditor::_update_toolbar).unbind(1));
|
|
||||||
|
|
||||||
toolbox = memnew(HBoxContainer);
|
|
||||||
right_panel->add_child(toolbox);
|
|
||||||
|
|
||||||
tool_setup_atlas_source_button = memnew(Button);
|
|
||||||
tool_setup_atlas_source_button->set_flat(true);
|
|
||||||
tool_setup_atlas_source_button->set_toggle_mode(true);
|
|
||||||
tool_setup_atlas_source_button->set_pressed(true);
|
|
||||||
tool_setup_atlas_source_button->set_button_group(tools_button_group);
|
|
||||||
tool_setup_atlas_source_button->set_tooltip_text(TTR("Atlas setup. Add/Remove tiles tool (use the shift key to create big tiles, control for rectangle editing)."));
|
|
||||||
toolbox->add_child(tool_setup_atlas_source_button);
|
|
||||||
|
|
||||||
tool_select_button = memnew(Button);
|
|
||||||
tool_select_button->set_flat(true);
|
|
||||||
tool_select_button->set_toggle_mode(true);
|
|
||||||
tool_select_button->set_pressed(false);
|
|
||||||
tool_select_button->set_button_group(tools_button_group);
|
|
||||||
tool_select_button->set_tooltip_text(TTR("Select tiles."));
|
|
||||||
toolbox->add_child(tool_select_button);
|
|
||||||
|
|
||||||
tool_paint_button = memnew(Button);
|
|
||||||
tool_paint_button->set_flat(true);
|
|
||||||
tool_paint_button->set_toggle_mode(true);
|
|
||||||
tool_paint_button->set_button_group(tools_button_group);
|
|
||||||
tool_paint_button->set_tooltip_text(TTR("Paint properties."));
|
|
||||||
toolbox->add_child(tool_paint_button);
|
|
||||||
|
|
||||||
// Tool settings.
|
// Tool settings.
|
||||||
tool_settings = memnew(HBoxContainer);
|
tool_settings = memnew(HBoxContainer);
|
||||||
toolbox->add_child(tool_settings);
|
right_vbox_container->add_child(tool_settings);
|
||||||
|
|
||||||
tool_settings_vsep = memnew(VSeparator);
|
|
||||||
tool_settings->add_child(tool_settings_vsep);
|
|
||||||
|
|
||||||
tool_settings_tile_data_toolbar_container = memnew(HBoxContainer);
|
tool_settings_tile_data_toolbar_container = memnew(HBoxContainer);
|
||||||
tool_settings->add_child(tool_settings_tile_data_toolbar_container);
|
tool_settings->add_child(tool_settings_tile_data_toolbar_container);
|
||||||
@@ -2505,24 +2486,31 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
|
|||||||
tool_advanced_menu_buttom->get_popup()->add_item(TTR("Create Tiles in Non-Transparent Texture Regions"), ADVANCED_AUTO_CREATE_TILES);
|
tool_advanced_menu_buttom->get_popup()->add_item(TTR("Create Tiles in Non-Transparent Texture Regions"), ADVANCED_AUTO_CREATE_TILES);
|
||||||
tool_advanced_menu_buttom->get_popup()->add_item(TTR("Remove Tiles in Fully Transparent Texture Regions"), ADVANCED_AUTO_REMOVE_TILES);
|
tool_advanced_menu_buttom->get_popup()->add_item(TTR("Remove Tiles in Fully Transparent Texture Regions"), ADVANCED_AUTO_REMOVE_TILES);
|
||||||
tool_advanced_menu_buttom->get_popup()->connect("id_pressed", callable_mp(this, &TileSetAtlasSourceEditor::_menu_option));
|
tool_advanced_menu_buttom->get_popup()->connect("id_pressed", callable_mp(this, &TileSetAtlasSourceEditor::_menu_option));
|
||||||
toolbox->add_child(tool_advanced_menu_buttom);
|
tool_settings->add_child(tool_advanced_menu_buttom);
|
||||||
|
|
||||||
_update_toolbar();
|
_update_toolbar();
|
||||||
|
|
||||||
// Right side of toolbar.
|
// Right side of toolbar.
|
||||||
Control *middle_space = memnew(Control);
|
Control *middle_space = memnew(Control);
|
||||||
middle_space->set_h_size_flags(SIZE_EXPAND_FILL);
|
middle_space->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||||
toolbox->add_child(middle_space);
|
tool_settings->add_child(middle_space);
|
||||||
|
|
||||||
tool_tile_id_label = memnew(Label);
|
tool_tile_id_label = memnew(Label);
|
||||||
tool_tile_id_label->set_mouse_filter(Control::MOUSE_FILTER_STOP);
|
tool_tile_id_label->set_mouse_filter(Control::MOUSE_FILTER_STOP);
|
||||||
toolbox->add_child(tool_tile_id_label);
|
tool_settings->add_child(tool_tile_id_label);
|
||||||
_update_tile_id_label();
|
_update_tile_id_label();
|
||||||
|
|
||||||
|
// Right panel.
|
||||||
|
VBoxContainer *right_panel = memnew(VBoxContainer);
|
||||||
|
right_panel->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
right_panel->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
right_vbox_container->add_child(right_panel);
|
||||||
|
|
||||||
// Tile atlas view.
|
// Tile atlas view.
|
||||||
tile_atlas_view = memnew(TileAtlasView);
|
tile_atlas_view = memnew(TileAtlasView);
|
||||||
tile_atlas_view->set_h_size_flags(SIZE_EXPAND_FILL);
|
tile_atlas_view->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||||
tile_atlas_view->set_v_size_flags(SIZE_EXPAND_FILL);
|
tile_atlas_view->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
tile_atlas_view->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
|
||||||
tile_atlas_view->connect("transform_changed", callable_mp(TilesEditorPlugin::get_singleton(), &TilesEditorPlugin::set_atlas_view_transform));
|
tile_atlas_view->connect("transform_changed", callable_mp(TilesEditorPlugin::get_singleton(), &TilesEditorPlugin::set_atlas_view_transform));
|
||||||
tile_atlas_view->connect("transform_changed", callable_mp(this, &TileSetAtlasSourceEditor::_tile_atlas_view_transform_changed).unbind(2));
|
tile_atlas_view->connect("transform_changed", callable_mp(this, &TileSetAtlasSourceEditor::_tile_atlas_view_transform_changed).unbind(2));
|
||||||
right_panel->add_child(tile_atlas_view);
|
right_panel->add_child(tile_atlas_view);
|
||||||
@@ -2565,17 +2553,17 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
|
|||||||
tile_atlas_view->add_control_over_alternative_tiles(alternative_tiles_control_unscaled, false);
|
tile_atlas_view->add_control_over_alternative_tiles(alternative_tiles_control_unscaled, false);
|
||||||
alternative_tiles_control_unscaled->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
|
alternative_tiles_control_unscaled->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
|
||||||
|
|
||||||
tile_atlas_view_missing_source_label = memnew(Label);
|
|
||||||
tile_atlas_view_missing_source_label->set_text(TTR("Add or select an atlas texture to the left panel."));
|
|
||||||
tile_atlas_view_missing_source_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
|
|
||||||
tile_atlas_view_missing_source_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
|
|
||||||
tile_atlas_view_missing_source_label->set_h_size_flags(SIZE_EXPAND_FILL);
|
|
||||||
tile_atlas_view_missing_source_label->set_v_size_flags(SIZE_EXPAND_FILL);
|
|
||||||
tile_atlas_view_missing_source_label->hide();
|
|
||||||
right_panel->add_child(tile_atlas_view_missing_source_label);
|
|
||||||
|
|
||||||
EditorNode::get_singleton()->get_editor_data().add_undo_redo_inspector_hook_callback(callable_mp(this, &TileSetAtlasSourceEditor::_undo_redo_inspector_callback));
|
EditorNode::get_singleton()->get_editor_data().add_undo_redo_inspector_hook_callback(callable_mp(this, &TileSetAtlasSourceEditor::_undo_redo_inspector_callback));
|
||||||
|
|
||||||
|
// -- Dialogs --
|
||||||
|
confirm_auto_create_tiles = memnew(AcceptDialog);
|
||||||
|
confirm_auto_create_tiles->set_title(TTR("Auto Create Tiles in Non-Transparent Texture Regions?"));
|
||||||
|
confirm_auto_create_tiles->set_text(TTR("The atlas's texture was modified.\nWould you like to automatically create tiles in the atlas?"));
|
||||||
|
confirm_auto_create_tiles->set_ok_button_text(TTR("Yes"));
|
||||||
|
confirm_auto_create_tiles->add_cancel_button()->set_text(TTR("No"));
|
||||||
|
confirm_auto_create_tiles->connect("confirmed", callable_mp(this, &TileSetAtlasSourceEditor::_auto_create_tiles));
|
||||||
|
add_child(confirm_auto_create_tiles);
|
||||||
|
|
||||||
// Inspector plugin.
|
// Inspector plugin.
|
||||||
Ref<EditorInspectorPluginTileData> tile_data_inspector_plugin;
|
Ref<EditorInspectorPluginTileData> tile_data_inspector_plugin;
|
||||||
tile_data_inspector_plugin.instantiate();
|
tile_data_inspector_plugin.instantiate();
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ class TileSet;
|
|||||||
class Tree;
|
class Tree;
|
||||||
class VSeparator;
|
class VSeparator;
|
||||||
|
|
||||||
class TileSetAtlasSourceEditor : public HBoxContainer {
|
class TileSetAtlasSourceEditor : public HSplitContainer {
|
||||||
GDCLASS(TileSetAtlasSourceEditor, HBoxContainer);
|
GDCLASS(TileSetAtlasSourceEditor, HSplitContainer);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// A class to store which tiles are selected.
|
// A class to store which tiles are selected.
|
||||||
@@ -77,7 +77,7 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
void set_id(int p_id);
|
void set_id(int p_id);
|
||||||
int get_id();
|
int get_id() const;
|
||||||
|
|
||||||
void edit(Ref<TileSet> p_tile_set, TileSetAtlasSource *p_tile_set_atlas_source, int p_source_id);
|
void edit(Ref<TileSet> p_tile_set, TileSetAtlasSource *p_tile_set_atlas_source, int p_source_id);
|
||||||
TileSetAtlasSource *get_edited() { return tile_set_atlas_source; };
|
TileSetAtlasSource *get_edited() { return tile_set_atlas_source; };
|
||||||
@@ -137,19 +137,15 @@ private:
|
|||||||
|
|
||||||
// -- Inspector --
|
// -- Inspector --
|
||||||
AtlasTileProxyObject *tile_proxy_object = nullptr;
|
AtlasTileProxyObject *tile_proxy_object = nullptr;
|
||||||
Label *tile_inspector_label = nullptr;
|
|
||||||
EditorInspector *tile_inspector = nullptr;
|
EditorInspector *tile_inspector = nullptr;
|
||||||
Label *tile_inspector_no_tile_selected_label = nullptr;
|
Label *tile_inspector_no_tile_selected_label = nullptr;
|
||||||
String selected_property;
|
String selected_property;
|
||||||
void _inspector_property_selected(String p_property);
|
void _inspector_property_selected(String p_property);
|
||||||
|
|
||||||
TileSetAtlasSourceProxyObject *atlas_source_proxy_object = nullptr;
|
TileSetAtlasSourceProxyObject *atlas_source_proxy_object = nullptr;
|
||||||
Label *atlas_source_inspector_label = nullptr;
|
|
||||||
EditorInspector *atlas_source_inspector = nullptr;
|
EditorInspector *atlas_source_inspector = nullptr;
|
||||||
|
|
||||||
// -- Atlas view --
|
// -- Atlas view --
|
||||||
HBoxContainer *toolbox = nullptr;
|
|
||||||
Label *tile_atlas_view_missing_source_label = nullptr;
|
|
||||||
TileAtlasView *tile_atlas_view = nullptr;
|
TileAtlasView *tile_atlas_view = nullptr;
|
||||||
|
|
||||||
// Dragging
|
// Dragging
|
||||||
@@ -210,7 +206,6 @@ private:
|
|||||||
|
|
||||||
// Tool settings.
|
// Tool settings.
|
||||||
HBoxContainer *tool_settings = nullptr;
|
HBoxContainer *tool_settings = nullptr;
|
||||||
VSeparator *tool_settings_vsep = nullptr;
|
|
||||||
HBoxContainer *tool_settings_tile_data_toolbar_container = nullptr;
|
HBoxContainer *tool_settings_tile_data_toolbar_container = nullptr;
|
||||||
Button *tools_settings_erase_button = nullptr;
|
Button *tools_settings_erase_button = nullptr;
|
||||||
MenuButton *tool_advanced_menu_buttom = nullptr;
|
MenuButton *tool_advanced_menu_buttom = nullptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user