From 285c02bf761c74eee19ea031f3da96218c91f7c4 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 27 Jul 2022 14:23:27 +0200 Subject: [PATCH] Ported: Add autocompletion for AnimatedSprite.play() - timothyqiu https://github.com/godotengine/godot/commit/0f7f3d08ba570841161c2aa9df2f2892a5ab2b24 --- scene/2d/animated_sprite.cpp | 21 +++++++++++++++++++++ scene/2d/animated_sprite.h | 2 ++ scene/3d/sprite_3d.cpp | 21 +++++++++++++++++++++ scene/3d/sprite_3d.h | 2 ++ 4 files changed, 46 insertions(+) diff --git a/scene/2d/animated_sprite.cpp b/scene/2d/animated_sprite.cpp index 37611a554..9af29faba 100644 --- a/scene/2d/animated_sprite.cpp +++ b/scene/2d/animated_sprite.cpp @@ -34,6 +34,10 @@ #include "scene/resources/texture.h" #include "scene/scene_string_names.h" +#ifdef TOOLS_ENABLED +#include "editor/editor_settings.h" +#endif + #define NORMAL_SUFFIX "_normal" #ifdef TOOLS_ENABLED @@ -274,6 +278,23 @@ void SpriteFrames::_set_animations(const Array &p_animations) { } } +void AnimatedSprite::get_argument_options(const StringName &p_function, int p_idx, List *r_options) const { +#ifdef TOOLS_ENABLED + const String quote_style = EDITOR_GET("text_editor/completion/use_single_quotes") ? "'" : "\""; +#else + const String quote_style = "\""; +#endif + + if (p_idx == 0 && p_function == "play" && frames.is_valid()) { + List al; + frames->get_animation_list(&al); + for (List::Element *E = al.front(); E; E = E->next()) { + r_options->push_back(quote_style + String(E->get()) + quote_style); + } + } + Node::get_argument_options(p_function, p_idx, r_options); +} + void SpriteFrames::_bind_methods() { ClassDB::bind_method(D_METHOD("add_animation", "anim"), &SpriteFrames::add_animation); ClassDB::bind_method(D_METHOD("has_animation", "anim"), &SpriteFrames::has_animation); diff --git a/scene/2d/animated_sprite.h b/scene/2d/animated_sprite.h index 922655eb7..592492248 100644 --- a/scene/2d/animated_sprite.h +++ b/scene/2d/animated_sprite.h @@ -196,6 +196,8 @@ public: bool is_flipped_v() const; virtual String get_configuration_warning() const; + virtual void get_argument_options(const StringName &p_function, int p_idx, List *r_options) const; + AnimatedSprite(); }; diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index 816347b20..40193eda9 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -34,6 +34,10 @@ #include "scene/2d/animated_sprite.h" #include "scene/scene_string_names.h" +#ifdef TOOLS_ENABLED +#include "editor/editor_settings.h" +#endif + Color SpriteBase3D::_get_color_accum() { if (!color_dirty) { return color_accum; @@ -275,6 +279,23 @@ SpatialMaterial::BillboardMode SpriteBase3D::get_billboard_mode() const { return billboard_mode; } +void AnimatedSprite3D::get_argument_options(const StringName &p_function, int p_idx, List *r_options) const { +#ifdef TOOLS_ENABLED + const String quote_style = EDITOR_GET("text_editor/completion/use_single_quotes") ? "'" : "\""; +#else + const String quote_style = "\""; +#endif + + if (p_idx == 0 && p_function == "play" && frames.is_valid()) { + List al; + frames->get_animation_list(&al); + for (List::Element *E = al.front(); E; E = E->next()) { + r_options->push_back(quote_style + String(E->get()) + quote_style); + } + } + Node::get_argument_options(p_function, p_idx, r_options); +} + void SpriteBase3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_centered", "centered"), &SpriteBase3D::set_centered); ClassDB::bind_method(D_METHOD("is_centered"), &SpriteBase3D::is_centered); diff --git a/scene/3d/sprite_3d.h b/scene/3d/sprite_3d.h index 889da3ce1..6a334edc4 100644 --- a/scene/3d/sprite_3d.h +++ b/scene/3d/sprite_3d.h @@ -240,6 +240,8 @@ public: virtual Rect2 get_item_rect() const; virtual String get_configuration_warning() const; + virtual void get_argument_options(const StringName &p_function, int p_idx, List *r_options) const; + AnimatedSprite3D(); };