Skip to content

Commit 4726f46

Browse files
committed
Add BlendSpace BlendPoint weight velocity limiting
1 parent ce94b26 commit 4726f46

10 files changed

+447
-22
lines changed

doc/classes/AnimationNodeBlendSpace1D.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@
7575
<member name="min_space" type="float" setter="set_min_space" getter="get_min_space" default="-1.0">
7676
The blend space's axis's lower limit for the points' position. See [method add_blend_point].
7777
</member>
78+
<member name="smooth" type="bool" setter="set_use_smooth" getter="is_using_smooth" default="false">
79+
If [code]true[/code], while [member sync] is [code]true[/code] a blend point's weight is applied over time using [member smooth_speed].
80+
</member>
81+
<member name="smooth_speed" type="float" setter="set_smooth_speed" getter="get_smooth_speed" default="1.0">
82+
Controls the blend point smoothing speed.
83+
</member>
7884
<member name="snap" type="float" setter="set_snap" getter="get_snap" default="0.1">
7985
Position increment to snap to when moving a point on the axis.
8086
</member>

doc/classes/AnimationNodeBlendSpace2D.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@
110110
<member name="min_space" type="Vector2" setter="set_min_space" getter="get_min_space" default="Vector2(-1, -1)">
111111
The blend space's X and Y axes' lower limit for the points' position. See [method add_blend_point].
112112
</member>
113+
<member name="smooth" type="bool" setter="set_use_smooth" getter="is_using_smooth" default="false">
114+
If [code]true[/code], while [member sync] is [code]true[/code] a blend point's weight is applied over time using [member smooth_speed].
115+
</member>
116+
<member name="smooth_speed" type="float" setter="set_smooth_speed" getter="get_smooth_speed" default="1.0">
117+
Controls the blend point smoothing speed.
118+
</member>
113119
<member name="snap" type="Vector2" setter="set_snap" getter="get_snap" default="Vector2(0.1, 0.1)">
114120
Position increment to snap to when moving a point.
115121
</member>

editor/plugins/animation_blend_space_1d_editor.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,8 @@ void AnimationNodeBlendSpace1DEditor::_update_space() {
336336

337337
sync->set_pressed(blend_space->is_using_sync());
338338
interpolation->select(blend_space->get_blend_mode());
339+
smooth->set_pressed(blend_space->is_using_smooth());
340+
smooth_speed->set_value(blend_space->get_smooth_speed());
339341

340342
label_value->set_text(blend_space->get_value_label());
341343

@@ -364,6 +366,11 @@ void AnimationNodeBlendSpace1DEditor::_config_changed(double) {
364366
undo_redo->add_undo_method(blend_space.ptr(), "set_use_sync", blend_space->is_using_sync());
365367
undo_redo->add_do_method(blend_space.ptr(), "set_blend_mode", interpolation->get_selected());
366368
undo_redo->add_undo_method(blend_space.ptr(), "set_blend_mode", blend_space->get_blend_mode());
369+
undo_redo->add_do_method(blend_space.ptr(), "set_use_smooth", smooth->is_pressed());
370+
undo_redo->add_undo_method(blend_space.ptr(), "set_use_smooth", blend_space->is_using_smooth());
371+
smooth_hb->set_visible((sync->is_pressed() && interpolation->get_selected() == AnimationNodeBlendSpace1D::BLEND_MODE_INTERPOLATED));
372+
undo_redo->add_do_method(blend_space.ptr(), "set_smooth_speed", smooth_speed->get_value());
373+
undo_redo->add_undo_method(blend_space.ptr(), "set_use_smooth", blend_space->get_smooth_speed());
367374
undo_redo->add_do_method(this, "_update_space");
368375
undo_redo->add_undo_method(this, "_update_space");
369376
undo_redo->commit_action();
@@ -646,6 +653,8 @@ void AnimationNodeBlendSpace1DEditor::edit(const Ref<AnimationNode> &p_node) {
646653
min_value->set_editable(!read_only);
647654
max_value->set_editable(!read_only);
648655
sync->set_disabled(read_only);
656+
smooth->set_disabled(read_only);
657+
smooth_speed->set_editable(!read_only);
649658
interpolation->set_disabled(read_only);
650659
}
651660

@@ -728,6 +737,24 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() {
728737
top_hb->add_child(interpolation);
729738
interpolation->connect(SceneStringName(item_selected), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed));
730739

740+
smooth_hb = memnew(HBoxContainer);
741+
top_hb->add_child(smooth_hb);
742+
smooth_hb->add_child(memnew(VSeparator));
743+
744+
smooth_hb->add_child(memnew(Label(TTR("Smooth:"))));
745+
smooth = memnew(CheckBox);
746+
smooth_hb->add_child(smooth);
747+
smooth->connect(SceneStringName(toggled), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed));
748+
749+
smooth_hb->add_child(memnew(Label(TTR("Speed:"))));
750+
751+
smooth_speed = memnew(SpinBox);
752+
smooth_hb->add_child(smooth_speed);
753+
smooth_speed->set_min(0.01);
754+
smooth_speed->set_step(0.01);
755+
smooth_speed->set_max(1000);
756+
smooth_speed->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed));
757+
731758
edit_hb = memnew(HBoxContainer);
732759
top_hb->add_child(edit_hb);
733760
edit_hb->add_child(memnew(VSeparator));

editor/plugins/animation_blend_space_1d_editor.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ class AnimationNodeBlendSpace1DEditor : public AnimationTreeNodeEditorPlugin {
6868
CheckBox *sync = nullptr;
6969
OptionButton *interpolation = nullptr;
7070

71+
HBoxContainer *smooth_hb = nullptr;
72+
CheckBox *smooth = nullptr;
73+
SpinBox *smooth_speed = nullptr;
74+
7175
HBoxContainer *edit_hb = nullptr;
7276
SpinBox *edit_value = nullptr;
7377
Button *open_editor = nullptr;

editor/plugins/animation_blend_space_2d_editor.cpp

Lines changed: 131 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "editor/editor_string_names.h"
3939
#include "editor/editor_undo_redo_manager.h"
4040
#include "editor/gui/editor_file_dialog.h"
41+
#include "editor/inspector_dock.h"
4142
#include "editor/themes/editor_scale.h"
4243
#include "scene/animation/animation_blend_tree.h"
4344
#include "scene/animation/animation_player.h"
@@ -53,6 +54,21 @@
5354
#include "scene/gui/spin_box.h"
5455
#include "scene/main/window.h"
5556

57+
//void BlendPointEditor::_bind_methods() {
58+
// ClassDB::bind_method(D_METHOD("set_fade_in", "value"), &BlendPointEditor::set_fade_in);
59+
// ClassDB::bind_method(D_METHOD("get_fade_in"), &BlendPointEditor::get_fade_in);
60+
// ClassDB::bind_method(D_METHOD("set_fade_out", "value"), &BlendPointEditor::set_fade_out);
61+
// ClassDB::bind_method(D_METHOD("get_fade_out"), &BlendPointEditor::get_fade_out);
62+
// //ClassDB::bind_method(D_METHOD("_dont_undo_redo"), &BlendPointEditor::_dont_undo_redo);
63+
// //ClassDB::bind_method(D_METHOD("_hide_script_from_inspector"), &BlendPointEditor::_hide_script_from_inspector);
64+
// //ClassDB::bind_method(D_METHOD("_hide_metadata_from_inspector"), &BlendPointEditor::_hide_metadata_from_inspector);
65+
// ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fade_in", PROPERTY_HINT_NONE, "0,60,0.01,or_greater,suffix:s"), "set_fade_in", "get_fade_in");
66+
// ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fade_out", PROPERTY_HINT_NONE, "0,60,0.01,or_greater,suffix:s"), "set_fade_out", "get_fade_out");
67+
// ClassDB::bind_method(D_METHOD("get_anim_node"), &BlendPointEditor::get_anim_node);
68+
//
69+
// ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "animation_node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationNode"), "", "get_anim_node");
70+
//}
71+
5672
bool AnimationNodeBlendSpace2DEditor::can_edit(const Ref<AnimationNode> &p_node) {
5773
Ref<AnimationNodeBlendSpace2D> bs2d = p_node;
5874
return bs2d.is_valid();
@@ -88,6 +104,9 @@ void AnimationNodeBlendSpace2DEditor::edit(const Ref<AnimationNode> &p_node) {
88104
tool_triangle->set_disabled(read_only);
89105
auto_triangles->set_disabled(read_only);
90106
sync->set_disabled(read_only);
107+
default_velocity_limit->set_editable(!read_only);
108+
use_velocity_limit->set_disabled(read_only);
109+
override_delta->set_disabled(read_only);
91110
interpolation->set_disabled(read_only);
92111
}
93112

@@ -176,15 +195,16 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_gui_input(const Ref<InputEven
176195
if (points[i].distance_to(mb->get_position()) < 10 * EDSCALE) {
177196
selected_point = i;
178197
Ref<AnimationNode> node = blend_space->get_blend_point_node(i);
179-
EditorNode::get_singleton()->push_item(node.ptr(), "", true);
198+
current_blend_point_editor->setup(blend_space, selected_point, node);
199+
//EditorNode::get_singleton()->push_item(current_blend_point_editor.ptr(), "", true);
200+
InspectorDock::get_inspector_singleton()->edit(current_blend_point_editor.ptr());
180201
dragging_selected_attempt = true;
181202
drag_from = mb->get_position();
182203
_update_tool_erase();
183204
_update_edited_point_pos();
184205
return;
185206
}
186207
}
187-
188208
//then try to see if a triangle can be selected
189209
if (!blend_space->get_auto_triangles()) { //if autotriangles use, disable this
190210
for (int i = 0; i < blend_space->get_triangle_count(); i++) {
@@ -650,6 +670,9 @@ void AnimationNodeBlendSpace2DEditor::_update_space() {
650670

651671
sync->set_pressed(blend_space->is_using_sync());
652672
interpolation->select(blend_space->get_blend_mode());
673+
use_velocity_limit->set_pressed(blend_space->get_use_velocity_limit());
674+
default_velocity_limit->set_value(blend_space->get_velocity_limit());
675+
override_delta->set_pressed(blend_space->get_override_delta());
653676

654677
max_x_value->set_value(blend_space->get_max_space().x);
655678
max_y_value->set_value(blend_space->get_max_space().y);
@@ -686,6 +709,15 @@ void AnimationNodeBlendSpace2DEditor::_config_changed(double) {
686709
undo_redo->add_undo_method(blend_space.ptr(), "set_use_sync", blend_space->is_using_sync());
687710
undo_redo->add_do_method(blend_space.ptr(), "set_blend_mode", interpolation->get_selected());
688711
undo_redo->add_undo_method(blend_space.ptr(), "set_blend_mode", blend_space->get_blend_mode());
712+
undo_redo->add_do_method(blend_space.ptr(), "set_use_velocity_limit", use_velocity_limit->is_pressed());
713+
undo_redo->add_undo_method(blend_space.ptr(), "set_use_velocity_limit", blend_space->get_use_velocity_limit());
714+
undo_redo->add_do_method(blend_space.ptr(), "set_velocity_limit", default_velocity_limit->get_value());
715+
undo_redo->add_undo_method(blend_space.ptr(), "set_velocity_limit", blend_space->get_velocity_limit());
716+
undo_redo->add_do_method(blend_space.ptr(), "set_override_delta", override_delta->is_pressed());
717+
undo_redo->add_undo_method(blend_space.ptr(), "set_override_delta", blend_space->get_override_delta());
718+
blending_hb->set_visible(sync->is_pressed());
719+
//edit_fade_hb->set_visible(sync->is_pressed() && !Math::is_zero_approx(default_blend_time->get_value()));
720+
689721
undo_redo->add_do_method(this, "_update_space");
690722
undo_redo->add_undo_method(this, "_update_space");
691723
undo_redo->commit_action();
@@ -790,6 +822,19 @@ void AnimationNodeBlendSpace2DEditor::_edit_point_pos(double) {
790822
blend_space_draw->queue_redraw();
791823
}
792824

825+
void AnimationNodeBlendSpace2DEditor::_edit_curve() {
826+
//if (!blend_space->get_velocity_limit_curve().is_valid()) {
827+
// blend_space->get_velocity_limit_curve().instantiate();
828+
//}
829+
//EditorNode::get_singleton()->push_item(blend_space->get_velocity_limit_curve().ptr(), "", true);
830+
}
831+
void AnimationNodeBlendSpace2DEditor::_delete_curve() {
832+
//if (!blend_space->get_velocity_limit_curve().is_valid()) {
833+
// blend_space->get_velocity_limit_curve().instantiate();
834+
//}
835+
//EditorNode::get_singleton()->push_item(blend_space->get_velocity_limit_curve().ptr(), "", true);
836+
}
837+
793838
void AnimationNodeBlendSpace2DEditor::_notification(int p_what) {
794839
switch (p_what) {
795840
case NOTIFICATION_ENTER_TREE:
@@ -861,6 +906,61 @@ void AnimationNodeBlendSpace2DEditor::_auto_triangles_toggled() {
861906
undo_redo->commit_action();
862907
}
863908

909+
void BlendPointEditor::_edit_point_velocity_limit() {
910+
if (updating) {
911+
return;
912+
}
913+
updating = true;
914+
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
915+
undo_redo->create_action(TTR("Change Node Fade"));
916+
undo_redo->add_do_method(blend_space.ptr(), "set_blend_point_vl", selected_point, velocity_limit);
917+
undo_redo->add_undo_method(blend_space.ptr(), "set_blend_point_vl", selected_point, blend_space->get_blend_point_vl(selected_point));
918+
undo_redo->commit_action();
919+
updating = false;
920+
}
921+
void BlendPointEditor::setup(Ref<AnimationNodeBlendSpace2D> p_blend_space, int p_idx, Ref<AnimationNode> p_anim_node) {
922+
blend_space = p_blend_space;
923+
selected_point = p_idx;
924+
anim_node = p_anim_node;
925+
}
926+
927+
void BlendPointEditor::set_velocity_limit(float p_value) {
928+
if (blend_space.is_valid()) {
929+
velocity_limit = p_value;
930+
_edit_point_velocity_limit();
931+
}
932+
}
933+
double BlendPointEditor::get_velocity_limit() const {
934+
return (blend_space.is_valid()) ? blend_space->get_blend_point_vl(selected_point) : 0;
935+
}
936+
937+
Ref<AnimationNode> BlendPointEditor::get_anim_node() const {
938+
return anim_node;
939+
}
940+
void BlendPointEditor::set_velocity_limit_curve(float const p_curve) {
941+
if (blend_space.is_valid()) {
942+
blend_space->set_velocity_limit_curve(p_curve);
943+
}
944+
}
945+
float BlendPointEditor::get_velocity_limit_curve() const {
946+
return (blend_space.is_valid()) ? blend_space->get_velocity_limit_curve() : 1.0;
947+
}
948+
949+
void BlendPointEditor::_bind_methods() {
950+
ClassDB::bind_method(D_METHOD("set_velocity_limit", "value"), &BlendPointEditor::set_velocity_limit);
951+
ClassDB::bind_method(D_METHOD("get_velocity_limit"), &BlendPointEditor::get_velocity_limit);
952+
ClassDB::bind_method(D_METHOD("_dont_undo_redo"), &BlendPointEditor::_dont_undo_redo);
953+
ClassDB::bind_method(D_METHOD("_hide_script_from_inspector"), &BlendPointEditor::_hide_script_from_inspector);
954+
ClassDB::bind_method(D_METHOD("_hide_metadata_from_inspector"), &BlendPointEditor::_hide_metadata_from_inspector);
955+
956+
ClassDB::bind_method(D_METHOD("get_velocity_limit_curve"), &BlendPointEditor::get_velocity_limit_curve);
957+
ClassDB::bind_method(D_METHOD("set_velocity_limit_curve"), &BlendPointEditor::set_velocity_limit_curve);
958+
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "velocity_limit", PROPERTY_HINT_NONE, "0,60,0.01,or_greater,suffix:/s"), "set_velocity_limit", "get_velocity_limit");
959+
ClassDB::bind_method(D_METHOD("get_anim_node"), &BlendPointEditor::get_anim_node);
960+
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "animation_node", PROPERTY_HINT_RESOURCE_TYPE, "AnimationNode"), "", "get_anim_node");
961+
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "velocity_limit_ease", PROPERTY_HINT_EXP_EASING), "set_velocity_limit_curve", "get_velocity_limit_curve");
962+
}
963+
864964
void AnimationNodeBlendSpace2DEditor::_bind_methods() {
865965
ClassDB::bind_method("_update_space", &AnimationNodeBlendSpace2DEditor::_update_space);
866966
ClassDB::bind_method("_update_tool_erase", &AnimationNodeBlendSpace2DEditor::_update_tool_erase);
@@ -978,6 +1078,31 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() {
9781078
top_hb->add_child(interpolation);
9791079
interpolation->connect(SceneStringName(item_selected), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed));
9801080

1081+
blending_hb = memnew(HBoxContainer);
1082+
top_hb->add_child(blending_hb);
1083+
blending_hb->add_child(memnew(VSeparator));
1084+
1085+
blending_hb->add_child(memnew(Label(TTR("Use Velocity Limit:"))));
1086+
use_velocity_limit = memnew(CheckBox);
1087+
blending_hb->add_child(use_velocity_limit);
1088+
use_velocity_limit->connect(SceneStringName(toggled), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed));
1089+
1090+
blending_hb->add_child(memnew(Label(TTR("Default Velocity limit:"))));
1091+
default_velocity_limit = memnew(SpinBox);
1092+
blending_hb->add_child(default_velocity_limit);
1093+
default_velocity_limit->set_min(0.0);
1094+
default_velocity_limit->set_step(0.01);
1095+
default_velocity_limit->set_max(60.0);
1096+
default_velocity_limit->set_suffix("/s");
1097+
default_velocity_limit->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed));
1098+
1099+
blending_hb->add_child(memnew(Label(TTR("Override delta:"))));
1100+
override_delta = memnew(CheckBox);
1101+
blending_hb->add_child(override_delta);
1102+
override_delta->connect(SceneStringName(toggled), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed));
1103+
1104+
current_blend_point_editor.instantiate();
1105+
9811106
edit_hb = memnew(HBoxContainer);
9821107
top_hb->add_child(edit_hb);
9831108
edit_hb->add_child(memnew(VSeparator));
@@ -996,6 +1121,7 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() {
9961121
edit_y->set_max(1000);
9971122
edit_y->set_accessibility_name(TTRC("Blend X Value"));
9981123
edit_y->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_edit_point_pos));
1124+
9991125
open_editor = memnew(Button);
10001126
edit_hb->add_child(open_editor);
10011127
open_editor->set_text(TTR("Open Editor"));
@@ -1114,3 +1240,6 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() {
11141240
dragging_selected = false;
11151241
dragging_selected_attempt = false;
11161242
}
1243+
AnimationNodeBlendSpace2DEditor::~AnimationNodeBlendSpace2DEditor() {
1244+
SceneTree::get_singleton()->queue_delete(current_blend_point_editor.ptr());
1245+
}

editor/plugins/animation_blend_space_2d_editor.h

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
#include "editor/plugins/animation_tree_editor_plugin.h"
3434
#include "editor/plugins/editor_plugin.h"
3535
#include "scene/animation/animation_blend_space_2d.h"
36+
#include "scene/gui/dialogs.h"
3637
#include "scene/gui/graph_edit.h"
38+
#include "scene/gui/tree.h"
3739

3840
class Button;
3941
class CheckBox;
@@ -43,8 +45,10 @@ class PanelContainer;
4345
class SpinBox;
4446
class VSeparator;
4547

48+
class BlendPointEditor;
4649
class AnimationNodeBlendSpace2DEditor : public AnimationTreeNodeEditorPlugin {
4750
GDCLASS(AnimationNodeBlendSpace2DEditor, AnimationTreeNodeEditorPlugin);
51+
friend BlendPointEditor;
4852

4953
Ref<AnimationNodeBlendSpace2D> blend_space;
5054
bool read_only = false;
@@ -60,8 +64,19 @@ class AnimationNodeBlendSpace2DEditor : public AnimationTreeNodeEditorPlugin {
6064
SpinBox *snap_x = nullptr;
6165
SpinBox *snap_y = nullptr;
6266
CheckBox *sync = nullptr;
67+
6368
OptionButton *interpolation = nullptr;
6469

70+
HBoxContainer *blending_hb = nullptr;
71+
CheckBox *use_velocity_limit = nullptr;
72+
SpinBox *default_velocity_limit = nullptr;
73+
CheckBox *override_delta = nullptr;
74+
Ref<BlendPointEditor> current_blend_point_editor;
75+
76+
HBoxContainer *edit_fade_hb = nullptr;
77+
SpinBox *edit_fade_in = nullptr;
78+
SpinBox *edit_fade_out = nullptr;
79+
6580
Button *auto_triangles = nullptr;
6681

6782
LineEdit *label_x = nullptr;
@@ -119,6 +134,8 @@ class AnimationNodeBlendSpace2DEditor : public AnimationTreeNodeEditorPlugin {
119134
void _erase_selected();
120135
void _edit_point_pos(double);
121136
void _open_editor();
137+
void _delete_curve();
138+
void _edit_curve();
122139

123140
void _auto_triangles_toggled();
124141

@@ -145,4 +162,33 @@ class AnimationNodeBlendSpace2DEditor : public AnimationTreeNodeEditorPlugin {
145162
virtual bool can_edit(const Ref<AnimationNode> &p_node) override;
146163
virtual void edit(const Ref<AnimationNode> &p_node) override;
147164
AnimationNodeBlendSpace2DEditor();
165+
~AnimationNodeBlendSpace2DEditor();
166+
};
167+
168+
class BlendPointEditor : public RefCounted {
169+
GDCLASS(BlendPointEditor, RefCounted);
170+
171+
private:
172+
Ref<AnimationNodeBlendSpace2D> blend_space;
173+
Ref<AnimationNode> anim_node;
174+
float velocity_limit_curve;
175+
int selected_point = -1;
176+
float velocity_limit;
177+
bool updating = false;
178+
179+
public:
180+
void setup(Ref<AnimationNodeBlendSpace2D> p_blend_space, int idx, Ref<AnimationNode> p_anim_node);
181+
182+
void set_velocity_limit(float p_value);
183+
double get_velocity_limit() const;
184+
185+
void _edit_point_velocity_limit();
186+
Ref<AnimationNode> get_anim_node() const;
187+
void set_velocity_limit_curve(float const p_curve);
188+
float get_velocity_limit_curve() const;
189+
bool _hide_script_from_inspector() { return true; }
190+
bool _hide_metadata_from_inspector() { return true; }
191+
bool _dont_undo_redo() { return true; }
192+
193+
static void _bind_methods();
148194
};

0 commit comments

Comments
 (0)