Update Joint gizmos automatically

This commit is contained in:
jfons 2020-03-20 12:41:07 +01:00 committed by JFonS
parent cb1ae08c14
commit 3e77b6d49d
3 changed files with 21 additions and 2 deletions

View File

@ -4219,6 +4219,21 @@ Joint3DGizmoPlugin::Joint3DGizmoPlugin() {
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", callable_mp(this, &Joint3DGizmoPlugin::incremental_update_gizmos));
update_timer->set_autostart(true);
EditorNode::get_singleton()->call_deferred("add_child", update_timer);
}
void Joint3DGizmoPlugin::incremental_update_gizmos() {
if (!current_gizmos.empty()) {
update_idx++;
update_idx = update_idx % current_gizmos.size();
redraw(current_gizmos[update_idx]);
}
} }
bool Joint3DGizmoPlugin::has_gizmo(Node3D *p_spatial) { bool Joint3DGizmoPlugin::has_gizmo(Node3D *p_spatial) {

View File

@ -409,6 +409,11 @@ class Joint3DGizmoPlugin : public EditorNode3DGizmoPlugin {
GDCLASS(Joint3DGizmoPlugin, EditorNode3DGizmoPlugin); GDCLASS(Joint3DGizmoPlugin, EditorNode3DGizmoPlugin);
Timer *update_timer;
uint64_t update_idx = 0;
void incremental_update_gizmos();
public: public:
bool has_gizmo(Node3D *p_spatial); bool has_gizmo(Node3D *p_spatial);
String get_name() const; String get_name() const;

View File

@ -856,12 +856,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<EditorNode3DGizmo *> current_gizmos; List<EditorNode3DGizmo *> current_gizmos;
HashMap<String, Vector<Ref<StandardMaterial3D>>> materials; HashMap<String, Vector<Ref<StandardMaterial3D>>> materials;
protected:
static void _bind_methods(); static void _bind_methods();
virtual bool has_gizmo(Node3D *p_spatial); virtual bool has_gizmo(Node3D *p_spatial);
virtual Ref<EditorNode3DGizmo> create_gizmo(Node3D *p_spatial); virtual Ref<EditorNode3DGizmo> create_gizmo(Node3D *p_spatial);