diff --git a/texture_merger.cpp b/texture_merger.cpp index a975f8b..7d60ff4 100644 --- a/texture_merger.cpp +++ b/texture_merger.cpp @@ -133,8 +133,12 @@ bool TextureMerger::contains_texture(Ref texture) { return _packer->contains_texture(texture); } -Ref TextureMerger::get_texture(int index) { - return _packer->get_texture(index); +Ref TextureMerger::get_texture(Ref texture) { + return _packer->get_texture(texture); +} + +Ref TextureMerger::get_texture_index(int index) { + return _packer->get_texture_index(index); } bool TextureMerger::unref_texture_index(int index) { @@ -287,7 +291,8 @@ void TextureMerger::_bind_methods() { ClassDB::bind_method(D_METHOD("set_packer", "packer"), &TextureMerger::set_packer); ClassDB::bind_method(D_METHOD("add_texture", "texture"), &TextureMerger::add_texture); - ClassDB::bind_method(D_METHOD("get_texture", "index"), &TextureMerger::get_texture); + ClassDB::bind_method(D_METHOD("get_texture", "texture"), &TextureMerger::get_texture); + ClassDB::bind_method(D_METHOD("get_texture_index", "index"), &TextureMerger::get_texture_index); ClassDB::bind_method(D_METHOD("get_original_texture", "index"), &TextureMerger::get_original_texture); ClassDB::bind_method(D_METHOD("unref_texture_index", "index"), &TextureMerger::unref_texture_index); diff --git a/texture_merger.h b/texture_merger.h index e39fc53..e9275eb 100644 --- a/texture_merger.h +++ b/texture_merger.h @@ -40,7 +40,8 @@ public: void set_textures(const Vector &textures); Ref add_texture(Ref texture); - Ref get_texture(int index); + Ref get_texture(Ref texture); + Ref get_texture_index(int index); Ref get_original_texture(int index); bool contains_texture(Ref texture); diff --git a/texture_packer.cpp b/texture_packer.cpp index 59ff80e..c5a4949 100644 --- a/texture_packer.cpp +++ b/texture_packer.cpp @@ -118,18 +118,38 @@ Ref TexturePacker::add_texture(Ref texture) { return tex; } +Ref TexturePacker::get_texture(Ref texture) { + for (int i = 0; i < _rects.size(); ++i) { + rect_xywhf *r = _rects.get(i); + + Ref t; + Ref at = texture; + + if (_keep_original_atlases && at.is_valid()) + t = r->atlas_texture; + else + t = r->original_texture; + + if (t == texture) { + return _rects.get(i)->atlas_texture; + } + } + + return Ref(); +} + +Ref TexturePacker::get_texture_index(int index) { + ERR_FAIL_INDEX_V(index, _rects.size(), Ref()); + + return _rects.get(index)->atlas_texture; +} + Ref TexturePacker::get_original_texture(int index) { ERR_FAIL_INDEX_V(index, _rects.size(), Ref()); return _rects.get(index)->original_texture; } -Ref TexturePacker::get_texture(int index) { - ERR_FAIL_INDEX_V(index, _rects.size(), Ref()); - - return _rects.get(index)->atlas_texture; -} - bool TexturePacker::contains_texture(Ref texture) { for (int i = 0; i < _rects.size(); ++i) { rect_xywhf *r = _rects.get(i); @@ -417,7 +437,10 @@ void TexturePacker::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "margin"), "set_margin", "get_margin"); ClassDB::bind_method(D_METHOD("add_texture", "texture"), &TexturePacker::add_texture); - ClassDB::bind_method(D_METHOD("get_texture", "index"), &TexturePacker::get_texture); + + ClassDB::bind_method(D_METHOD("get_texture", "texture"), &TexturePacker::get_texture); + ClassDB::bind_method(D_METHOD("get_texture_index", "index"), &TexturePacker::get_texture_index); + ClassDB::bind_method(D_METHOD("get_original_texture", "index"), &TexturePacker::get_original_texture); ClassDB::bind_method(D_METHOD("unref_texture_index", "index"), &TexturePacker::unref_texture_index); diff --git a/texture_packer.h b/texture_packer.h index d806e4c..1336a57 100644 --- a/texture_packer.h +++ b/texture_packer.h @@ -31,9 +31,13 @@ public: void set_margin(const int margin); Ref add_texture(Ref texture); - Ref get_texture(int index); + + Ref get_texture(Ref texture); + Ref get_texture_index(int index); + Ref get_original_texture(int index); - bool contains_texture(Ref texture); + + bool contains_texture(Ref texture); bool unref_texture_index(int index); bool unref_texture(Ref texture);