summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2015-09-18 23:10:58 -0300
committerJuan Linietsky <reduzio@gmail.com>2015-09-18 23:10:58 -0300
commit3f9e5afe68df1e3b4bcf34a21468ed55a57a7973 (patch)
treeb4f5fa413429dc9e9aa50d82a6c47e641f6e433b
parent89a901c4b6a2fe24e781e497ec1a8e8fd69dd59c (diff)
begin work on debugging collisions....
-rw-r--r--main/main.cpp7
-rw-r--r--scene/2d/collision_shape_2d.cpp4
-rw-r--r--scene/main/scene_main_loop.cpp13
-rw-r--r--scene/main/scene_main_loop.h4
4 files changed, 28 insertions, 0 deletions
diff --git a/main/main.cpp b/main/main.cpp
index 9b7e190e03..69e4dc38ed 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<SceneTree>();
+ 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 5012c54b17..02e4c79a08 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<LineShape2D>()) {
diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp
index 45e3d92ece..ead729c2bf 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 1f09d9c546..b44456bf1d 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;