diff --git a/main/main.cpp b/main/main.cpp index 9b7e190e039..69e4dc38ed7 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -97,6 +97,7 @@ static OS::VideoMode video_mode; static bool init_maximized=false; static bool init_fullscreen=false; static bool init_use_custom_pos=false; +static bool debug_collisions=false; static Vector2 init_custom_pos; static int video_driver_idx=-1; static int audio_driver_idx=-1; @@ -514,6 +515,8 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas } else if (I->get()=="-debug" || I->get()=="-d") { debug_mode="local"; + } else if (I->get()=="-debugcol" || I->get()=="-dc") { + debug_collisions=true; } else if (I->get()=="-editor_scene") { if (I->next()) { @@ -1154,8 +1157,12 @@ bool Main::start() { SceneTree *sml = main_loop->cast_to(); + if (debug_collisions) { + sml->set_debug_collisions_hint(true); + } #ifdef TOOLS_ENABLED + EditorNode *editor_node=NULL; if (editor) { diff --git a/scene/2d/collision_shape_2d.cpp b/scene/2d/collision_shape_2d.cpp index 5012c54b17a..02e4c79a086 100644 --- a/scene/2d/collision_shape_2d.cpp +++ b/scene/2d/collision_shape_2d.cpp @@ -92,8 +92,12 @@ void CollisionShape2D::_notification(int p_what) { } break;*/ case NOTIFICATION_DRAW: { + if (!get_tree()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) + break; + rect=Rect2(); + Color draw_col=Color(0,0.6,0.7,0.5); if (shape->cast_to()) { diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp index 45e3d92ece1..ead729c2bff 100644 --- a/scene/main/scene_main_loop.cpp +++ b/scene/main/scene_main_loop.cpp @@ -471,6 +471,7 @@ void SceneTree::init() { editor_hint=false; + debug_collisions_hint=false; pause=false; root->_set_tree(this); @@ -624,6 +625,16 @@ bool SceneTree::is_editor_hint() const { return editor_hint; } +void SceneTree::set_debug_collisions_hint(bool p_enabled) { + + debug_collisions_hint=p_enabled; +} + +bool SceneTree::is_debugging_collisions_hint() const { + + return debug_collisions_hint; +} + void SceneTree::set_pause(bool p_enabled) { if (p_enabled==pause) @@ -1424,6 +1435,8 @@ void SceneTree::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_editor_hint","enable"),&SceneTree::set_editor_hint); ObjectTypeDB::bind_method(_MD("is_editor_hint"),&SceneTree::is_editor_hint); + ObjectTypeDB::bind_method(_MD("set_debug_collisions_hint","enable"),&SceneTree::set_debug_collisions_hint); + ObjectTypeDB::bind_method(_MD("is_debugging_collisions_hint"),&SceneTree::is_debugging_collisions_hint); #ifdef TOOLS_ENABLED ObjectTypeDB::bind_method(_MD("set_edited_scene_root","scene"),&SceneTree::set_edited_scene_root); ObjectTypeDB::bind_method(_MD("get_edited_scene_root"),&SceneTree::get_edited_scene_root); diff --git a/scene/main/scene_main_loop.h b/scene/main/scene_main_loop.h index 1f09d9c546c..b44456bf1df 100644 --- a/scene/main/scene_main_loop.h +++ b/scene/main/scene_main_loop.h @@ -87,6 +87,7 @@ private: uint32_t last_id; bool editor_hint; + bool debug_collisions_hint; bool pause; int root_lock; @@ -270,6 +271,9 @@ public: void set_camera(const RID& p_camera); RID get_camera() const; + void set_debug_collisions_hint(bool p_enabled); + bool is_debugging_collisions_hint() const; + int64_t get_frame() const; int get_node_count() const;