Update Joint gizmos automatically
(cherry picked from commit 3e77b6d49d
)
This commit is contained in:
parent
97a787aa71
commit
add8d1b9df
|
@ -828,12 +828,11 @@ public:
|
||||||
static const int HIDDEN = 1;
|
static const int HIDDEN = 1;
|
||||||
static const int ON_TOP = 2;
|
static const int ON_TOP = 2;
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
int current_state;
|
int current_state;
|
||||||
List<EditorSpatialGizmo *> current_gizmos;
|
List<EditorSpatialGizmo *> current_gizmos;
|
||||||
HashMap<String, Vector<Ref<SpatialMaterial> > > materials;
|
HashMap<String, Vector<Ref<SpatialMaterial> > > materials;
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
virtual bool has_gizmo(Spatial *p_spatial);
|
virtual bool has_gizmo(Spatial *p_spatial);
|
||||||
virtual Ref<EditorSpatialGizmo> create_gizmo(Spatial *p_spatial);
|
virtual Ref<EditorSpatialGizmo> create_gizmo(Spatial *p_spatial);
|
||||||
|
|
|
@ -4075,6 +4075,25 @@ JointSpatialGizmoPlugin::JointSpatialGizmoPlugin() {
|
||||||
create_material("joint_material", EDITOR_DEF("editors/3d_gizmos/gizmo_colors/joint", Color(0.5, 0.8, 1)));
|
create_material("joint_material", EDITOR_DEF("editors/3d_gizmos/gizmo_colors/joint", Color(0.5, 0.8, 1)));
|
||||||
create_material("joint_body_a_material", EDITOR_DEF("editors/3d_gizmos/gizmo_colors/joint_body_a", Color(0.6, 0.8, 1)));
|
create_material("joint_body_a_material", EDITOR_DEF("editors/3d_gizmos/gizmo_colors/joint_body_a", Color(0.6, 0.8, 1)));
|
||||||
create_material("joint_body_b_material", EDITOR_DEF("editors/3d_gizmos/gizmo_colors/joint_body_b", Color(0.6, 0.9, 1)));
|
create_material("joint_body_b_material", EDITOR_DEF("editors/3d_gizmos/gizmo_colors/joint_body_b", Color(0.6, 0.9, 1)));
|
||||||
|
|
||||||
|
update_timer = memnew(Timer);
|
||||||
|
update_timer->set_name("JointGizmoUpdateTimer");
|
||||||
|
update_timer->set_wait_time(1.0 / 120.0);
|
||||||
|
update_timer->connect("timeout", this, "incremental_update_gizmos");
|
||||||
|
update_timer->set_autostart(true);
|
||||||
|
EditorNode::get_singleton()->call_deferred("add_child", update_timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JointSpatialGizmoPlugin::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("incremental_update_gizmos"), &JointSpatialGizmoPlugin::incremental_update_gizmos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JointSpatialGizmoPlugin::incremental_update_gizmos() {
|
||||||
|
if (!current_gizmos.empty()) {
|
||||||
|
update_idx++;
|
||||||
|
update_idx = update_idx % current_gizmos.size();
|
||||||
|
redraw(current_gizmos[update_idx]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JointSpatialGizmoPlugin::has_gizmo(Spatial *p_spatial) {
|
bool JointSpatialGizmoPlugin::has_gizmo(Spatial *p_spatial) {
|
||||||
|
|
|
@ -390,6 +390,14 @@ class JointSpatialGizmoPlugin : public EditorSpatialGizmoPlugin {
|
||||||
|
|
||||||
GDCLASS(JointSpatialGizmoPlugin, EditorSpatialGizmoPlugin);
|
GDCLASS(JointSpatialGizmoPlugin, EditorSpatialGizmoPlugin);
|
||||||
|
|
||||||
|
Timer *update_timer;
|
||||||
|
uint64_t update_idx = 0;
|
||||||
|
|
||||||
|
void incremental_update_gizmos();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool has_gizmo(Spatial *p_spatial);
|
bool has_gizmo(Spatial *p_spatial);
|
||||||
String get_name() const;
|
String get_name() const;
|
||||||
|
|
Loading…
Reference in New Issue