You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Tileset Editor Improvement
This commit is contained in:
@@ -57,6 +57,8 @@ void TextureRegionEditor::_region_draw() {
|
||||
base_tex = obj_styleBox->get_texture();
|
||||
else if (atlas_tex.is_valid())
|
||||
base_tex = atlas_tex->get_atlas();
|
||||
else if (tile_set.is_valid() && selected_tile != -1)
|
||||
base_tex = tile_set->tile_get_texture(selected_tile);
|
||||
if (base_tex.is_null())
|
||||
return;
|
||||
|
||||
@@ -281,6 +283,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
|
||||
r = obj_styleBox->get_region_rect();
|
||||
else if (atlas_tex.is_valid())
|
||||
r = atlas_tex->get_region();
|
||||
else if (tile_set.is_valid() && selected_tile != -1)
|
||||
r = tile_set->tile_get_region(selected_tile);
|
||||
rect.expand_to(r.position);
|
||||
rect.expand_to(r.position + r.size);
|
||||
}
|
||||
@@ -297,6 +301,9 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
|
||||
} else if (atlas_tex.is_valid()) {
|
||||
undo_redo->add_do_method(atlas_tex.ptr(), "set_region", rect);
|
||||
undo_redo->add_undo_method(atlas_tex.ptr(), "set_region", atlas_tex->get_region());
|
||||
} else if (tile_set.is_valid() && selected_tile != -1) {
|
||||
undo_redo->add_do_method(tile_set.ptr(), "tile_set_region", selected_tile, rect);
|
||||
undo_redo->add_undo_method(tile_set.ptr(), "tile_set_region", selected_tile, tile_set->tile_get_region(selected_tile));
|
||||
}
|
||||
undo_redo->add_do_method(edit_draw, "update");
|
||||
undo_redo->add_undo_method(edit_draw, "update");
|
||||
@@ -319,6 +326,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
|
||||
rect_prev = obj_styleBox->get_region_rect();
|
||||
else if (atlas_tex.is_valid())
|
||||
rect_prev = atlas_tex->get_region();
|
||||
else if (tile_set.is_valid() && selected_tile != -1)
|
||||
rect_prev = tile_set->tile_get_region(selected_tile);
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
Vector2 tuv = endpoints[i];
|
||||
@@ -362,6 +371,9 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) {
|
||||
} else if (obj_styleBox.is_valid()) {
|
||||
undo_redo->add_do_method(obj_styleBox.ptr(), "set_region_rect", obj_styleBox->get_region_rect());
|
||||
undo_redo->add_undo_method(obj_styleBox.ptr(), "set_region_rect", rect_prev);
|
||||
} else if (tile_set.is_valid()) {
|
||||
undo_redo->add_do_method(tile_set.ptr(), "tile_set_region", selected_tile, tile_set->tile_get_region(selected_tile));
|
||||
undo_redo->add_undo_method(tile_set.ptr(), "tile_set_region", selected_tile, rect_prev);
|
||||
}
|
||||
drag_index = -1;
|
||||
}
|
||||
@@ -582,6 +594,8 @@ void TextureRegionEditor::apply_rect(const Rect2 &rect) {
|
||||
obj_styleBox->set_region_rect(rect);
|
||||
else if (atlas_tex.is_valid())
|
||||
atlas_tex->set_region(rect);
|
||||
else if (tile_set.is_valid() && selected_tile != -1)
|
||||
tile_set->tile_set_region(selected_tile, rect);
|
||||
}
|
||||
|
||||
void TextureRegionEditor::_notification(int p_what) {
|
||||
@@ -596,11 +610,12 @@ void TextureRegionEditor::_notification(int p_what) {
|
||||
}
|
||||
|
||||
void TextureRegionEditor::_node_removed(Object *p_obj) {
|
||||
if (p_obj == node_sprite || p_obj == node_ninepatch || p_obj == obj_styleBox.ptr() || p_obj == atlas_tex.ptr()) {
|
||||
if (p_obj == node_sprite || p_obj == node_ninepatch || p_obj == obj_styleBox.ptr() || p_obj == atlas_tex.ptr() || p_obj == tile_set.ptr()) {
|
||||
node_ninepatch = NULL;
|
||||
node_sprite = NULL;
|
||||
obj_styleBox = Ref<StyleBox>(NULL);
|
||||
atlas_tex = Ref<AtlasTexture>(NULL);
|
||||
tile_set = Ref<TileSet>(NULL);
|
||||
hide();
|
||||
}
|
||||
}
|
||||
@@ -632,6 +647,8 @@ void TextureRegionEditor::edit(Object *p_obj) {
|
||||
obj_styleBox->remove_change_receptor(this);
|
||||
if (atlas_tex.is_valid())
|
||||
atlas_tex->remove_change_receptor(this);
|
||||
if (tile_set.is_valid())
|
||||
tile_set->remove_change_receptor(this);
|
||||
if (p_obj) {
|
||||
node_sprite = Object::cast_to<Sprite>(p_obj);
|
||||
node_ninepatch = Object::cast_to<NinePatchRect>(p_obj);
|
||||
@@ -639,6 +656,8 @@ void TextureRegionEditor::edit(Object *p_obj) {
|
||||
obj_styleBox = Ref<StyleBoxTexture>(Object::cast_to<StyleBoxTexture>(p_obj));
|
||||
if (Object::cast_to<AtlasTexture>(p_obj))
|
||||
atlas_tex = Ref<AtlasTexture>(Object::cast_to<AtlasTexture>(p_obj));
|
||||
if (Object::cast_to<TileSet>(p_obj))
|
||||
tile_set = Ref<TileSet>(Object::cast_to<TileSet>(p_obj));
|
||||
p_obj->add_change_receptor(this);
|
||||
_edit_region();
|
||||
} else {
|
||||
@@ -646,6 +665,7 @@ void TextureRegionEditor::edit(Object *p_obj) {
|
||||
node_ninepatch = NULL;
|
||||
obj_styleBox = Ref<StyleBoxTexture>(NULL);
|
||||
atlas_tex = Ref<AtlasTexture>(NULL);
|
||||
tile_set = Ref<TileSet>(NULL);
|
||||
}
|
||||
edit_draw->update();
|
||||
}
|
||||
@@ -668,6 +688,8 @@ void TextureRegionEditor::_edit_region() {
|
||||
texture = obj_styleBox->get_texture();
|
||||
else if (atlas_tex.is_valid())
|
||||
texture = atlas_tex->get_atlas();
|
||||
else if (tile_set.is_valid() && selected_tile != -1)
|
||||
texture = tile_set->tile_get_texture(selected_tile);
|
||||
|
||||
if (texture.is_null()) {
|
||||
return;
|
||||
@@ -735,6 +757,8 @@ void TextureRegionEditor::_edit_region() {
|
||||
rect = obj_styleBox->get_region_rect();
|
||||
else if (atlas_tex.is_valid())
|
||||
rect = atlas_tex->get_region();
|
||||
else if (tile_set.is_valid() && selected_tile != -1)
|
||||
rect = tile_set->tile_get_region(selected_tile);
|
||||
|
||||
edit_draw->update();
|
||||
}
|
||||
@@ -753,6 +777,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) {
|
||||
node_ninepatch = NULL;
|
||||
obj_styleBox = Ref<StyleBoxTexture>(NULL);
|
||||
atlas_tex = Ref<AtlasTexture>(NULL);
|
||||
tile_set = Ref<TileSet>(NULL);
|
||||
editor = p_editor;
|
||||
undo_redo = editor->get_undo_redo();
|
||||
|
||||
@@ -903,11 +928,11 @@ bool TextureRegionEditorPlugin::handles(Object *p_object) const {
|
||||
|
||||
void TextureRegionEditorPlugin::make_visible(bool p_visible) {
|
||||
if (p_visible) {
|
||||
region_button->show();
|
||||
if (region_button->is_pressed())
|
||||
texture_region_button->show();
|
||||
if (texture_region_button->is_pressed())
|
||||
region_editor->show();
|
||||
} else {
|
||||
region_button->hide();
|
||||
texture_region_button->hide();
|
||||
region_editor->edit(NULL);
|
||||
region_editor->hide();
|
||||
}
|
||||
@@ -961,10 +986,10 @@ TextureRegionEditorPlugin::TextureRegionEditorPlugin(EditorNode *p_node) {
|
||||
editor = p_node;
|
||||
region_editor = memnew(TextureRegionEditor(p_node));
|
||||
|
||||
region_button = p_node->add_bottom_panel_item(TTR("Texture Region"), region_editor);
|
||||
region_button->set_tooltip(TTR("Texture Region Editor"));
|
||||
texture_region_button = p_node->add_bottom_panel_item(TTR("Texture Region"), region_editor);
|
||||
texture_region_button->set_tooltip(TTR("Texture Region Editor"));
|
||||
|
||||
region_editor->set_custom_minimum_size(Size2(0, 200));
|
||||
region_editor->hide();
|
||||
region_button->hide();
|
||||
texture_region_button->hide();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user