From 8bb1e19d7355ac92ec5cfe39fbb6db73d6c0fffe Mon Sep 17 00:00:00 2001 From: Carl Olsson Date: Sat, 14 Feb 2015 06:43:50 +1000 Subject: [PATCH] Replace body_mode property with use_kinematic flag. Revert 2D Platformer demo's moving platforms to sprite plus body. --- demos/2d/platformer/moving_platform.png | Bin 0 -> 2143 bytes demos/2d/platformer/moving_platform.xml | 119 ++++++++++++------------ scene/2d/tile_map.cpp | 21 +++-- scene/2d/tile_map.h | 7 +- 4 files changed, 75 insertions(+), 72 deletions(-) create mode 100644 demos/2d/platformer/moving_platform.png diff --git a/demos/2d/platformer/moving_platform.png b/demos/2d/platformer/moving_platform.png new file mode 100644 index 0000000000000000000000000000000000000000..f01c6ea37fc5535d28d704004a6c36deb0587890 GIT binary patch literal 2143 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 E02CoKhX4Qo literal 0 HcmV?d00001 diff --git a/demos/2d/platformer/moving_platform.xml b/demos/2d/platformer/moving_platform.xml index f39b11782c..4d54d6d11c 100644 --- a/demos/2d/platformer/moving_platform.xml +++ b/demos/2d/platformer/moving_platform.xml @@ -1,56 +1,77 @@ - - - + + + + + 0 + -88, 24, -88, -24, 88, -24, 88, 24 + + "names" - + "moving_platform" "Node2D" - "_import_path" "visibility/visible" "visibility/opacity" "visibility/self_opacity" + "visibility/on_top" "transform/pos" "transform/rot" "transform/scale" - "z/z" - "z/relative" "script/script" "__meta__" "motion" "cycle" "platform" - "TileMap" + "RigidBody2D" + "shape_count" + "shapes/0/shape" + "shapes/0/transform" + "shapes/0/trigger" "mode" - "tile_set" - "cell/size" - "cell/quadrant_size" - "cell/custom_transform" - "cell/half_offset" - "collision/body_mode" - "collision/friction" - "collision/bounce" - "collision/layers" - "tile_data" + "mass" + "friction" + "bounce" + "custom_integrator" + "continuous_cd" + "contacts_reported" + "contact_monitor" + "active" + "can_sleep" + "velocity/linear" + "velocity/angular" + "Sprite" + "texture" + "centered" + "offset" + "flip_h" + "flip_v" + "vframes" + "hframes" + "frame" + "modulate" + "region" + "region_rect" + "CollisionPolygon2D" + "build_mode" + "polygon" "version" 1 "conn_count" 0 "node_count" - 2 + 4 "variants" - "" True 1 0, 0 0 1, 1 - 0 - + "__editor_plugin_states__" @@ -71,22 +92,16 @@ "pixel_snap" False "zoom" - 1.850616 - "use_snap" - True + 1.360373 "ofs" - -406.735, -157.32 - "snap" - 32 + -210.652, -172.81 "3D" - "deflight_rot_y" - 0.628319 "zfar" 500 "fov" - 179 + 400 "viewports" @@ -96,12 +111,10 @@ 0 "y_rot" 0 - "listener" - True - "use_environment" - False "use_orthogonal" False + "use_environment" + False "pos" 0, 0, 0 @@ -112,12 +125,10 @@ 0 "y_rot" 0 - "listener" + "use_orthogonal" False "use_environment" False - "use_orthogonal" - False "pos" 0, 0, 0 @@ -128,12 +139,10 @@ 0 "y_rot" 0 - "listener" + "use_orthogonal" False "use_environment" False - "use_orthogonal" - False "pos" 0, 0, 0 @@ -144,12 +153,10 @@ 0 "y_rot" 0 - "listener" + "use_orthogonal" False "use_environment" False - "use_orthogonal" - False "pos" 0, 0, 0 @@ -158,18 +165,12 @@ 1 "default_light" True - "ambient_light_color" - 0.15, 0.15, 0.15, 1 "show_grid" True "show_origin" True "znear" 0.1 - "default_srgb" - False - "deflight_rot_x" - 0.942478 "__editor_run_settings__" @@ -182,17 +183,19 @@ "__editor_plugin_screen__" "2D" - -96, -32 - - 64, 64 - 16 - 1, 0, 0, 1, 0, 0 - 2 1 - 0, 536870927, 1, 536870926, 2, 15 + + 1, -0, 0, 1, 0, 0 + False + 3 + 0 + + 1, 1, 1, 1 + 0, 0, 0, 0 + -88, -24, 88, -24, 88, 24, -88, 24 "nodes" - -1, -1, 1, 0, -1, 13, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 1, 11, 7, 12, 8, 13, 3, 14, 2, 0, 0, 0, 16, 15, -1, 20, 2, 0, 3, 1, 4, 2, 5, 2, 6, 9, 7, 4, 8, 5, 9, 6, 10, 1, 17, 6, 18, 10, 19, 11, 20, 12, 21, 13, 22, 14, 23, 15, 24, 2, 25, 4, 26, 15, 27, 16, 0 + -1, -1, 1, 0, -1, 11, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 2, 12, 1, 0, 0, 0, 14, 13, -1, 23, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 15, 7, 16, 8, 17, 9, 18, 10, 19, 11, 20, 1, 21, 1, 22, 3, 23, 10, 24, 10, 25, 12, 26, 10, 27, 0, 28, 0, 29, 2, 30, 3, 0, 1, 0, 31, 31, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 32, 13, 33, 0, 34, 2, 35, 10, 36, 10, 37, 7, 38, 7, 39, 12, 40, 14, 41, 10, 42, 15, 0, 1, 0, 43, 43, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 44, 12, 45, 16, 0 "conns" diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 06c97027f0..52f4d27497 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -28,6 +28,7 @@ /*************************************************************************/ #include "tile_map.h" #include "io/marshalls.h" +#include "servers/physics_2d_server.h" void TileMap::_notification(int p_what) { @@ -339,7 +340,7 @@ Map::Element *TileMap::_create_quadrant(const q.canvas_item = VisualServer::get_singleton()->canvas_item_create(); VisualServer::get_singleton()->canvas_item_set_parent( q.canvas_item, get_canvas_item() ); VisualServer::get_singleton()->canvas_item_set_transform( q.canvas_item, xform ); - q.body=Physics2DServer::get_singleton()->body_create(body_mode); + q.body=Physics2DServer::get_singleton()->body_create(use_kinematic?Physics2DServer::BODY_MODE_KINEMATIC:Physics2DServer::BODY_MODE_STATIC); Physics2DServer::get_singleton()->body_attach_object_instance_ID(q.body,get_instance_ID()); Physics2DServer::get_singleton()->body_set_layer_mask(q.body,collision_layer); Physics2DServer::get_singleton()->body_set_param(q.body,Physics2DServer::BODY_PARAM_FRICTION,friction); @@ -590,15 +591,15 @@ void TileMap::set_collision_layer_mask(uint32_t p_layer) { } } -Physics2DServer::BodyMode TileMap::get_collision_body_mode() const{ +bool TileMap::get_collision_use_kinematic() const{ - return body_mode; + return use_kinematic; } -void TileMap::set_collision_body_mode(Physics2DServer::BodyMode p_body_mode) { +void TileMap::set_collision_use_kinematic(bool p_use_kinematic) { _clear_quadrants(); - body_mode=p_body_mode; + use_kinematic=p_use_kinematic; _recreate_quadrants(); } @@ -816,12 +817,12 @@ void TileMap::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_center_y","enable"),&TileMap::set_center_y); ObjectTypeDB::bind_method(_MD("get_center_y"),&TileMap::get_center_y); + ObjectTypeDB::bind_method(_MD("set_collision_use_kinematic","use_kinematic"),&TileMap::set_collision_use_kinematic); + ObjectTypeDB::bind_method(_MD("get_collision_use_kinematic"),&TileMap::get_collision_use_kinematic); + ObjectTypeDB::bind_method(_MD("set_collision_layer_mask","mask"),&TileMap::set_collision_layer_mask); ObjectTypeDB::bind_method(_MD("get_collision_layer_mask"),&TileMap::get_collision_layer_mask); - ObjectTypeDB::bind_method(_MD("set_collision_body_mode","body_mode"),&TileMap::set_collision_body_mode); - ObjectTypeDB::bind_method(_MD("get_collision_body_mode"),&TileMap::get_collision_body_mode); - ObjectTypeDB::bind_method(_MD("set_collision_friction","value"),&TileMap::set_collision_friction); ObjectTypeDB::bind_method(_MD("get_collision_friction"),&TileMap::get_collision_friction); @@ -852,7 +853,7 @@ void TileMap::_bind_methods() { ADD_PROPERTY( PropertyInfo(Variant::INT,"cell/quadrant_size",PROPERTY_HINT_RANGE,"1,128,1"),_SCS("set_quadrant_size"),_SCS("get_quadrant_size")); ADD_PROPERTY( PropertyInfo(Variant::MATRIX32,"cell/custom_transform"),_SCS("set_custom_transform"),_SCS("get_custom_transform")); ADD_PROPERTY( PropertyInfo(Variant::INT,"cell/half_offset",PROPERTY_HINT_ENUM,"Offset X,Offset Y,Disabled"),_SCS("set_half_offset"),_SCS("get_half_offset")); - ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/body_mode",PROPERTY_HINT_ENUM,"Static,Kinematic"),_SCS("set_collision_body_mode"),_SCS("get_collision_body_mode")); + ADD_PROPERTY( PropertyInfo(Variant::BOOL,"collision/use_kinematic",PROPERTY_HINT_NONE,""),_SCS("set_collision_use_kinematic"),_SCS("get_collision_use_kinematic")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"collision/friction",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_collision_friction"),_SCS("get_collision_friction")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"collision/bounce",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_collision_bounce"),_SCS("get_collision_bounce")); ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/layers",PROPERTY_HINT_ALL_FLAGS),_SCS("set_collision_layer_mask"),_SCS("get_collision_layer_mask")); @@ -886,7 +887,7 @@ TileMap::TileMap() { bounce=0; mode=MODE_SQUARE; half_offset=HALF_OFFSET_DISABLED; - body_mode=Physics2DServer::BODY_MODE_STATIC; + use_kinematic=false; fp_adjust=0.01; fp_adjust=0.01; diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h index 52e8eae306..c8708e1bed 100644 --- a/scene/2d/tile_map.h +++ b/scene/2d/tile_map.h @@ -33,7 +33,6 @@ #include "scene/resources/tile_set.h" #include "self_list.h" #include "vset.h" -#include "servers/physics_2d_server.h" class TileMap : public Node2D { @@ -61,7 +60,7 @@ private: Mode mode; Matrix32 custom_transform; HalfOffset half_offset; - Physics2DServer::BodyMode body_mode; + bool use_kinematic; union PosKey { @@ -179,8 +178,8 @@ public: void set_collision_layer_mask(uint32_t p_layer); uint32_t get_collision_layer_mask() const; - void set_collision_body_mode(Physics2DServer::BodyMode p_body_mode); - Physics2DServer::BodyMode get_collision_body_mode() const; + void set_collision_use_kinematic(bool p_use_kinematic); + bool get_collision_use_kinematic() const; void set_collision_friction(float p_friction); float get_collision_friction() const;