From dbae857b293231882307c52217e9569a17da0f23 Mon Sep 17 00:00:00 2001 From: Dana Olson Date: Mon, 25 Aug 2014 02:54:10 -0400 Subject: [PATCH 1/7] borderless fullscreen window support for x11 move disable resize x11 code from context_gl to os_x11 --- platform/x11/context_gl_x11.cpp | 11 ----------- platform/x11/os_x11.cpp | 33 +++++++++++++++++++++++++++++++++ platform/x11/os_x11.h | 9 +++++++++ 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/platform/x11/context_gl_x11.cpp b/platform/x11/context_gl_x11.cpp index b56b54822e..38e3479e5d 100644 --- a/platform/x11/context_gl_x11.cpp +++ b/platform/x11/context_gl_x11.cpp @@ -129,17 +129,6 @@ Error ContextGL_X11::initialize() { } //}; - if (!OS::get_singleton()->get_video_mode().resizable) { - XSizeHints *xsh; - xsh = XAllocSizeHints(); - xsh->flags = PMinSize | PMaxSize; - xsh->min_width = OS::get_singleton()->get_video_mode().width; - xsh->max_width = OS::get_singleton()->get_video_mode().width; - xsh->min_height = OS::get_singleton()->get_video_mode().height; - xsh->max_height = OS::get_singleton()->get_video_mode().height; - XSetWMNormalHints(x11_display, x11_window, xsh); - } - if (!opengl_3_context) { //oldstyle context: diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 62af302791..eab9be7f9b 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -168,6 +168,39 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD)); } + // borderless fullscreen window mode + if (current_videomode.fullscreen) { + Hints hints; + Atom property; + hints.flags = 2; + hints.decorations = 0; + property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True); + XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5); + XMapRaised(x11_display, x11_window); + // get the window root, then the res for the root + XWindowAttributes xwa; + XGetWindowAttributes(x11_display,x11_window,&xwa); + XGetWindowAttributes(x11_display,xwa.root,&xwa); + XMoveResizeWindow(x11_display, x11_window ,0 ,0 , xwa.width, xwa.height); + } + + // disable resizeable window + if (!current_videomode.resizable) { + XSizeHints *xsh; + xsh = XAllocSizeHints(); + xsh->flags = PMinSize | PMaxSize; + XWindowAttributes xwa; + XGetWindowAttributes(x11_display,x11_window,&xwa); + if (current_videomode.fullscreen) { + XGetWindowAttributes(x11_display,xwa.root,&xwa); + } + xsh->min_width = xwa.width; + xsh->max_width = xwa.width; + xsh->min_height = xwa.height; + xsh->max_height = xwa.height; + XSetWMNormalHints(x11_display, x11_window, xsh); + } + AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton(); if (AudioDriverManagerSW::get_driver(p_audio_driver)->init()!=OK) { diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index 77ef37f6f4..e1cd5ddd9d 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -49,6 +49,15 @@ #include #include +// Hints for X11 fullscreen +typedef struct { + unsigned long flags; + unsigned long functions; + unsigned long decorations; + long inputMode; + unsigned long status; +} Hints; + //bitch #undef CursorShape /** From 247e7ed716a4c0bd5140c2b2a938f7118e84fb14 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Tue, 2 Sep 2014 23:13:40 -0300 Subject: [PATCH 2/7] 3D Physics and Other Stuff -=-=-=-=-=-=-=-=-=-=-=-=-= -New Vehicle (Based on Bullet's RaycastVehicle) - Vehiclebody/VehicleWheel. Demo will come soon, old vehicle (CarBody) will go away soon too. -A lot of fixes to the 3D physics engine -Added KinematicBody with demo -Fixed the space query API for 2D (demo will come soon). 3D is WIP. -Fixed long-standing bug with body_enter/body_exit for Area and Area2D -Performance variables now includes physics (active bodies, collision pairs and islands) -Ability to see what's inside of instanced scenes! -Fixed Blend Shapes (no bs+skeleton yet) -Added an Android JavaClassWrapper singleton for using Android native classes directly from GDScript. This is very Alpha! --- SConstruct | 5 +- core/global_constants.cpp | 29 +- core/math/vector3.h | 16 + core/variant_call.cpp | 5 + core/variant_op.cpp | 34 + demos/2d/platformer/stage.xml | 23 +- demos/3d/kinematic_char/cubelib.res | Bin 0 -> 11431 bytes demos/3d/kinematic_char/cubio.gd | 96 ++ demos/3d/kinematic_char/engine.cfg | 17 + demos/3d/kinematic_char/follow_camera.gd | 92 ++ demos/3d/kinematic_char/kinebody3d.png | Bin 0 -> 6078 bytes demos/3d/kinematic_char/level.scn | Bin 0 -> 15257 bytes demos/3d/kinematic_char/purple_wood.tex | Bin 0 -> 173520 bytes demos/3d/kinematic_char/purplecube.scn | Bin 0 -> 9808 bytes demos/3d/kinematic_char/twood.tex | Bin 0 -> 168054 bytes demos/3d/kinematic_char/white_wood.tex | Bin 0 -> 169001 bytes drivers/gles2/rasterizer_gles2.cpp | 37 +- main/performance.cpp | 25 +- main/performance.h | 6 + platform/android/SCsub | 4 +- .../src/com/android/godot/GodotPaymentV3.java | 8 +- platform/android/java_class_wrapper.cpp | 1332 +++++++++++++++++ platform/android/java_class_wrapper.h | 168 +++ platform/android/java_glue.cpp | 5 + platform/iphone/app_delegate.mm | 4 + platform/iphone/in_app_store.h | 2 + platform/iphone/in_app_store.mm | 31 +- platform/windows/detect.py | 3 +- platform/windows/os_windows.cpp | 102 +- platform/windows/os_windows.h | 4 + scene/2d/physics_body_2d.cpp | 2 +- scene/3d/physics_body.cpp | 579 +++++-- scene/3d/physics_body.h | 93 +- scene/3d/vehicle_body.cpp | 214 ++- scene/3d/vehicle_body.h | 45 +- scene/gui/tree.cpp | 2 +- scene/register_scene_types.cpp | 1 + servers/audio/sample_manager_sw.cpp | 2 +- servers/physics/area_sw.h | 2 +- servers/physics/body_pair_sw.cpp | 12 +- servers/physics/body_sw.cpp | 107 +- servers/physics/body_sw.h | 5 +- servers/physics/collision_object_sw.cpp | 1 + servers/physics/collision_object_sw.h | 5 +- servers/physics/collision_solver_sat.cpp | 485 +++++- servers/physics/collision_solver_sat.h | 2 +- servers/physics/collision_solver_sw.cpp | 131 +- servers/physics/collision_solver_sw.h | 6 +- servers/physics/gjk_epa.cpp | 61 +- servers/physics/gjk_epa.h | 40 +- servers/physics/physics_server_sw.cpp | 98 +- servers/physics/physics_server_sw.h | 21 +- servers/physics/shape_sw.cpp | 16 +- servers/physics/shape_sw.h | 845 ++++++----- servers/physics/space_sw.cpp | 313 +++- servers/physics/space_sw.h | 19 +- servers/physics/step_sw.cpp | 17 +- servers/physics_2d/area_2d_sw.h | 2 +- .../physics_2d/collision_solver_2d_sat.cpp | 4 +- servers/physics_2d/physics_2d_server_sw.cpp | 32 + servers/physics_2d/physics_2d_server_sw.h | 7 + servers/physics_2d/shape_2d_sw.h | 1 + servers/physics_2d/space_2d_sw.cpp | 13 +- servers/physics_2d/space_2d_sw.h | 12 + servers/physics_2d/step_2d_sw.cpp | 4 + servers/physics_2d_server.cpp | 235 ++- servers/physics_2d_server.h | 65 +- servers/physics_server.cpp | 117 +- servers/physics_server.h | 87 +- servers/register_server_types.cpp | 1 + tools/collada/collada.cpp | 3 + tools/editor/icons/icon_instance_options.png | Bin 0 -> 523 bytes .../io_plugins/editor_import_collada.cpp | 9 +- tools/editor/plugins/baked_light_baker.cpp | 2 +- tools/editor/property_editor.cpp | 18 + tools/editor/scene_tree_dock.cpp | 49 +- tools/editor/scene_tree_dock.h | 1 + tools/editor/scene_tree_editor.cpp | 87 +- tools/editor/scene_tree_editor.h | 11 + tools/editor/spatial_editor_gizmos.cpp | 69 + tools/editor/spatial_editor_gizmos.h | 15 + tools/pck/pck_packer.cpp | 1 + 82 files changed, 5161 insertions(+), 856 deletions(-) create mode 100644 demos/3d/kinematic_char/cubelib.res create mode 100644 demos/3d/kinematic_char/cubio.gd create mode 100644 demos/3d/kinematic_char/engine.cfg create mode 100644 demos/3d/kinematic_char/follow_camera.gd create mode 100644 demos/3d/kinematic_char/kinebody3d.png create mode 100644 demos/3d/kinematic_char/level.scn create mode 100644 demos/3d/kinematic_char/purple_wood.tex create mode 100644 demos/3d/kinematic_char/purplecube.scn create mode 100644 demos/3d/kinematic_char/twood.tex create mode 100644 demos/3d/kinematic_char/white_wood.tex create mode 100644 platform/android/java_class_wrapper.cpp create mode 100644 platform/android/java_class_wrapper.h create mode 100644 tools/editor/icons/icon_instance_options.png diff --git a/SConstruct b/SConstruct index 4ec27b7ea4..de7256f6bc 100644 --- a/SConstruct +++ b/SConstruct @@ -205,8 +205,9 @@ for p in platform_list: flag_list = platform_flags[p] for f in flag_list: - env[f[0]] = f[1] - print(f[0]+":"+f[1]) + if not (f[0] in ARGUMENTS): # allow command line to override platform flags + env[f[0]] = f[1] + print(f[0]+":"+f[1]) env.module_list=[] diff --git a/core/global_constants.cpp b/core/global_constants.cpp index efa72b6547..ae4abc627d 100644 --- a/core/global_constants.cpp +++ b/core/global_constants.cpp @@ -445,15 +445,26 @@ static _GlobalConstant _global_constants[]={ BIND_GLOBAL_CONSTANT( ERR_BUG ), ///< a bug in the software certainly happened ), due to a double check failing or unexpected behavior. BIND_GLOBAL_CONSTANT( ERR_WTF ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_NONE ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_RANGE ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_EXP_RANGE ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_ENUM ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_LENGTH ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_FLAGS ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_FILE ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_DIR ), - BIND_GLOBAL_CONSTANT( PROPERTY_HINT_RESOURCE_TYPE ), + + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_NONE ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_RANGE ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_EXP_RANGE ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_ENUM ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_EXP_EASING ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_LENGTH ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_KEY_ACCEL ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_FLAGS ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_ALL_FLAGS ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_FILE ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_DIR ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_GLOBAL_FILE ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_GLOBAL_DIR ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_RESOURCE_TYPE ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_MULTILINE_TEXT ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_COLOR_NO_ALPHA ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_IMAGE_COMPRESS_LOSSY ), + BIND_GLOBAL_CONSTANT( PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS ), + BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_STORAGE ), BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_STORAGE ), diff --git a/core/math/vector3.h b/core/math/vector3.h index 959f7cd0a8..d2f2408829 100644 --- a/core/math/vector3.h +++ b/core/math/vector3.h @@ -111,6 +111,12 @@ struct Vector3 { _FORCE_INLINE_ real_t distance_to(const Vector3& p_b) const; _FORCE_INLINE_ real_t distance_squared_to(const Vector3& p_b) const; + + + _FORCE_INLINE_ Vector3 slide(const Vector3& p_vec) const; + _FORCE_INLINE_ Vector3 reflect(const Vector3& p_vec) const; + + /* Operators */ _FORCE_INLINE_ Vector3& operator+=(const Vector3& p_v); @@ -368,6 +374,16 @@ void Vector3::zero() { x=y=z=0; } +Vector3 Vector3::slide(const Vector3& p_vec) const { + + return p_vec - *this * this->dot(p_vec); +} +Vector3 Vector3::reflect(const Vector3& p_vec) const { + + return p_vec - *this * this->dot(p_vec) * 2.0; + +} + #endif #endif // VECTOR3_H diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 2697e6f7a7..8fbccc87ae 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -331,6 +331,9 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var VCALL_LOCALMEM0R(Vector3, abs); VCALL_LOCALMEM1R(Vector3, distance_to); VCALL_LOCALMEM1R(Vector3, distance_squared_to); + VCALL_LOCALMEM1R(Vector3, slide); + VCALL_LOCALMEM1R(Vector3, reflect); + VCALL_LOCALMEM0R(Plane,normalized); VCALL_LOCALMEM0R(Plane,center); @@ -1236,6 +1239,8 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl ADDFUNC0(VECTOR3,VECTOR3,Vector3,abs,varray()); ADDFUNC1(VECTOR3,REAL,Vector3,distance_to,VECTOR3,"b",varray()); ADDFUNC1(VECTOR3,REAL,Vector3,distance_squared_to,VECTOR3,"b",varray()); + ADDFUNC1(VECTOR3,VECTOR3,Vector3,slide,VECTOR3,"by",varray()); + ADDFUNC1(VECTOR3,VECTOR3,Vector3,reflect,VECTOR3,"by",varray()); ADDFUNC0(PLANE,PLANE,Plane,normalized,varray()); ADDFUNC0(PLANE,VECTOR3,Plane,center,varray()); diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 6c2667c7e9..9c489c5ef2 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -1145,6 +1145,7 @@ void Variant::set(const Variant& p_index, const Variant& p_value, bool *r_valid) if (p_value.type!=Variant::VECTOR3) return; + if (p_index.get_type()==Variant::STRING) { //scalar name @@ -1181,6 +1182,24 @@ void Variant::set(const Variant& p_index, const Variant& p_value, bool *r_valid) v->set_axis(index,p_value); return; } + } else if (p_index.get_type()==Variant::STRING) { + + const String *str=reinterpret_cast(p_index._data._mem); + Matrix3 *v=_data._matrix3; + + if (*str=="x") { + valid=true; + v->set_axis(0,p_value); + return; + } else if (*str=="y" ) { + valid=true; + v->set_axis(1,p_value); + return; + } else if (*str=="z" ) { + valid=true; + v->set_axis(2,p_value); + return; + } } } break; @@ -2021,6 +2040,21 @@ Variant Variant::get(const Variant& p_index, bool *r_valid) const { valid=true; return v->get_axis(index); } + } else if (p_index.get_type()==Variant::STRING) { + + const String *str=reinterpret_cast(p_index._data._mem); + const Matrix3 *v=_data._matrix3; + + if (*str=="x") { + valid=true; + return v->get_axis(0); + } else if (*str=="y" ) { + valid=true; + return v->get_axis(1); + } else if (*str=="z" ) { + valid=true; + return v->get_axis(2); + } } } break; diff --git a/demos/2d/platformer/stage.xml b/demos/2d/platformer/stage.xml index 6a112e02aa..78d0f9ae2c 100644 --- a/demos/2d/platformer/stage.xml +++ b/demos/2d/platformer/stage.xml @@ -1,19 +1,20 @@ - + - + "names" - + "stage" "Node" + "_import_path" "__meta__" "tile_map" "TileMap" @@ -28,7 +29,9 @@ "quadrant_size" "tile_set" "tile_data" - "collision_layers" + "collision/friction" + "collision/bounce" + "collision/layers" "coins" "coin" "Area2D" @@ -140,6 +143,7 @@ 66 "variants" + "" "__editor_plugin_states__" @@ -164,7 +168,7 @@ "use_snap" False "ofs" - 418.81, 615.088 + -177.089, 415.221 "snap" 10 @@ -318,7 +322,7 @@ 4236.75, 541.058 4172.75, 541.058 - 236.879, 1051.15 + 251.684, 1045.6 1451.86, 742.969 0, 140 @@ -349,16 +353,15 @@ -202 358 -10 - "" 2 - 14 + 7 14.769231 - "This is a simple demo on how to make a platformer game with Godot. This version uses physics and the 2D physics engine for motion and collision. The demo also shows the benefits of using the scene system, where coins, enemies and the player are edited separatedly and instanced in the stage. To edit the base tiles for the tileset, open the tileset_edit.xml file and follow instructions. " + "This is a simple demo on how to make a platformer game with Godot.This version uses physics and the 2D physics engine for motion and collision.The demo also shows the benefits of using the scene system, where coins,enemies and the player are edited separatedly and instanced in the stage.To edit the base tiles for the tileset, open the tileset_edit.xml file and follow instructions." 0 -1 "nodes" - -1, -1, 1, 0, -1, 1, 2, 0, 0, 0, 0, 4, 3, -1, 13, 5, 1, 6, 2, 7, 2, 8, 3, 9, 4, 10, 5, 11, 6, 12, 7, 13, 8, 14, 9, 15, 10, 16, 11, 2, 12, 0, 0, 0, 1, 17, -1, 1, 2, 13, 0, 2, 0, 19, 18, 14, 1, 9, 15, 0, 2, 0, 19, 20, 14, 1, 9, 16, 0, 2, 0, 19, 21, 14, 1, 9, 17, 0, 2, 0, 19, 22, 14, 1, 9, 18, 0, 2, 0, 19, 23, 14, 1, 9, 19, 0, 2, 0, 19, 24, 14, 1, 9, 20, 0, 2, 0, 19, 25, 14, 1, 9, 21, 0, 2, 0, 19, 26, 14, 1, 9, 22, 0, 2, 0, 19, 27, 14, 1, 9, 23, 0, 2, 0, 19, 28, 14, 1, 9, 24, 0, 2, 0, 19, 29, 14, 1, 9, 25, 0, 2, 0, 19, 30, 14, 1, 9, 26, 0, 2, 0, 19, 31, 14, 1, 9, 27, 0, 2, 0, 19, 32, 14, 1, 9, 28, 0, 2, 0, 19, 33, 14, 1, 9, 29, 0, 2, 0, 19, 34, 14, 1, 9, 30, 0, 2, 0, 19, 35, 14, 1, 9, 31, 0, 2, 0, 19, 36, 14, 1, 9, 32, 0, 2, 0, 19, 37, 14, 1, 9, 33, 0, 2, 0, 19, 38, 14, 1, 9, 34, 0, 2, 0, 19, 39, 14, 1, 9, 35, 0, 2, 0, 19, 40, 14, 1, 9, 36, 0, 2, 0, 19, 41, 14, 1, 9, 37, 0, 2, 0, 19, 42, 14, 1, 9, 38, 0, 2, 0, 19, 43, 14, 1, 9, 39, 0, 2, 0, 19, 44, 14, 1, 9, 40, 0, 2, 0, 19, 45, 14, 1, 9, 41, 0, 2, 0, 19, 46, 14, 1, 9, 42, 0, 2, 0, 19, 47, 14, 1, 9, 43, 0, 2, 0, 19, 48, 14, 1, 9, 44, 0, 2, 0, 19, 49, 14, 1, 9, 45, 0, 2, 0, 19, 50, 14, 1, 9, 46, 0, 2, 0, 19, 51, 14, 1, 9, 47, 0, 2, 0, 19, 52, 14, 1, 9, 48, 0, 2, 0, 19, 53, 14, 1, 9, 49, 0, 2, 0, 19, 54, 14, 1, 9, 50, 0, 2, 0, 19, 55, 14, 1, 9, 51, 0, 2, 0, 19, 56, 14, 1, 9, 52, 0, 2, 0, 19, 57, 14, 1, 9, 53, 0, 2, 0, 19, 58, 14, 1, 9, 54, 0, 2, 0, 19, 59, 14, 1, 9, 55, 0, 2, 0, 19, 60, 14, 1, 9, 56, 0, 0, 0, 62, 61, 57, 1, 9, 58, 0, 0, 0, 1, 63, -1, 0, 0, 46, 0, 65, 64, 59, 3, 9, 60, 66, 61, 67, 62, 0, 46, 0, 65, 68, 59, 3, 9, 63, 66, 64, 67, 65, 0, 46, 0, 65, 69, 59, 3, 9, 66, 66, 67, 67, 65, 0, 46, 0, 65, 70, 68, 1, 9, 69, 0, 0, 0, 72, 71, -1, 6, 73, 70, 74, 3, 75, 1, 76, 71, 77, 1, 78, 3, 0, 0, 0, 1, 79, -1, 0, 0, 52, 0, 62, 80, 72, 1, 9, 73, 0, 52, 0, 62, 81, 72, 1, 9, 74, 0, 52, 0, 62, 82, 72, 1, 9, 75, 0, 52, 0, 62, 83, 72, 1, 9, 76, 0, 52, 0, 62, 84, 72, 1, 9, 77, 0, 52, 0, 62, 85, 72, 1, 9, 78, 0, 52, 0, 62, 86, 72, 1, 9, 79, 0, 52, 0, 62, 87, 72, 1, 9, 80, 0, 52, 0, 62, 88, 72, 1, 9, 81, 0, 52, 0, 62, 89, 72, 1, 9, 82, 0, 52, 0, 62, 90, 72, 1, 9, 83, 0, 0, 0, 92, 91, 84, 0, 0, 0, 0, 93, 93, -1, 29, 5, 1, 6, 2, 7, 2, 8, 3, 94, 85, 95, 86, 96, 87, 97, 88, 98, 89, 99, 89, 100, 89, 101, 89, 102, 1, 103, 1, 104, 90, 105, 2, 106, 5, 107, 91, 108, 2, 109, 92, 110, 5, 111, 3, 112, 3, 113, 93, 114, 94, 115, 94, 116, 1, 117, 3, 118, 95, 0 + -1, -1, 1, 0, -1, 2, 2, 0, 3, 1, 0, 0, 0, 5, 4, -1, 16, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 10, 5, 11, 6, 12, 7, 13, 8, 14, 9, 15, 10, 16, 11, 17, 3, 18, 6, 19, 12, 3, 13, 0, 0, 0, 1, 20, -1, 2, 2, 0, 3, 14, 0, 2, 0, 22, 21, 15, 1, 10, 16, 0, 2, 0, 22, 23, 15, 1, 10, 17, 0, 2, 0, 22, 24, 15, 1, 10, 18, 0, 2, 0, 22, 25, 15, 1, 10, 19, 0, 2, 0, 22, 26, 15, 1, 10, 20, 0, 2, 0, 22, 27, 15, 1, 10, 21, 0, 2, 0, 22, 28, 15, 1, 10, 22, 0, 2, 0, 22, 29, 15, 1, 10, 23, 0, 2, 0, 22, 30, 15, 1, 10, 24, 0, 2, 0, 22, 31, 15, 1, 10, 25, 0, 2, 0, 22, 32, 15, 1, 10, 26, 0, 2, 0, 22, 33, 15, 1, 10, 27, 0, 2, 0, 22, 34, 15, 1, 10, 28, 0, 2, 0, 22, 35, 15, 1, 10, 29, 0, 2, 0, 22, 36, 15, 1, 10, 30, 0, 2, 0, 22, 37, 15, 1, 10, 31, 0, 2, 0, 22, 38, 15, 1, 10, 32, 0, 2, 0, 22, 39, 15, 1, 10, 33, 0, 2, 0, 22, 40, 15, 1, 10, 34, 0, 2, 0, 22, 41, 15, 1, 10, 35, 0, 2, 0, 22, 42, 15, 1, 10, 36, 0, 2, 0, 22, 43, 15, 1, 10, 37, 0, 2, 0, 22, 44, 15, 1, 10, 38, 0, 2, 0, 22, 45, 15, 1, 10, 39, 0, 2, 0, 22, 46, 15, 1, 10, 40, 0, 2, 0, 22, 47, 15, 1, 10, 41, 0, 2, 0, 22, 48, 15, 1, 10, 42, 0, 2, 0, 22, 49, 15, 1, 10, 43, 0, 2, 0, 22, 50, 15, 1, 10, 44, 0, 2, 0, 22, 51, 15, 1, 10, 45, 0, 2, 0, 22, 52, 15, 1, 10, 46, 0, 2, 0, 22, 53, 15, 1, 10, 47, 0, 2, 0, 22, 54, 15, 1, 10, 48, 0, 2, 0, 22, 55, 15, 1, 10, 49, 0, 2, 0, 22, 56, 15, 1, 10, 50, 0, 2, 0, 22, 57, 15, 1, 10, 51, 0, 2, 0, 22, 58, 15, 1, 10, 52, 0, 2, 0, 22, 59, 15, 1, 10, 53, 0, 2, 0, 22, 60, 15, 1, 10, 54, 0, 2, 0, 22, 61, 15, 1, 10, 55, 0, 2, 0, 22, 62, 15, 1, 10, 56, 0, 2, 0, 22, 63, 15, 1, 10, 57, 0, 0, 0, 65, 64, 58, 1, 10, 59, 0, 0, 0, 1, 66, -1, 1, 2, 0, 0, 46, 0, 68, 67, 60, 3, 10, 61, 69, 62, 70, 63, 0, 46, 0, 68, 71, 60, 3, 10, 64, 69, 65, 70, 66, 0, 46, 0, 68, 72, 60, 3, 10, 67, 69, 68, 70, 66, 0, 46, 0, 68, 73, 69, 1, 10, 70, 0, 0, 0, 75, 74, -1, 7, 2, 0, 76, 71, 77, 4, 78, 2, 79, 72, 80, 2, 81, 4, 0, 0, 0, 1, 82, -1, 1, 2, 0, 0, 52, 0, 65, 83, 73, 1, 10, 74, 0, 52, 0, 65, 84, 73, 1, 10, 75, 0, 52, 0, 65, 85, 73, 1, 10, 76, 0, 52, 0, 65, 86, 73, 1, 10, 77, 0, 52, 0, 65, 87, 73, 1, 10, 78, 0, 52, 0, 65, 88, 73, 1, 10, 79, 0, 52, 0, 65, 89, 73, 1, 10, 80, 0, 52, 0, 65, 90, 73, 1, 10, 81, 0, 52, 0, 65, 91, 73, 1, 10, 82, 0, 52, 0, 65, 92, 73, 1, 10, 83, 0, 52, 0, 65, 93, 73, 1, 10, 84, 0, 0, 0, 95, 94, 85, 0, 0, 0, 0, 96, 96, -1, 30, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 97, 86, 98, 87, 99, 88, 100, 89, 101, 0, 102, 0, 103, 0, 104, 0, 105, 2, 106, 2, 107, 90, 108, 3, 109, 6, 110, 91, 111, 3, 112, 92, 113, 6, 114, 4, 115, 4, 116, 93, 117, 94, 118, 94, 119, 2, 120, 4, 121, 95, 0 "conns" diff --git a/demos/3d/kinematic_char/cubelib.res b/demos/3d/kinematic_char/cubelib.res new file mode 100644 index 0000000000000000000000000000000000000000..66b999d78d62d4e697f875f7eaea4891f5f4f928 GIT binary patch literal 11431 zcmWFvc6Md}0RaXEolpjbpX>|_sjLhPsay;Uf;#N1+ig-o`* zl=$5Il+*{zqMRwI1tl5rDMg9pAYM*pUTS=KW=cs$Lo`cfMQTcX!)C71;?(%WoPvx* z1{sCu2keqO$@w|?Me&J6MTwOR(hs=gSqkzq^GXyxFju8ANIhVaV@t^_PEIUJSrFs! zZNU!al+3g=g;GWa0R@8vLhQu_smY}|iA4{Xg*j7mGmDEe^Ya))9&oBN$EQ{lJYc@h znUY$Pn3)rwn_2OIS(hy@zbH2`Cq7Xqar=Q>$1;YZ2h5rcf(-Eq@=5LqoGiuq={fli zS==8my<^~1n95RG7GII3kiy6ysKCQgl3Gzxs-*pZ;l9K62katD@g>O#j~_6KC+tkp zdB7&@pyl}P0fX2>1{DU;2h6z#L?3YIJ!G(dz@m3R)IrZF?Eyz@Vibeq1D-_15(hJ9 z;Rg(6iHZ+c{y7Lbs5#zyz@XOH^?>zRgRq0v1D1t}-3z-IBp$G|J8o-`a4>ObV=GQB z$}A|+Z(w6&;8xIODlRQbPG{6NNU-5fE-fy}&y7z^OiI#!z{JhSz@ea}xSlmNucVlP zO@TX^JAsoeGdD3km4Q`3IO(c`hJq7Ak%NdsAx}EmCodw3-}fGG8UvJvn>!{FDOba%S@_TAn#~R)~oIzYcpg|m@ z_LW081A_uL1H%Irh6kej&Z``(9i<)BA4$5ot~k)>dfCC&fx-3v0dWRd1%U(N3~~zG z2gDiVK_sIB!vjWf21O8?K}mu8fIfpVn5_aPRl%ehm{bRo8X(e1)&2GZ76Atl24|(U zj0{=|nhsZ;>>Wg$#M3S_7v~q1JY@LmAnC-*lAB*tkkNLTp*Z1=1A~K%Qxrq)p$87F zhs+&h9GDsMJQy4}95f#>d~^_SDC8(8%FN9y$t+7vSmJoyLDK1Xx_v{ogQcSggQG$T z%Y&*S`x^?(%-{dl?{{EVU}oI^UxAz9k^;K}Hw!aE!~W|H+)6?W4GzKy$_m_!_GcTo z8SPmWxEb$NCFrx+|N38Vf2%5in{oeN1#U)0h6H1l{a34s>>a!nf*I@;q8aQRk{!4e zm>Kpf7&~w??00Z>=y!-_IIqC(Q0~C(pzI*+!0lkoc&@5Jnc>j_b_aO}ZAKP`1nvZD zrf>i29mF57C@ZKZ2rIBBJa+I0DOF&1D1X4hy+AlY*@1fjbAq|UV+H$!>kixs(hoS^ zKVZJDusuQ9kr|}a;qn9K%?`g6+!MPUxD}KWPCsCN|B$)(0rO*ra0hFJ=!Y!b514O1 zWG;3PcZgRoe!#%~fLT~U+(Fu*`2h>JgYp9D2MqoS?g`=#m`^JRJJ^F5%O5cBKj7}5 zt+3sJJyF=vUqLuA`T_IxN6g+2nL&&P%-Ii^`yKrq@|~U^IP8%8fVuy$F!KVb^>z-- z%w3KN`yJSs`=+nk=fLg2?!bJ28|;5}2XSUbh6H;DZU>OVg�JMcS*D=;7Mc2GZH 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: + accel=ACCEL + else: + accel=DEACCEL + + hvel = hvel.linear_interpolate(target,accel*delta) + + vel.x=hvel.x; + vel.z=hvel.z + + var motion = vel*delta + motion=move(vel*delta) + + var on_floor = false + var original_vel = vel + + + var floor_velocity=Vector2() + + var attempts=4 + + while(is_colliding() and attempts): + var n=get_collision_normal() + + if ( rad2deg(acos(n.dot( Vector3(0,1,0)))) < MAX_SLOPE_ANGLE ): + #if angle to the "up" vectors is < angle tolerance + #char is on floor + floor_velocity=get_collider_velocity() + on_floor=true + + motion = n.slide(motion) + vel = n.slide(vel) + if (original_vel.dot(vel) > 0): + #do not allow to slide towads the opposite direction we were coming from + motion=move(motion) + if (motion.length()<0.001): + break + attempts-=1 + + if (on_floor and floor_velocity!=Vector3()): + move(floor_velocity*delta) + + if (on_floor and Input.is_action_pressed("jump")): + vel.y=JUMP_SPEED + + var crid = get_node("../elevator1").get_rid() +# print(crid," : ",PS.body_get_state(crid,PS.BODY_STATE_TRANSFORM)) + +func _ready(): + # Initalization here + set_fixed_process(true) + pass + + +func _on_tcube_body_enter( body ): + get_node("../ty").show() + pass # replace with function body diff --git a/demos/3d/kinematic_char/engine.cfg b/demos/3d/kinematic_char/engine.cfg new file mode 100644 index 0000000000..b3060b65e0 --- /dev/null +++ b/demos/3d/kinematic_char/engine.cfg @@ -0,0 +1,17 @@ +[application] + +name="Kinematic Character 3D" +main_scene="res://level.scn" +icon="res://kinebody3d.png" + +[input] + +move_forward=[key(Up)] +move_left=[key(Left)] +move_right=[key(Right)] +move_backwards=[key(Down)] +jump=[key(Space)] + +[rasterizer] + +shadow_filter=3 diff --git a/demos/3d/kinematic_char/follow_camera.gd b/demos/3d/kinematic_char/follow_camera.gd new file mode 100644 index 0000000000..0b9ff9bbb2 --- /dev/null +++ b/demos/3d/kinematic_char/follow_camera.gd @@ -0,0 +1,92 @@ + +extends Camera + +# member variables here, example: +# var a=2 +# var b="textvar" + +var collision_exception=[] +export var min_distance=0.5 +export var max_distance=4.0 +export var angle_v_adjust=0.0 +export var autoturn_ray_aperture=25 +export var autoturn_speed=50 +var max_height = 2.0 +var min_height = 0 + +func _fixed_process(dt): + var target = get_parent().get_global_transform().origin + var pos = get_global_transform().origin + var up = Vector3(0,1,0) + + var delta = pos - target + + #regular delta follow + + #check ranges + + if (delta.length() < min_distance): + delta = delta.normalized() * min_distance + elif (delta.length() > max_distance): + delta = delta.normalized() * max_distance + + #check upper and lower height + if ( delta.y > max_height): + delta.y = max_height + if ( delta.y < min_height): + delta.y = min_height + + #check autoturn + + var ds = PhysicsServer.space_get_direct_state( get_world().get_space() ) + + + var col_left = ds.intersect_ray(target,target+Matrix3(up,deg2rad(autoturn_ray_aperture)).xform(delta),collision_exception) + var col = ds.intersect_ray(target,target,collision_exception) + var col_right = ds.intersect_ray(target,target+Matrix3(up,deg2rad(-autoturn_ray_aperture)).xform(delta),collision_exception) + + if (col!=null): + #if main ray was occluded, get camera closer, this is the worst case scenario + delta = col.position - target + elif (col_left!=null and col_right==null): + #if only left ray is occluded, turn the camera around to the right + delta = Matrix3(up,deg2rad(-dt*autoturn_speed)).xform(delta) + elif (col_left==null and col_right!=null): + #if only right ray is occluded, turn the camera around to the left + delta = Matrix3(up,deg2rad(dt*autoturn_speed)).xform(delta) + else: + #do nothing otherwise, left and right are occluded but center is not, so do not autoturn + pass + + #apply lookat + pos = target + delta + + look_at_from_pos(pos,target,up) + + #turn a little up or down + var t = get_transform() + t.basis = Matrix3(t.basis[0],deg2rad(angle_v_adjust)) * t.basis + set_transform(t) + + + +func _ready(): + +#find collision exceptions for ray + var node = self + while(node): + if (node extends RigidBody): + collision_exception.append(node.get_rid()) + break + else: + node=node.get_parent() + # Initalization here + set_fixed_process(true) + #this detaches the camera transform from the parent spatial node + set_as_toplevel(true) + + + + + + diff --git a/demos/3d/kinematic_char/kinebody3d.png b/demos/3d/kinematic_char/kinebody3d.png new file mode 100644 index 0000000000000000000000000000000000000000..41f0edb2461af600833adfb51d2db0e326ed5624 GIT binary patch literal 6078 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 literal 0 HcmV?d00001 diff --git a/demos/3d/kinematic_char/level.scn b/demos/3d/kinematic_char/level.scn new file mode 100644 index 0000000000000000000000000000000000000000..785db19adcb23d2cd704a65a4c4a7619901bce41 GIT binary patch literal 15257 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

y2 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�#Ij&TL+Eq`b|D3ZRabXxewWD95YO;qvq6=@zpo1W*)C6Ny2|z8hQfT7|F0g% z{!|E;=L#=f{d0Fw7f1blhUzn$yMF!OxEyH1tkhJw8OqUNekGd72>W@zYSy19G$;>3Ni9H9Q& zuiIa{cJA&D6j`woG}0qj^p#;1!;IB|RiO-v7%CLLOKUFZ;<&jvbn##7_-d;oX0y4M z$M2T{<#n#B`yK5?7!Lfek=iq5QpeZ-yLawhpV$z^wPL4YKF{m&rd78NZ=Ur3D>v6I z#dyK5-CPZz39!$*nO2%D{&jfTGKF;c%_WlMy`&a$jx!Zj6on2g~cJBVRXjMnV{$IPV&Fb36dS5}Db@iIi)%RyA zsB5H^)D#r8ty{^3rv@+mzRnxj13jEB!rZb#y5NC>8@j_9Y)qL@Ftwl--?7XYLGOS?Q zv0H3)6~n5A9ZKQM*Z(stP{`+9T>pOo!}QHxXYIWEUklVn`2X~N#}1`*`CnhJt}tI* z+{Lx3N&&PqqN~2N&TR4KuJ=2bzlJZ~I!W57{?&i8#gn@FKH0@hTU}K3Z+%y^`Qj^G z`*$$$I-O^^{)$g|x!iEP>sN^>@XP-_wMq&!ZL|N? zrVFBrH#ITYt*#cGy{W4p+{s$q)+N674gqJJk(>xV9$ShfD` z{)V#EUnX(ie{bJizWU0frnOxw9G)}((_O{ooX`A~fs4s0oSFZ_<^V@=7L8X~uVyH0 zXJ)ARzrwklXV+e>Zu8YUc4vf!W!_Y3XIa&K|LaY~bQZ3>`c*%b>seO(UG?h*sDW?0 zfBy}|b{4LRbzCE4Ynp!y`YII}A=5LF>zh+Rn zvH9Dq|NrkZ{M;?R`0oF`3^x^*GslNN;&41Kw7%}D!p+@VXZ>DZ*Kl+9)mf{5+*OX} z6I&b_f4#4K_0?Hhw>RijDDX3Pd<*@nz|K6IuT)*xoOg29g0D=gq>g-@6@Ka;XkupZ z(O>tkJG>WZi2C__#^%XQKd!H`o3VMyq-fn$t11-h`R*~TSQNfGpy(bGUq<-q0%d!y z6?`)`o6NqtE>wA^iaPUbueT8{_FS(v@z>ng{ACjN>tD*>`9vl+Xqooj+-*9$X+h|p zo67Pm|8A|){i#wf|6hxtPI8YyR>Oh?*CqFeOkTwlzeaLTQIpoHdaYlFCpB>~FvK!Q z?YZ2=&`_$dobB@@g|67uKNPmhFvR^|^<(#>CXUzftE`R~6e+~5UiEXgepW;H0xd}e zekQJXEfsUoz#@jL98FS3imH@K85n--+&uE5~p&$VFHs=AxIFL$k4rKIqlEo|}4 zZlTLFl>f6ZF))1Fq3~SsnMmFG%p03SLqoYF_Xrd*XsoKWI&vXX!CWYG=5E0vu2l_J zLDO6-R{gqKu~}g`r$W5`jLn<78kCkQhO>Q{^oS{Z|4xPbELuOZtEQ{Evn1{R%22Ml zoo8Ly{2dXSuTElUe8Uv3z%Qf3W%%Le?k}_U@7Jomxm$ELQ%9Zdt=*fun6yF{>{MW9 zX;`tf>xSxc=69jCp-${9|Nn8_pP`)3^lAAzrFPbDi>~u(cRBuNdV8o##hk@#vG#o} zrF=HA#S5ZVy}GHu&+=NgOY5f!KhNL27XNPUF5kR&HCNJ4rF!Py)&Dx3|1)vv>M6Oi zmaks9c;7dreAdkm)az7ts+cpM&RX@yft`h$vuXbh1#zCW4e#}LY%X72p?`J74i$fv zN6P=}b}H2~FY3DY&ViprV^!$&>8i(Bl3u;qSFY&JRl8!*itx=_C*9wnps-wia@YNT zi`Ip2-qKZG-N6BxiF+ISPvP4l{wxlL6(MGeMb{-VEcpM|bhdBcinw+AL?`oSUEQn4 z4-(U4r$$_2a_a*HgWy;IBpMG8OKWy=p zN!6RQUaQp0c2%9&!v&h(`SpE)(zL~eRrOuJ-m%F}pFfjd4J{JS8;du3x zV}{avrU%!!)aEOO3-5ll;QJ!~EQSV#1hdt8Nm|+rTg?^YnXfT0WjU>9S=R81zd}`> zWp{JLzDmXSGC$sjCYGC9YsBzRtrn zfBC7OyC*j>ELu^!Q~5m)M;F8QnVTn8H7uy$ouRqwtDlV()FaYrNZEuezOe(kuPNf6Eo+m6tL7+_709o|$1$+zy3y76p#g@iSE8SsJvquHB*D z&aAbroLkABb@3{#y-YV0uQTcGsMnazXSSM4L$~SX?&+Ja*sp89sWhME{wn6jHx>C= zs;2FFyi-M;W%Y^$_iie%v#k2DVC_!j=ge!eUN<}4XQ|@)x9_HsIm_xDtLtwn)wBGr z`F|f&@~r#0^}!B>cLyY`(ff;ed$)JIeybADJ^0^qCm+zAGMQ5ntT(|GlC( z+qGE=uU3_ptE^{UvH$mVC3S{Ls@s{qo2^#$mtS4INOZP9){j+xt3qe5ON`&&)oHp| zpy>XJ1rJ1L2Ntd7T-~rzba8RhzE#gt*tuWTls@=2Yx5+w_j{RL#Cd+j|FyfZ*|2K= zTBcRomHb)$*DEO8Q0f=Czi{0@$vtL^Yq_-k|JW@u`>RsJ-R)ZGEb%KA?BA{=FTXpk zS?l`dOHJ?Z{(CTe_2)^qZfIFZ?Ag@xKVOSOV$Z}XrvF!0sLAtf>e_#G)dI^SW{dw{ zU8VIy`8Z45{nsacD*WdT|G%S4@`%~$tN+(=IsfPRzJhCkHKj>6`auHyi-fX1jLr-?KbYx;VUk(bu1< z&!tx}u3)g-Q@;7{E3J1{M`moUU)`|Y^2qkhwa*`m*h3nHkoXD>$&Tyn8O6Bc*Vhd-b9f zTcwVaul{HMD_fzTXLbFy<%^|`ge~6Q{7=h4oO!!N_!?(*)+(>A6_Q63`I+NZJ=&pE z&isA(Dki0N)>-z4rd-&edYEhCu_rQGdrYeS6@mk?({4DFwH@=vu zaGd2m*S^^mitpv`c66P+HfvLr8c!zYw?zV3RSc`Rwr}Q*%73+QcSW)8l!!Vbv=0)svcj?pUS1pJj7bWd14T0 zmZ}9SR+VdAXQ}0Ck~3EjXXfPCHBGmkZPKbWx89epR@|q^p`gyv)nM_p%YmO|m3Dde z4$XL;S22J0MQlEwx#~L8B6F2`=3h%08WilAyS6GZsn{#lGjlzdTCVV(dB4``dz$X7 zv)}%>T3W7H&b)0;kgDQ(mc>_XLrb0CGyhuA9qYi(y!ywzdZ+0uE3W2#+o`smrF)a+ z&z;KmS-4j1ntxO2IM1QbzyEh^4qLscG(T&HYCp?|y)PH{4nKi_w_8ztLlE6E2XpS)$Y;@*A!=2rBn`DAHnqQ-&e(Swkwlv|71!i zQ{?CQze?e5*y^v7{=S&?bh_ewmeuw1Ik&6)XIZfQ>+su(pkKLP^7_QD=bz}3TF0RmD>pb|m zJHD^t`my=TtW|GUGkDKuUZl&_&y_}_d^(wBf%In!gX0K|fTD48# zJkL6X?e}hM4xO!=rSwU>R(>HT#@4GH}4t+j^V{SVs}>!88d-|^gGi;J477uUZpUHncy zl55es=(5FyRSW+9uP&QyQ1mKR>qqEf!y>Kvyw~Q7*T@Gl{EoM}wz}JM)w`<;#Ad&Z zWVm0g6*}9;lWFzJhV82Z7>X3?)-z00UF3zyXs$4#pbWGlwQ5R@4(LT!~XTRa0PK5jTO9iK-1siTw1GVDDLOkuXXP~ zXj=SH)#^n%6xXvnzP;)xs8zI~NqhMW1$mZVn*X+e==Tk~=gm;yXL)=6Yxqos=iH05 zcGd0Je09>I761M^#53bP;p@X!U!7I+YyZ2j#akvVQeLHyFaLFx{R-|F zP~UphD~0^9#l>A6t2EY@uNIxX_}l8Pvej%~X07^F%3ZE-o@L*v?F*(W=*#?gU%#k) zv&iiIF>mvxt3eLY=KpGjfCA|-de&65;X?dk+|92Z=FTen@QoO#9H zcmEUW<#(Ou-L~3vc0qOQ{j$ZPvlp$}{x58?>1-aEa{}8pf1bp}y)J3>kKLEL8eZ4` zzplW~)A9XkJ!tdAg6Qw-Zz!GT?pn9KN^+0s;#J-E_d4-2Gbqi|QZ8rS-0>FVhUuFb zl)ft4%TM2|wQJ>0P=&ste*JY&lUr-mze}Kuuklal+RwvmGd6$M{;~h3QoQ`?IxPdx zNd2$c9sfZiV!x8s{oAowFY8Cuf(1J^_Z5k(-wLXDOeW9Oo~Lzv^X0DpA6DG|p{UQa zOK+<}x>(ri1*`P$N$v?@3s08kSW%z;bNA;ihJEGVZ|?rw#IWJ|{T-VpRx#++ z|C+IRQxg|ML+$??yDv2{z1pfUpY3zkivL&l?ois#(iFFL)eJ>(9{shCR_)k*rE781 z&P6+vzq9ns`>(ZKF<)L|!YVDvJ)4?Vm9J~~v3q0Hs&K6X+c$5ldNFN5_x9D7yI5B3 zt9U(KfnEN``nMX>7jJ61l&`&_Y<6MQyGIw^O<%2-6wCB)_4L)eQSuiRxL0gjt)I22 z>A~I`n+u9=HE88uU%aX6@1hlNckC`KV%e>>jp?T1bDrC)*K>fD^?YB&@!*HTbf&%E z*Q)ZfUFq7opMk+jQJwedYK_%ad%|YNuhLj$I$1H3F;rBQpI3DDiVe>@c5Dt`eW-u4 znS(vk4F&}TbH4J;rSE5R?b=QOreBKdNRe(#RhEVcUc?&@2I zD^@G*YWfSB+1uBob^q7lZ;MvETA>IUg;#i9{r;v3JM${8uj^FUc^3Uz^j8Zs{jK%* zI;cIsw6n`uQBv&8@Ysl7w_JX3w=3I%l@vBmZO8yY~XJ-)7gtrXApb=Joh{};_r{?2^+ z*YXAjb{X@pkMD)A-qLmB_x?j>tAncQUhQW#TU^}qca`p{GUewyf35phm#?1GRsVa( zb~Dv_7T&G}4du$`d35jJ;s(uja_Hwv-B1W;S@h%UzUd0(%rUpqjU4z{{_oE2+O9ZV zramunQP|?kU0g2|87#Jl%#MA_|LOZ`lgU3T!v9`Z{V(%>^>wc4t0#9Yy1x2B+3G8k z-mhlTEL**K()U#b8r#*}W!LUs#k75M=;G*`VTa0AU!GL7evwAlVv*Ua|B4?jTdX3_ z+__?Rneus|8|(L0maP_@t@)$!(~ZrayY}nvR}p6unf#0C|Ml(4|C#Uo2;b_ko@W(T z{4dag)ctxZ<8LUi3)d_3eFyDVscm?0y=?X7uDB*HeFb&aNqZSI7_KYGGuhw&s&1?N zpJ}c3dUbo&)h~B({r;)g&%8>nsZ=SHXZ5O847ERZo2_1@p!L;(U1R~ns(8?1Ee0-) zzg9=Y7I!W9e^pX}on_Ig{a0@&h;wsjt@?U%_qRn2O#ka0)P+~Ai2r+I^TwuC3$ot- z*v*%O-$)sBaf(xZ1D3bF=B}?Om%lK*K}viy9bas`#_q zKXG8i4(0RAf0b7MQxF$jym!H>RWo**&gNRMBK+s>O-)RzUe$u8!x%LFhu=_+XIZdl z`SzXa>?}=6uj_9pxHEJs9OwA4`|G3?-`BtTsgTdI>iw2mI~2dOa6~Y4{Zy&v`K5h5 z71WM-v?4xkhQe~5o!SizH#UdO{zDF+ zrt9lhsK4hkUmf4i(6Dp&)miJC7~*Cs*R!ZEXqY=wQJ-hgvB{P@cU!Ffv_EfErSg6r z1Ae1F6`Rc$XV~nr-Kk*Cv{G-q@_#n-)vFe~oVHUzp65^%e?4f3o@ph+t{IByEO+Mr zXWFUQ&(dFA6*oiqKFg!)zoKVowsSG9`gi@?tn$r~ixMa zPI^Ce?TQ%+>MVCxYrWc`e4l0OYX+_D%I8JG|5f}jTYP2Giu?B?!WM6ybaoZjp>kz& znZ4_}IzfG9?MLs~EB9>b`oH~^R>hvrlfLeMbmhB(KQqIxtN)e5S!Vs4XU5>b&b;XQ zidD+%c^BWweZ3-V@z+^tlU{R#DgS4Aty^*5&R+2Sdu*AKII~{Vs%;9(S-M_?{Cuy#&pK(>%18gp)bF!&?N_=#O=Ugv>nx2` zYUQkxwys~LHBH%^x#0i19}fFj^q#Jd+pc__rQ_hg|2Gt_OD)n`cYpiluZ#Arcy~8! z@ua4P6;bOzjju(!{wnzMZSLX-58ocPdh(Hb#f{nIxW zXe}2~xL3aUQWtkN!}sZ%MHj2>Rnon#;LrVgUsY51>d##Zf>&`k)bp&XTeT=`^~5Ts z_|<*ewarCVJ?~mozItO*m!wh?XeGV=-^g`4l-QYGFx^#?XEj@#wPNpF$LB2mT@O}G zS8nHtX8KjXW3$NQI<4yeHn&P2c=;Hv^N}${h;p znN~fnQE*qB&p6||LO9=-Nez3Z+s)YRpT+R&`idRO^~@{o|7TJ@FWR;0>wkvrn?E(x zho(17TRpL8|JPLt+ZE)QR&8CS04kLk!nzx_tLU@zug&V%u5h0D-iqhDJ^phEHT-|I zeRV+*PuFghbQa&J9}N0R*SXJlGBvFF`eUyl>z6;^dz`?b5vl7VB<{hzzL z92uBaT>W)eFH7Y-<4e%m*#%r*7foNisY)TEl<5a(g~96k3>Av)EKL9YHr!J7mw&V% z>-){!X0w0qyQ&D9pZmZ2YXfMZBS+V&xL=12vX~ecR;V9WSuV{{x>xGRcZWlAk5SdHcqZj`wyU$c|8D5op}d^s)!r5VZYs#L zgm=B_xT$E)QaNvZ(@n+w%(30S9yq^e{@eAx*+ZOV{i6T%I~DU;UhUdtK0|pwbL*<6 zch1LI7Oh_oq2;n5QF-D=1E$Q64a-&ew}r1>smGM z?@a6(>vYsvug+TVsw!MTp0z9C@1y-<3hF$+<(Qky7hj!q_rZ6A3I%=UeXOfDIW6Zp zq@i_x`s%B*n6$Pk<+E&=6!VKqdp(Qj?1kJ7O7~e!XIF)5Gbqkyp8fUh4&{FNqNdea ztD-FTOsrbR5Uwe)?lw97-Cc^yYnl>$G@?AJ|I%nt0#|CbfTIo;>c=tzhRTO3&RplklCY0CL5 z`+uANFH`ns>1g`(y-a03lhumt%IDd>%v#MK_b*IgKg(mQrmN-3?F_55%^1oQ_*qsj zs;DnhZfDuVk^g?W%6=BEUtj-jS2)kI;(z@9GKK#v3)b)5U#=q0(%-S_ez}4>Q&q)z z>t|`rfr&!JLPwe)q2Hn`jLE`UAAGd)2lVEFwYzMwfkxkbsUu=# zi~ni;i@tSOboQ$S4PS5W4(?)DxoXu-MRxfU|4RSg*gUx@j%)X7(1x?M46FW09ub|* zv_5`6Xl=86!>Z7RotwW*ihESMLh6jz;=k*8!=;Xx&gN=h_zN2PWnH(b;Onp5iu&>j z@&9k^zA~v})w2ILcW-K1y(oM&s8hnk@O1%bYXLKN>E3wI%xc%qMeBDcsxy1(zFOxf z&Q;5>T4~2_v(+b0?Ng{{Gh4jAzG2l2MSE_Ja|y3@Y&Ku4mLI;(aX-tUrP)6!6zy3q z?U?*8Tyehq4hEe%&~jX^73;sw*t~VtgR6i4n=Sr2Yu&mo^XZ$XOk&yof5H851$CAc z6&-rviu+}5O#KxDnu>m>&$SXX%d+c(UUAssi%k)0UT{xWSk9ua&b(rW!g8M1S`1Y; zc3T+kb^O^gM>%Ka$Gp$GnRhTZnWs*jH_`mYio4bD8|6dzA z+o0;#>zz!di#Iiy@^Y;+UCej6>mS3SY}3V?yW$%f_J=9(%WQqWW$(1bnenF2e@qrM34G6jE@RqyX}+)!v|{&&B5m18>(zrN-^(1O&z z>$UDmDqfc_uj^VZxhHIO{r45CK#ixjtM#-%1Ma2omG)a5nZB7NHs9z~lmb6X`2Vg& zk_zlnZ+CZfN$wF{%(QCh0??e>twp~Ye(n~X9mlXhX+GQ6S(*&1R!J(Di>!a~|JKdj z(^sE*)&2eE?()@5b{gA%DzJ+jJG+SK=I+qN>8CgtZfrK4&8@^x^FvWz_+8OHZOJ{G zs@891;E>!SI=ku}2ZKU5|Khc)8Wu?I*}gjTkZ!)@o^mBg4y|1`cVC`#tARm5UMzg| z%I=I)KX-qd_4>`-hOosqcduBLwQ`42IZxjzh5*oH?Axhr@!J*tvux*LTJb~iJWKum z>smjR+L^xIU#)naHEeNw>90jjEL* zrT0v$n8Fp*71)_y{B5dG5NFbO`$VOc?aQoxfB!SgP-^E|{pxzdjMZN!{SPfyikJT~ zsr)*qMPgW0$Hc% zU#=)u;pbrp-``QbdQufbEW^4R3hLae;#aJX+`Or&;p!(P<$Uh0fAQL{W^67f>W*(v zi03OPdi9r~3p6|XjlW^lc7^FISDRL^`l+;@XHj+i|DBr+t5#iQSXH6)ooUry4&{8d zEt6K2@Ay@&tk2@He^>lY1%8&RTHNb*D()9v^kPN!%*|6~H8kY4&)8f#iSK*Y4hMIZ z1^buZ->H0_d&PpJ^%a}H&1%x%u5j|?E5!4DoyDM}d*kb@8JlN? zu4Hob7ddqz{%^(RDP4;e)N_SzzB)-u;iE!@Vmwci`YOGO)!$}yRqWqUq2SNF$^LbS z0z2!XJAA9P!U&3~g_-dx#pc5)|uP;~?zWVB{ zs_)$EK~>_?^(+3DE84TH+n{B-LvcQf`f7z!KNQ}xtZ3Twbi2xT`EAC#_x{}db=Lj` zn{G|te5LEficj0WZ|;rk`|*9%tTXvV!uvz#Hd*Wu>b`fjObawfeB=N91I30)1t2J%FB7p7JvFQuL`u?>wVL&N@sf(-TJG4K|65galKkUUEw@xbX z(-hR@*V{5|o3>hHa^(Vx)saU&Px|_Q#sBS~HD{~1{%>C$wwR?{EA;Dih2tz;_g=rB zu5zB`MD?q(X)5MC>$V^MSGL+@_R7AuxziQwS=O&!X?8>5I*;D2^y&Hvx8eI$7#Y_-m?qGfAqYv#jLmSQVw#FWt22UzO#NFOwFm0*&B_%+7egpmB4z$!yN0 zTq|6{nOB|v{@x*-c}4c}buRThFDx^(e(f&b%+GUs|4oH@me>O;5ByX~XZpK%l>$GT z`QkbTj#W1m|Fhh0Xjpes={a-gs*WyIe#Wl9%JmF8)#o$qRoJBh+GClWwe<83Wpn2E zrlvZl{Y-xw9%$&ZeOpwoz_sh9;(eCT|6TuYD*7{rYfbyFew}so-(OAnJJip!d|$QT z?@a}Ep0E19-hu|!Uj8b6Hbc>$Dg4cD1%5WM#T(W?zCS}*o@K@R`1RpR@+<`$FEzrI z>{%W$^k$W-xihC6>b~y4&iuFh^&+SDEL^MZD}^i1XJJ^Cx+vW3Idj+A{pAY$%n!CL zf3LvK-1TRBe3H4$zjrg=fOd4RR%oaXU;VMLiK#}rV)MF0jTKiJ%9ZR{7S;Ezs!%ZJ zv8(@HYQFkoWd@hlYIBu-maPmOt1J}yc}%&q_s`rczIc`H@4vrP#d&_+T~!3y&$2#G z>HQ4ndgi^0_U}~BXKC8M>Sv__Ka;{c4n=X6t+N*VdZn zZW;XeZ?53ZQrF*+7oj50!<13})_n1lNk8_lziy`dokjnoouVj*63%gic|kJZSlq`j+bBlMjpA;#j@h>->W~A(pgq~-yeEI z*`9@?ZguQUC3c?Oz1I78Y%bqilNIx8r&>D854~;gW+t2Rm*EfIa zivC^^AGUa+;&vt`-Rnx~EPwxN@4v24E)u_QG1KC(llU~pLx_JBQFSB;lSKPY3dQ%ruQTcj}<$PZzRoCC=n6dfuq^0k< z6=o>&%l9g9y}Ge^>!kN9R@MJHe07#K*S%1wBUfj2t%wb+K67;z5BIOo(5fR>CN211 z`c(>)GXKTK-c(R$=6H4es)IfY!@sNlZ)nN0DEz;FeTJI8{EPoz|3_@*%VLPD+GW1l zKZ{}M-W_I(-$pK2RrjlW^O`^*rTtr1Pv6X!#I$f5l3--SQ zt?j6NF>k{T#rrI^bt_)nP+;fo3g5qb$8Pi0i|YTca$sj!b^R~LO$Bl0{o!`YmH1g# zclF1X?ogP{QlYSJ*G`Rcj&g-n3wG|lIw@46pJ9ihJxlm1t%ey&{5-L%G?+l+(y`b7 z@7SSa&J@3Iz0PqqvBm#u-#6?~vS<2VTd$zb@^#kV*wq^LEMI4Zhc+qLvs|5Z|F4z; zJImHt^}l~9$g^&pbpPM~2IqK|tgD8gr2s7ZFb<&Ez)%6vdLnrNh^om0{pL^1*y1EAO#l>Apb^DcF=)j$8SCe(9~av?t9<=xg&mtGcm4l$ zUjwuT{;S?@jtUiXrl&Ss+SggWEh>MPr2e1f+oJFPb}6*8iLZVib-!t*0zc31_w`&A ztFJAJvfIC)Lg_inRqw>YaOd~T|K6{uP;h5iJ3s!kxI(@BiilMW-xe7+MQE>LGGDxP z5~u0vUt)`knpV`sTn}3u)Wq^{{fF&0T%I%i-K*ucoMqM5*AYJy{aLzxf3Gc5wP)V5 zc$J5;IPawA_N#VDYbCFvzgBR`v1N1O;vvGch8%YcJ2;aJzeWZ zf#P}AMH~!2?(fjl=Uecv`u_CQ9|~8ks#-98^#uiXW?qILyS2|VhVDvBXNi*4*1DJdA8-1(`^v0UuaY_figs-7>Lf$mx<(#4y)?l0Qa^?6e0?5K#PQqvZT z%(j2KK6IM$fBxm~_5YPE7Mc9>dqdo`)tj2M&k2NwE)J|}=vY-Bx_DAo*MgsWJ^ZB? z)m42LoqaA*V_#gq$>hSSUEgb!#TN4yacOBXxaKqc+I~o*oMrQ*x9k7vi}PHWwDo

=f#Jq(b$8}huR3O^+-JG}YE{Q{ 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


)xtMGZn7$TzHk?2U_|&n{#r}3}tm0 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 literal 0 HcmV?d00001 diff --git a/demos/3d/kinematic_char/twood.tex b/demos/3d/kinematic_char/twood.tex new file mode 100644 index 0000000000000000000000000000000000000000..65c1bd043ca7c1ae5c77d832f61ec73ad3b6a5a3 GIT binary patch literal 168054 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 BD?b1L literal 0 HcmV?d00001 diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index d55557bdbc..4a1362f9f8 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -1504,6 +1504,23 @@ void RasterizerGLES2::mesh_add_surface(RID p_mesh,VS::PrimitiveType p_primitive, ERR_FAIL_COND((format&VS::ARRAY_FORMAT_VERTEX)==0); // mandatory + ERR_FAIL_COND( mesh->morph_target_count!=p_blend_shapes.size() ); + if (mesh->morph_target_count) { + //validate format for morphs + for(int i=0;iarray_len=array_len; surface->format=format; surface->primitive=p_primitive; + surface->morph_target_count=mesh->morph_target_count; surface->configured_format=0; + surface->mesh=mesh; if (keep_copies) { surface->data=p_arrays; surface->morph_data=p_blend_shapes; @@ -1735,6 +1754,17 @@ void RasterizerGLES2::mesh_add_surface(RID p_mesh,VS::PrimitiveType p_primitive, surface->index_array_local = (uint8_t*)memalloc(index_array_len*surface->array[VS::ARRAY_INDEX].size); index_array_ptr=(uint8_t*)surface->index_array_local; } + + if (mesh->morph_target_count) { + + surface->morph_targets_local = memnew_arr(Surface::MorphTarget,mesh->morph_target_count); + for(int i=0;imorph_target_count;i++) { + + surface->morph_targets_local[i].array=memnew_arr(uint8_t,surface->local_stride*surface->array_len); + surface->morph_targets_local[i].configured_format=surface->morph_format; + _surface_set_arrays(surface,surface->morph_targets_local[i].array,NULL,p_blend_shapes[i],false); + } + } } @@ -4946,8 +4976,11 @@ Error RasterizerGLES2::_setup_geometry(const Geometry *p_geometry, const Materia /* compute morphs */ + if (p_morphs && surf->morph_target_count && can_copy_to_local) { + + base = skinned_buffer; stride=surf->local_stride; @@ -7773,9 +7806,9 @@ void RasterizerGLES2::free(const RID& p_rid) { for(int i=0;imorph_target_count;i++) { - memfree(surface->morph_targets_local[i].array); + memdelete_arr(surface->morph_targets_local[i].array); } - memfree(surface->morph_targets_local); + memdelete_arr(surface->morph_targets_local); surface->morph_targets_local=NULL; } diff --git a/main/performance.cpp b/main/performance.cpp index 81db7ae1fa..9999cc0ae0 100644 --- a/main/performance.cpp +++ b/main/performance.cpp @@ -29,6 +29,8 @@ #include "performance.h" #include "os/os.h" #include "servers/visual_server.h" +#include "servers/physics_2d_server.h" +#include "servers/physics_server.h" #include "message_queue.h" #include "scene/main/scene_main_loop.h" Performance *Performance::singleton=NULL; @@ -61,6 +63,13 @@ void Performance::_bind_methods() { BIND_CONSTANT( RENDER_VIDEO_MEM_USED ); BIND_CONSTANT( RENDER_TEXTURE_MEM_USED ); BIND_CONSTANT( RENDER_VERTEX_MEM_USED ); + BIND_CONSTANT( PHYSICS_2D_ACTIVE_OBJECTS ); + BIND_CONSTANT( PHYSICS_2D_COLLISION_PAIRS ); + BIND_CONSTANT( PHYSICS_2D_ISLAND_COUNT ); + BIND_CONSTANT( PHYSICS_3D_ACTIVE_OBJECTS ); + BIND_CONSTANT( PHYSICS_3D_COLLISION_PAIRS ); + BIND_CONSTANT( PHYSICS_3D_ISLAND_COUNT ); + BIND_CONSTANT( MONITOR_MAX ); } @@ -90,7 +99,14 @@ String Performance::get_monitor_name(Monitor p_monitor) const { "video/video_mem", "video/texure_mem", "video/vertex_mem", - "render/mem_max" + "video/video_mem_max", + "physics_2d/active_objects", + "physics_2d/collision_pairs", + "physics_2d/islands", + "physics_3d/active_objects", + "physics_3d/collision_pairs", + "physics_3d/islands", + }; return names[p_monitor]; @@ -133,6 +149,13 @@ float Performance::get_monitor(Monitor p_monitor) const { case RENDER_TEXTURE_MEM_USED: return VS::get_singleton()->get_render_info(VS::INFO_TEXTURE_MEM_USED); case RENDER_VERTEX_MEM_USED: return VS::get_singleton()->get_render_info(VS::INFO_VERTEX_MEM_USED); case RENDER_USAGE_VIDEO_MEM_TOTAL: return VS::get_singleton()->get_render_info(VS::INFO_USAGE_VIDEO_MEM_TOTAL); + case PHYSICS_2D_ACTIVE_OBJECTS: return Physics2DServer::get_singleton()->get_process_info(Physics2DServer::INFO_ACTIVE_OBJECTS); + case PHYSICS_2D_COLLISION_PAIRS: return Physics2DServer::get_singleton()->get_process_info(Physics2DServer::INFO_COLLISION_PAIRS); + case PHYSICS_2D_ISLAND_COUNT: return Physics2DServer::get_singleton()->get_process_info(Physics2DServer::INFO_ISLAND_COUNT); + case PHYSICS_3D_ACTIVE_OBJECTS: return PhysicsServer::get_singleton()->get_process_info(PhysicsServer::INFO_ACTIVE_OBJECTS); + case PHYSICS_3D_COLLISION_PAIRS: return PhysicsServer::get_singleton()->get_process_info(PhysicsServer::INFO_COLLISION_PAIRS); + case PHYSICS_3D_ISLAND_COUNT: return PhysicsServer::get_singleton()->get_process_info(PhysicsServer::INFO_ISLAND_COUNT); + default: {} } diff --git a/main/performance.h b/main/performance.h index db453d0156..1879ba39eb 100644 --- a/main/performance.h +++ b/main/performance.h @@ -69,6 +69,12 @@ public: RENDER_TEXTURE_MEM_USED, RENDER_VERTEX_MEM_USED, RENDER_USAGE_VIDEO_MEM_TOTAL, + PHYSICS_2D_ACTIVE_OBJECTS, + PHYSICS_2D_COLLISION_PAIRS, + PHYSICS_2D_ISLAND_COUNT, + PHYSICS_3D_ACTIVE_OBJECTS, + PHYSICS_3D_COLLISION_PAIRS, + PHYSICS_3D_ISLAND_COUNT, //physics MONITOR_MAX }; diff --git a/platform/android/SCsub b/platform/android/SCsub index 8e61b7d8e0..4d6f14dbde 100644 --- a/platform/android/SCsub +++ b/platform/android/SCsub @@ -15,7 +15,9 @@ android_files = [ 'audio_driver_jandroid.cpp', 'ifaddrs_android.cpp', 'android_native_app_glue.c', - 'java_glue.cpp' + 'java_glue.cpp', + 'java_class_wrapper.cpp' + ] #env.Depends('#core/math/vector3.h', 'vector3_psp.h') diff --git a/platform/android/java/src/com/android/godot/GodotPaymentV3.java b/platform/android/java/src/com/android/godot/GodotPaymentV3.java index a459f8e15c..0fd102ac55 100644 --- a/platform/android/java/src/com/android/godot/GodotPaymentV3.java +++ b/platform/android/java/src/com/android/godot/GodotPaymentV3.java @@ -64,15 +64,15 @@ public class GodotPaymentV3 extends Godot.SingletonBase { public void callbackSuccess(String ticket, String signature){ - Log.d(this.getClass().getName(), "PRE-Send callback to purchase success"); +// Log.d(this.getClass().getName(), "PRE-Send callback to purchase success"); GodotLib.callobject(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature}); - Log.d(this.getClass().getName(), "POST-Send callback to purchase success"); +// Log.d(this.getClass().getName(), "POST-Send callback to purchase success"); } public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku){ - Log.d(this.getClass().getName(), "PRE-Send callback to consume success"); +// Log.d(this.getClass().getName(), "PRE-Send callback to consume success"); GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku}); - Log.d(this.getClass().getName(), "POST-Send callback to consume success"); +// Log.d(this.getClass().getName(), "POST-Send callback to consume success"); } public void callbackSuccessNoUnconsumedPurchases(){ diff --git a/platform/android/java_class_wrapper.cpp b/platform/android/java_class_wrapper.cpp new file mode 100644 index 0000000000..d4cf848484 --- /dev/null +++ b/platform/android/java_class_wrapper.cpp @@ -0,0 +1,1332 @@ +#include "java_class_wrapper.h" +#include "thread_jandroid.h" + + +bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error,Variant& ret) { + + Map >::Element *M=methods.find(p_method); + if (!M) + return false; + + JNIEnv *env = ThreadAndroid::get_env(); + + MethodInfo *method=NULL; + for (List::Element *E=M->get().front();E;E=E->next()) { + + if (!p_instance && !E->get()._static) { + r_error.error=Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL; + continue; + } + + int pc = E->get().param_types.size(); + if (pc>p_argcount) { + + r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument=pc; + continue; + } + if (pcget().param_types.ptr(); + bool valid=true; + + for(int i=0;iget_type()!=Variant::BOOL) + arg_expected=Variant::BOOL; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_BYTE: + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_CHAR: + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_SHORT: + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_INT: + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_LONG: + case ARG_TYPE_BYTE: + case ARG_TYPE_CHAR: + case ARG_TYPE_SHORT: + case ARG_TYPE_INT: + case ARG_TYPE_LONG: { + + if (!p_args[i]->is_num()) + arg_expected=Variant::INT; + + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_FLOAT: + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_DOUBLE: + case ARG_TYPE_FLOAT: + case ARG_TYPE_DOUBLE: { + + if (!p_args[i]->is_num()) + arg_expected=Variant::REAL; + + } break; + case ARG_TYPE_STRING: { + + if (p_args[i]->get_type()!=Variant::STRING) + arg_expected=Variant::STRING; + + } break; + case ARG_TYPE_CLASS: { + + if (p_args[i]->get_type()!=Variant::OBJECT) + arg_expected=Variant::OBJECT; + else { + + Ref ref = *p_args[i]; + if (!ref.is_null()) { + if (ref->cast_to() ) { + + Ref jo=ref; + //could be faster + jclass c = env->FindClass(E->get().param_sigs[i].operator String().utf8().get_data()); + if (!c || !env->IsInstanceOf(jo->instance,c)) { + + arg_expected=Variant::OBJECT; + } else { + //ok + } + } else { + arg_expected=Variant::OBJECT; + } + + } + } + + } break; + default: { + + if (p_args[i]->get_type()!=Variant::ARRAY) + arg_expected=Variant::ARRAY; + + } break; + + } + + if (arg_expected!=Variant::NIL) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=i; + r_error.expected=arg_expected; + valid=false; + break; + + } + + } + if (!valid) + continue; + + + method=&E->get(); + break; + + } + + if (!method) + return true; //no version convinces + + + + r_error.error=Variant::CallError::CALL_OK; + + jvalue *argv=NULL; + + if (method->param_types.size()) { + + argv=(jvalue*)alloca( sizeof(jvalue)*method->param_types.size() ); + } + + List to_free; + for(int i=0;iparam_types.size();i++) { + + switch(method->param_types[i]) { + case ARG_TYPE_VOID: { + //can't happen + argv[i].l=NULL; //I hope this works + } break; + + case ARG_TYPE_BOOLEAN: { + argv[i].z=*p_args[i]; + } break; + case ARG_TYPE_BYTE: { + argv[i].b=*p_args[i]; + } break; + case ARG_TYPE_CHAR: { + argv[i].c=*p_args[i]; + } break; + case ARG_TYPE_SHORT: { + argv[i].s=*p_args[i]; + } break; + case ARG_TYPE_INT: { + argv[i].i=*p_args[i]; + } break; + case ARG_TYPE_LONG: { + argv[i].j=*p_args[i]; + } break; + case ARG_TYPE_FLOAT: { + argv[i].f=*p_args[i]; + } break; + case ARG_TYPE_DOUBLE: { + argv[i].d=*p_args[i]; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_BOOLEAN: { + jclass bclass = env->FindClass("java/lang/Boolean"); + jmethodID ctor = env->GetMethodID(bclass, "", "(Z)V"); + jvalue val; + val.z = (bool)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_BYTE: { + jclass bclass = env->FindClass("java/lang/Byte"); + jmethodID ctor = env->GetMethodID(bclass, "", "(B)V"); + jvalue val; + val.b = (int)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_CHAR: { + jclass bclass = env->FindClass("java/lang/Character"); + jmethodID ctor = env->GetMethodID(bclass, "", "(C)V"); + jvalue val; + val.c = (int)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_SHORT: { + jclass bclass = env->FindClass("java/lang/Short"); + jmethodID ctor = env->GetMethodID(bclass, "", "(S)V"); + jvalue val; + val.s = (int)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_INT: { + jclass bclass = env->FindClass("java/lang/Integer"); + jmethodID ctor = env->GetMethodID(bclass, "", "(I)V"); + jvalue val; + val.i = (int)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_LONG: { + jclass bclass = env->FindClass("java/lang/Long"); + jmethodID ctor = env->GetMethodID(bclass, "", "(J)V"); + jvalue val; + val.j = (int64_t)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_FLOAT: { + jclass bclass = env->FindClass("java/lang/Float"); + jmethodID ctor = env->GetMethodID(bclass, "", "(F)V"); + jvalue val; + val.f = (float)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_NUMBER_CLASS_BIT|ARG_TYPE_DOUBLE: { + jclass bclass = env->FindClass("java/lang/Double"); + jmethodID ctor = env->GetMethodID(bclass, "", "(D)V"); + jvalue val; + val.d = (double)(*p_args[i]); + jobject obj = env->NewObjectA(bclass, ctor, &val); + argv[i].l = obj; + to_free.push_back(obj); + } break; + case ARG_TYPE_STRING: { + String s = *p_args[i]; + jstring jStr = env->NewStringUTF(s.utf8().get_data()); + argv[i].l=jStr; + to_free.push_back(jStr); + } break; + case ARG_TYPE_CLASS: { + + Ref jo=*p_args[i]; + if (jo.is_valid()) { + + argv[i].l=jo->instance; + } else { + argv[i].l=NULL; //I hope this works + } + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: { + + Array arr = *p_args[i]; + jbooleanArray a = env->NewBooleanArray(arr.size()); + for(int j=0;jSetBooleanArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_BYTE: { + + Array arr = *p_args[i]; + jbyteArray a = env->NewByteArray(arr.size()); + for(int j=0;jSetByteArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_CHAR: { + + Array arr = *p_args[i]; + jcharArray a = env->NewCharArray(arr.size()); + for(int j=0;jSetCharArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_SHORT: { + + Array arr = *p_args[i]; + jshortArray a = env->NewShortArray(arr.size()); + for(int j=0;jSetShortArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_INT: { + + Array arr = *p_args[i]; + jintArray a = env->NewIntArray(arr.size()); + for(int j=0;jSetIntArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + } break; + case ARG_ARRAY_BIT|ARG_TYPE_LONG: { + Array arr = *p_args[i]; + jlongArray a = env->NewLongArray(arr.size()); + for(int j=0;jSetLongArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_FLOAT: { + + Array arr = *p_args[i]; + jfloatArray a = env->NewFloatArray(arr.size()); + for(int j=0;jSetFloatArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: { + + Array arr = *p_args[i]; + jdoubleArray a = env->NewDoubleArray(arr.size()); + for(int j=0;jSetDoubleArrayRegion(a,j,1,&val); + } + argv[i].l=a; + to_free.push_back(a); + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_STRING: { + + Array arr = *p_args[i]; + jobjectArray a = env->NewObjectArray(arr.size(),env->FindClass("java/lang/String"),NULL); + for(int j=0;jNewStringUTF(s.utf8().get_data()); + env->SetObjectArrayElement(a,j,jStr); + to_free.push_back(jStr); + } + + argv[i].l=a; + to_free.push_back(a); + } break; + case ARG_ARRAY_BIT|ARG_TYPE_CLASS: { + + argv[i].l=NULL; + } break; + } + } + + r_error.error=Variant::CallError::CALL_OK; + bool success=true; + + switch(method->return_type) { + + + case ARG_TYPE_VOID: { + if (method->_static) { + env->CallStaticVoidMethodA(_class,method->method,argv); + } else { + env->CallVoidMethodA(p_instance->instance,method->method,argv); + } + ret=Variant(); + + } break; + case ARG_TYPE_BOOLEAN: { + if (method->_static) { + ret=env->CallStaticBooleanMethodA(_class,method->method,argv); + } else { + ret=env->CallBooleanMethodA(p_instance->instance,method->method,argv); + } + } break; + case ARG_TYPE_BYTE: { + if (method->_static) { + ret=env->CallStaticByteMethodA(_class,method->method,argv); + } else { + ret=env->CallByteMethodA(p_instance->instance,method->method,argv); + } + } break; + case ARG_TYPE_CHAR: { + + if (method->_static) { + ret=env->CallStaticCharMethodA(_class,method->method,argv); + } else { + ret=env->CallCharMethodA(p_instance->instance,method->method,argv); + } + } break; + case ARG_TYPE_SHORT: { + + if (method->_static) { + ret=env->CallStaticShortMethodA(_class,method->method,argv); + } else { + ret=env->CallShortMethodA(p_instance->instance,method->method,argv); + } + + } break; + case ARG_TYPE_INT: { + + if (method->_static) { + ret=env->CallStaticIntMethodA(_class,method->method,argv); + } else { + ret=env->CallIntMethodA(p_instance->instance,method->method,argv); + } + + } break; + case ARG_TYPE_LONG: { + + if (method->_static) { + ret=env->CallStaticLongMethodA(_class,method->method,argv); + } else { + ret=env->CallLongMethodA(p_instance->instance,method->method,argv); + } + + } break; + case ARG_TYPE_FLOAT: { + + if (method->_static) { + ret=env->CallStaticFloatMethodA(_class,method->method,argv); + } else { + ret=env->CallFloatMethodA(p_instance->instance,method->method,argv); + } + + } break; + case ARG_TYPE_DOUBLE: { + + if (method->_static) { + ret=env->CallStaticDoubleMethodA(_class,method->method,argv); + } else { + ret=env->CallDoubleMethodA(p_instance->instance,method->method,argv); + } + + } break; + default: { + + jobject obj; + if (method->_static) { + obj=env->CallStaticObjectMethodA(_class,method->method,argv); + } else { + obj=env->CallObjectMethodA(p_instance->instance,method->method,argv); + } + + if (!obj) { + ret=Variant(); + } else { + + if (!_convert_object_to_variant(env, obj, ret,method->return_type)) { + ret=Variant(); + r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + success=false; + } + env->DeleteLocalRef(obj); + } + + } break; + + } + + for(List::Element *E=to_free.front();E;E=E->next()) { + env->DeleteLocalRef(E->get()); + } + + return success; +} + +Variant JavaClass::call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error) { + + Variant ret; + bool found = _call_method(NULL,p_method,p_args,p_argcount,r_error,ret); + if (found) { + return ret; + } + + return Reference::call(p_method,p_args,p_argcount,r_error); +} + +JavaClass::JavaClass() { + + +} + +///////////////////// + +Variant JavaObject::call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error){ + + + return Variant(); +} + +JavaObject::JavaObject(const Ref& p_base,jobject *p_instance) { + + +} + +JavaObject::~JavaObject(){ + + +} + + +//////////////////// + +void JavaClassWrapper::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("wrap:JavaClass","name"),&JavaClassWrapper::wrap); +} + + +bool JavaClassWrapper::_get_type_sig(JNIEnv *env,jobject obj,uint32_t& sig,String&strsig) { + + jstring name2 = (jstring)env->CallObjectMethod(obj, Class_getName); + String str_type = env->GetStringUTFChars( name2, NULL ); + print_line("name: "+str_type); + env->DeleteLocalRef(name2); + uint32_t t=0; + + if (str_type.begins_with("[")) { + + t=JavaClass::ARG_ARRAY_BIT; + strsig="["; + str_type=str_type.substr(1,str_type.length()-1); + if (str_type.begins_with("[")) { + print_line("Nested arrays not supported for type: "+str_type); + return false; + } + if (str_type.begins_with("L")) { + str_type=str_type.substr(1,str_type.length()-2); //ok it's a class + } + } + + if (str_type=="void" || str_type=="V") { + t|=JavaClass::ARG_TYPE_VOID; + strsig+="V"; + } else if (str_type=="boolean" || str_type=="Z") { + t|=JavaClass::ARG_TYPE_BOOLEAN; + strsig+="Z"; + } else if (str_type=="byte" || str_type=="B") { + t|=JavaClass::ARG_TYPE_BYTE; + strsig+="B"; + } else if (str_type=="char" || str_type=="C") { + t|=JavaClass::ARG_TYPE_CHAR; + strsig+="C"; + } else if (str_type=="short" || str_type=="S") { + t|=JavaClass::ARG_TYPE_SHORT; + strsig+="S"; + } else if (str_type=="int" || str_type=="I") { + t|=JavaClass::ARG_TYPE_INT; + strsig+="I"; + } else if (str_type=="long" || str_type=="J") { + t|=JavaClass::ARG_TYPE_LONG; + strsig+="J"; + } else if (str_type=="float" || str_type=="F") { + t|=JavaClass::ARG_TYPE_FLOAT; + strsig+="F"; + } else if (str_type=="double" || str_type=="D") { + t|=JavaClass::ARG_TYPE_DOUBLE; + strsig+="D"; + } else if (str_type=="java.lang.String") { + t|=JavaClass::ARG_TYPE_STRING; + strsig+="Ljava/lang/String;"; + } else if (str_type=="java.lang.Boolean") { + t|=JavaClass::ARG_TYPE_BOOLEAN|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Boolean;"; + } else if (str_type=="java.lang.Byte") { + t|=JavaClass::ARG_TYPE_BYTE|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Byte;"; + } else if (str_type=="java.lang.Character") { + t|=JavaClass::ARG_TYPE_CHAR|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Character;"; + } else if (str_type=="java.lang.Short") { + t|=JavaClass::ARG_TYPE_SHORT|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Short;"; + } else if (str_type=="java.lang.Integer") { + t|=JavaClass::ARG_TYPE_INT|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Integer;"; + } else if (str_type=="java.lang.Long") { + t|=JavaClass::ARG_TYPE_LONG|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Long;"; + } else if (str_type=="java.lang.Float") { + t|=JavaClass::ARG_TYPE_FLOAT|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Float;"; + } else if (str_type=="java.lang.Double") { + t|=JavaClass::ARG_TYPE_DOUBLE|JavaClass::ARG_NUMBER_CLASS_BIT; + strsig+="Ljava/lang/Double;"; + } else { + //a class likely + strsig+="L"+str_type.replace(".","/")+";"; + t|=JavaClass::ARG_TYPE_CLASS; + } + + sig=t; + + + return true; + +} + +bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& var,uint32_t p_sig) { + + if (!obj) { + var=Variant(); //seems null is just null... + return true; + } + + + switch(p_sig) { + + case ARG_TYPE_VOID: { + + return Variant(); + } break; + case ARG_TYPE_BOOLEAN|ARG_NUMBER_CLASS_BIT: { + + var = env->CallBooleanMethod(obj, JavaClassWrapper::singleton->Boolean_booleanValue); + return true; + } break; + case ARG_TYPE_BYTE|ARG_NUMBER_CLASS_BIT: { + + var = env->CallByteMethod(obj, JavaClassWrapper::singleton->Byte_byteValue); + return true; + + } break; + case ARG_TYPE_CHAR|ARG_NUMBER_CLASS_BIT: { + + var = env->CallCharMethod(obj, JavaClassWrapper::singleton->Character_characterValue); + return true; + + } break; + case ARG_TYPE_SHORT|ARG_NUMBER_CLASS_BIT: { + + var = env->CallShortMethod(obj, JavaClassWrapper::singleton->Short_shortValue); + return true; + + } break; + case ARG_TYPE_INT|ARG_NUMBER_CLASS_BIT: { + + var = env->CallIntMethod(obj, JavaClassWrapper::singleton->Integer_integerValue); + return true; + + } break; + case ARG_TYPE_LONG|ARG_NUMBER_CLASS_BIT: { + + var = env->CallLongMethod(obj, JavaClassWrapper::singleton->Long_longValue); + return true; + + } break; + case ARG_TYPE_FLOAT|ARG_NUMBER_CLASS_BIT: { + + var = env->CallFloatMethod(obj, JavaClassWrapper::singleton->Float_floatValue); + return true; + + } break; + case ARG_TYPE_DOUBLE|ARG_NUMBER_CLASS_BIT: { + + var = env->CallDoubleMethod(obj, JavaClassWrapper::singleton->Double_doubleValue); + return true; + } break; + case ARG_TYPE_STRING: { + + var = String::utf8(env->GetStringUTFChars( (jstring)obj, NULL )); + return true; + } break; + case ARG_TYPE_CLASS: { + + return false; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_VOID: { + + var = Array(); // ? + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetBooleanArrayRegion((jbooleanArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + + } break; + case ARG_ARRAY_BIT|ARG_TYPE_BYTE: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetByteArrayRegion((jbyteArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_CHAR: { + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetCharArrayRegion((jcharArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_SHORT: { + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetShortArrayRegion((jshortArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_INT: { + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetIntArrayRegion((jintArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_LONG: { + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetLongArrayRegion((jlongArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_FLOAT: { + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetFloatArrayRegion((jfloatArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: { + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetDoubleArrayRegion((jdoubleArray)arr,0,1,&val); + ret.push_back(val); + } + + var=ret; + return true; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + bool val = env->CallBooleanMethod(o, JavaClassWrapper::singleton->Boolean_booleanValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_BYTE: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + int val = env->CallByteMethod(o, JavaClassWrapper::singleton->Byte_byteValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_CHAR: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + int val = env->CallCharMethod(o, JavaClassWrapper::singleton->Character_characterValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_SHORT: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + int val = env->CallShortMethod(o, JavaClassWrapper::singleton->Short_shortValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_INT: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + int val = env->CallIntMethod(o, JavaClassWrapper::singleton->Integer_integerValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_LONG: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + int64_t val = env->CallLongMethod(o, JavaClassWrapper::singleton->Long_longValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_FLOAT: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + float val = env->CallFloatMethod(o, JavaClassWrapper::singleton->Float_floatValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: { + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + double val = env->CallDoubleMethod(o, JavaClassWrapper::singleton->Double_doubleValue); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + + case ARG_ARRAY_BIT|ARG_TYPE_STRING: { + + Array ret; + jobjectArray arr = (jobjectArray)obj; + + int count = env->GetArrayLength(arr); + + for (int i=0; iGetObjectArrayElement(arr, i); + if (!o) + ret.push_back(Variant()); + else { + String val = String::utf8(env->GetStringUTFChars( (jstring)o, NULL )); + ret.push_back(val); + + } + env->DeleteLocalRef(o); + } + + var=ret; + return true; + } break; + case ARG_ARRAY_BIT|ARG_TYPE_CLASS: { + + } break; + } + + return false; + +} + + +Ref JavaClassWrapper::wrap(const String& p_class) { + + if (class_cache.has(p_class)) + return class_cache[p_class]; + + + JNIEnv *env = ThreadAndroid::get_env(); + + jclass bclass = env->FindClass(p_class.utf8().get_data()); + ERR_FAIL_COND_V(!bclass,Ref()); + + //jmethodID getDeclaredMethods = env->GetMethodID(bclass,"getDeclaredMethods", "()[Ljava/lang/reflect/Method;"); + + //ERR_FAIL_COND_V(!getDeclaredMethods,Ref()); + + jobjectArray methods = (jobjectArray)env->CallObjectMethod(bclass, getDeclaredMethods); + + ERR_FAIL_COND_V(!methods,Ref()); + + + Ref java_class = memnew( JavaClass ); + + int count = env->GetArrayLength(methods); + + for (int i=0; iGetObjectArrayElement(methods, i); + ERR_CONTINUE(!obj); + + + jstring name = (jstring)env->CallObjectMethod(obj, getName); + String str_method = env->GetStringUTFChars( name, NULL ); + env->DeleteLocalRef(name); + + Vector params; + + jint mods = env->CallIntMethod(obj,getModifiers); + + if (!(mods&0x0001)) { + env->DeleteLocalRef(obj); + continue; //not public bye + } + + + + jobjectArray param_types = (jobjectArray)env->CallObjectMethod(obj, getParameterTypes); + int count2=env->GetArrayLength(param_types); + + if (!java_class->methods.has(str_method)) { + java_class->methods[str_method]=List(); + } + + JavaClass::MethodInfo mi; + mi._static = (mods&0x8)!=0; + bool valid=true; + String signature="("; + + for(int j=0;jGetObjectArrayElement(param_types, j); + String strsig; + uint32_t sig=0; + if (!_get_type_sig(env,obj2,sig,strsig)) { + valid=false; + env->DeleteLocalRef(obj2); + break; + } + signature+=strsig; + mi.param_types.push_back(sig); + mi.param_sigs.push_back(strsig); + env->DeleteLocalRef(obj2); + + } + + if (!valid) { + print_line("Method Can't be bound (unsupported arguments): "+p_class+"::"+str_method); + env->DeleteLocalRef(obj); + env->DeleteLocalRef(param_types); + continue; + } + + signature+=")"; + + jobject return_type = (jobject)env->CallObjectMethod(obj, getReturnType); + + + String strsig; + uint32_t sig=0; + if (!_get_type_sig(env,return_type,sig,strsig)) { + print_line("Method Can't be bound (unsupported return type): "+p_class+"::"+str_method); + env->DeleteLocalRef(obj); + env->DeleteLocalRef(param_types); + env->DeleteLocalRef(return_type); + continue; + } + + signature+=strsig; + mi.return_type=sig; + + print_line("METHOD: "+str_method+" SIG: "+signature+" static: "+itos(mi._static)); + + bool discard=false; + + for(List::Element *E=java_class->methods[str_method].front();E;E=E->next()) { + + float new_likeliness=0; + float existing_likeliness=0; + + if (E->get().param_types.size()!=mi.param_types.size()) + continue; + bool valid=true; + for(int j=0;jget().param_types.size();j++) { + + Variant::Type _new; + float new_l; + Variant::Type existing; + float existing_l; + JavaClass::_convert_to_variant_type(E->get().param_types[j],existing,existing_l); + JavaClass::_convert_to_variant_type(mi.param_types[j],_new,new_l); + if (_new!=existing) { + valid=false; + break; + } + new_likeliness+=new_l; + existing_likeliness=existing_l; + + } + + if (!valid) + continue; + + if (new_likeliness>existing_likeliness) { + java_class->methods[str_method].erase(E); + print_line("replace old"); + break; + } else { + discard=true; + print_line("old is better"); + } + + + } + + if (!discard) { + if (mi._static) + mi.method = env->GetStaticMethodID(bclass, str_method.utf8().get_data(), signature.utf8().get_data()); + else + mi.method = env->GetMethodID(bclass, str_method.utf8().get_data(), signature.utf8().get_data()); + + ERR_CONTINUE(!mi.method); + + java_class->methods[str_method].push_back(mi); + } + + env->DeleteLocalRef(obj); + env->DeleteLocalRef(param_types); + env->DeleteLocalRef(return_type); + + + + + //args[i] = _jobject_to_variant(env, obj); +// print_line("\targ"+itos(i)+": "+Variant::get_type_name(args[i].get_type())); + + }; + + env->DeleteLocalRef(methods); + + jobjectArray fields = (jobjectArray)env->CallObjectMethod(bclass, getFields); + + count = env->GetArrayLength(fields); + + for (int i=0; iGetObjectArrayElement(fields, i); + ERR_CONTINUE(!obj); + + jstring name = (jstring)env->CallObjectMethod(obj, Field_getName); + String str_field = env->GetStringUTFChars( name, NULL ); + env->DeleteLocalRef(name); + print_line("FIELD: "+str_field); + int mods = env->CallIntMethod(obj,Field_getModifiers); + if ((mods&0x8) && (mods&0x10) && (mods&0x1)) { //static final public! + + jobject objc = env->CallObjectMethod(obj, Field_get,NULL); + if (objc) { + + + uint32_t sig; + String strsig; + jclass cl = env->GetObjectClass(objc); + if (JavaClassWrapper::_get_type_sig(env,cl,sig,strsig)) { + + if ((sig&JavaClass::ARG_TYPE_MASK)<=JavaClass::ARG_TYPE_STRING) { + + Variant value; + if (JavaClass::_convert_object_to_variant(env,objc,value,sig)) { + + java_class->constant_map[str_field]=value; + } + } + } + + env->DeleteLocalRef(cl); + } + + + env->DeleteLocalRef(objc); + + } + env->DeleteLocalRef(obj); + } + + env->DeleteLocalRef(fields); + + + return Ref(); +} + +JavaClassWrapper *JavaClassWrapper::singleton=NULL; + +JavaClassWrapper::JavaClassWrapper(jobject p_activity) { + + singleton=this; + + JNIEnv *env = ThreadAndroid::get_env(); + + jclass activityClass = env->FindClass("com/android/godot/Godot"); + jmethodID getClassLoader = env->GetMethodID(activityClass,"getClassLoader", "()Ljava/lang/ClassLoader;"); + classLoader = env->CallObjectMethod(p_activity, getClassLoader); + classLoader=(jclass)env->NewGlobalRef(classLoader); + jclass classLoaderClass = env->FindClass("java/lang/ClassLoader"); + findClass = env->GetMethodID(classLoaderClass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); + + jclass bclass = env->FindClass("java/lang/Class"); + getDeclaredMethods = env->GetMethodID(bclass,"getDeclaredMethods", "()[Ljava/lang/reflect/Method;"); + getFields = env->GetMethodID(bclass,"getFields", "()[Ljava/lang/reflect/Field;"); + Class_getName = env->GetMethodID(bclass,"getName", "()Ljava/lang/String;"); + // + bclass = env->FindClass("java/lang/reflect/Method"); + getParameterTypes = env->GetMethodID(bclass,"getParameterTypes", "()[Ljava/lang/Class;"); + getReturnType = env->GetMethodID(bclass,"getReturnType", "()Ljava/lang/Class;"); + getName = env->GetMethodID(bclass,"getName", "()Ljava/lang/String;"); + getModifiers = env->GetMethodID(bclass,"getModifiers", "()I"); + /// + bclass = env->FindClass("java/lang/reflect/Field"); + Field_getName = env->GetMethodID(bclass,"getName", "()Ljava/lang/String;"); + Field_getModifiers = env->GetMethodID(bclass,"getModifiers", "()I"); + Field_get = env->GetMethodID(bclass,"get", "(Ljava/lang/Object;)Ljava/lang/Object;"); + // each + bclass = env->FindClass("java/lang/Boolean"); + Boolean_booleanValue = env->GetMethodID(bclass, "booleanValue", "()Z"); + + bclass = env->FindClass("java/lang/Byte"); + Byte_byteValue = env->GetMethodID(bclass, "byteValue", "()B"); + + bclass = env->FindClass("java/lang/Character"); + Character_characterValue = env->GetMethodID(bclass, "charValue", "()C"); + + bclass = env->FindClass("java/lang/Short"); + Short_shortValue = env->GetMethodID(bclass, "shortValue", "()S"); + + bclass = env->FindClass("java/lang/Integer"); + Integer_integerValue = env->GetMethodID(bclass, "intValue", "()I"); + + bclass = env->FindClass("java/lang/Long"); + Long_longValue = env->GetMethodID(bclass, "longValue", "()J"); + + bclass = env->FindClass("java/lang/Float"); + Float_floatValue = env->GetMethodID(bclass, "floatValue", "()F"); + + bclass = env->FindClass("java/lang/Double"); + Double_doubleValue = env->GetMethodID(bclass, "doubleValue", "()D"); + + +} diff --git a/platform/android/java_class_wrapper.h b/platform/android/java_class_wrapper.h new file mode 100644 index 0000000000..d5d8bd5be8 --- /dev/null +++ b/platform/android/java_class_wrapper.h @@ -0,0 +1,168 @@ +#ifndef JAVA_CLASS_WRAPPER_H +#define JAVA_CLASS_WRAPPER_H + +#include "reference.h" +#include +#include + +class JavaObject; + +class JavaClass : public Reference { + + OBJ_TYPE(JavaClass,Reference); + + enum ArgumentType { + + ARG_TYPE_VOID, + ARG_TYPE_BOOLEAN, + ARG_TYPE_BYTE, + ARG_TYPE_CHAR, + ARG_TYPE_SHORT, + ARG_TYPE_INT, + ARG_TYPE_LONG, + ARG_TYPE_FLOAT, + ARG_TYPE_DOUBLE, + ARG_TYPE_STRING, //special case + ARG_TYPE_CLASS, + ARG_ARRAY_BIT=1<<16, + ARG_NUMBER_CLASS_BIT=1<<17, + ARG_TYPE_MASK=(1<<16)-1 + }; + + + Map constant_map; + + struct MethodInfo { + + bool _static; + Vector param_types; + Vector param_sigs; + uint32_t return_type; + jmethodID method; + + }; + + _FORCE_INLINE_ static void _convert_to_variant_type(int p_sig, Variant::Type& r_type, float& likelyhood) { + + likelyhood=1.0; + r_type=Variant::NIL; + + switch(p_sig) { + + case ARG_TYPE_VOID: r_type=Variant::NIL; break; + case ARG_TYPE_BOOLEAN|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_BOOLEAN: r_type=Variant::BOOL; break; + case ARG_TYPE_BYTE|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_BYTE: r_type=Variant::INT; likelyhood=0.1; break; + case ARG_TYPE_CHAR|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_CHAR: r_type=Variant::INT; likelyhood=0.2; break; + case ARG_TYPE_SHORT|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_SHORT: r_type=Variant::INT; likelyhood=0.3; break; + case ARG_TYPE_INT|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_INT: r_type=Variant::INT; likelyhood=1.0; break; + case ARG_TYPE_LONG|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_LONG: r_type=Variant::INT; likelyhood=0.5; break; + case ARG_TYPE_FLOAT|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_FLOAT: r_type=Variant::REAL; likelyhood=1.0; break; + case ARG_TYPE_DOUBLE|ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_DOUBLE: r_type=Variant::REAL; likelyhood=0.5; break; + case ARG_TYPE_STRING: r_type=Variant::STRING; break; + case ARG_TYPE_CLASS: r_type=Variant::OBJECT; break; + case ARG_ARRAY_BIT|ARG_TYPE_VOID: r_type=Variant::NIL; break; + case ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: r_type=Variant::ARRAY; break; + case ARG_ARRAY_BIT|ARG_TYPE_BYTE: r_type=Variant::RAW_ARRAY; likelyhood=1.0; break; + case ARG_ARRAY_BIT|ARG_TYPE_CHAR: r_type=Variant::RAW_ARRAY; likelyhood=0.5; break; + case ARG_ARRAY_BIT|ARG_TYPE_SHORT: r_type=Variant::INT_ARRAY; likelyhood=0.3; break; + case ARG_ARRAY_BIT|ARG_TYPE_INT: r_type=Variant::INT_ARRAY; likelyhood=1.0; break; + case ARG_ARRAY_BIT|ARG_TYPE_LONG: r_type=Variant::INT_ARRAY; likelyhood=0.5; break; + case ARG_ARRAY_BIT|ARG_TYPE_FLOAT: r_type=Variant::REAL_ARRAY; likelyhood=1.0; break; + case ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: r_type=Variant::REAL_ARRAY; likelyhood=0.5; break; + case ARG_ARRAY_BIT|ARG_TYPE_STRING: r_type=Variant::STRING_ARRAY; break; + case ARG_ARRAY_BIT|ARG_TYPE_CLASS: r_type=Variant::ARRAY; break; + } + } + + _FORCE_INLINE_ static bool _convert_object_to_variant(JNIEnv * env, jobject obj, Variant& var,uint32_t p_sig); + + + + bool _call_method(JavaObject* p_instance,const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error,Variant& ret); + +friend class JavaClassWrapper; + Map > methods; + jclass _class; + +public: + + virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error); + + JavaClass(); + +}; + + +class JavaObject : public Reference { + + OBJ_TYPE(JavaObject,Reference); + + Ref base_class; +friend class JavaClass; + + jobject instance; + +public: + + virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error); + + JavaObject(const Ref& p_base,jobject *p_instance); + ~JavaObject(); + +}; + + +class JavaClassWrapper : public Object { + + OBJ_TYPE(JavaClassWrapper,Object); + + + Map > class_cache; +friend class JavaClass; + jclass activityClass; + jmethodID findClass; + jmethodID getDeclaredMethods; + jmethodID getFields; + jmethodID getParameterTypes; + jmethodID getReturnType; + jmethodID getModifiers; + jmethodID getName; + jmethodID Class_getName; + jmethodID Field_getName; + jmethodID Field_getModifiers; + jmethodID Field_get; + jmethodID Boolean_booleanValue; + jmethodID Byte_byteValue; + jmethodID Character_characterValue; + jmethodID Short_shortValue; + jmethodID Integer_integerValue; + jmethodID Long_longValue; + jmethodID Float_floatValue; + jmethodID Double_doubleValue; + jobject classLoader; + + bool _get_type_sig(JNIEnv *env, jobject obj, uint32_t& sig, String&strsig); + + static JavaClassWrapper *singleton; + +protected: + + static void _bind_methods(); +public: + + static JavaClassWrapper *get_singleton() { return singleton; } + + Ref wrap(const String& p_class); + + JavaClassWrapper(jobject p_activity=NULL); +}; + +#endif // JAVA_CLASS_WRAPPER_H diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index ae8174c35a..fdc6f1207d 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -38,7 +38,10 @@ #include "globals.h" #include "thread_jandroid.h" #include "core/os/keyboard.h" +#include "java_class_wrapper.h" + +static JavaClassWrapper *java_class_wrapper=NULL; static OS_Android *os_android=NULL; @@ -934,6 +937,8 @@ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_step(JNIEnv * env, jobjec // ugly hack to initialize the rest of the engine // because of the way android forces you to do everything with threads + java_class_wrapper = memnew( JavaClassWrapper(_godot_instance )); + Globals::get_singleton()->add_singleton(Globals::Singleton("JavaClassWrapper",java_class_wrapper)); _initialize_java_modules(); Main::setup2(); diff --git a/platform/iphone/app_delegate.mm b/platform/iphone/app_delegate.mm index 9ba95ff0c5..9877e09ade 100644 --- a/platform/iphone/app_delegate.mm +++ b/platform/iphone/app_delegate.mm @@ -257,18 +257,21 @@ static int frame_count = 0; - (void)applicationDidEnterBackground:(UIApplication *)application { printf("********************* did enter background\n"); + OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); [view_controller.view stopAnimation]; } - (void)applicationWillEnterForeground:(UIApplication *)application { printf("********************* did enter foreground\n"); + //OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); [view_controller.view startAnimation]; } - (void) applicationWillResignActive:(UIApplication *)application { printf("********************* will resign active\n"); + //OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); [view_controller.view stopAnimation]; // FIXME: pause seems to be recommended elsewhere } @@ -279,6 +282,7 @@ static int frame_count = 0; printf("********************* mobile app tracker found\n"); [MobileAppTracker measureSession]; #endif + OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); [view_controller.view startAnimation]; // FIXME: resume seems to be recommended elsewhere } diff --git a/platform/iphone/in_app_store.h b/platform/iphone/in_app_store.h index dba1a1a5a1..656d126ead 100644 --- a/platform/iphone/in_app_store.h +++ b/platform/iphone/in_app_store.h @@ -49,6 +49,8 @@ public: int get_pending_event_count(); Variant pop_pending_event(); + void finish_transaction(String product_id); + void set_auto_finish_transaction(bool b); void _post_event(Variant p_event); void _record_purchase(String product_id); diff --git a/platform/iphone/in_app_store.mm b/platform/iphone/in_app_store.mm index 9b932d147b..f3640c3076 100644 --- a/platform/iphone/in_app_store.mm +++ b/platform/iphone/in_app_store.mm @@ -32,8 +32,12 @@ extern "C" { #import +#import }; +bool auto_finish_transactions = true; +NSMutableDictionary* pending_transactions = [NSMutableDictionary dictionary]; + @interface SKProduct (LocalizedPrice) @property (nonatomic, readonly) NSString *localizedPrice; @end @@ -63,6 +67,8 @@ void InAppStore::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_pending_event_count"),&InAppStore::get_pending_event_count); ObjectTypeDB::bind_method(_MD("pop_pending_event"),&InAppStore::pop_pending_event); + ObjectTypeDB::bind_method(_MD("finish_transaction"),&InAppStore::finish_transaction); + ObjectTypeDB::bind_method(_MD("set_auto_finish_transaction"),&InAppStore::set_auto_finish_transaction); }; @interface ProductsDelegate : NSObject { @@ -162,11 +168,13 @@ Error InAppStore::request_product_info(Variant p_params) { case SKPaymentTransactionStatePurchased: { printf("status purchased!\n"); String pid = String::utf8([transaction.payment.productIdentifier UTF8String]); + String transactionId = String::utf8([transaction.transactionIdentifier UTF8String]); InAppStore::get_singleton()->_record_purchase(pid); Dictionary ret; ret["type"] = "purchase"; ret["result"] = "ok"; ret["product_id"] = pid; + ret["transaction_id"] = transactionId; NSData* receipt = nil; int sdk_version = 6; @@ -207,7 +215,13 @@ Error InAppStore::request_product_info(Variant p_params) { ret["receipt"] = receipt_ret; InAppStore::get_singleton()->_post_event(ret); - [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; + + if (auto_finish_transactions){ + [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; + } + else{ + [pending_transactions setObject:transaction forKey:transaction.payment.productIdentifier]; + } } break; case SKPaymentTransactionStateFailed: { printf("status transaction failed!\n"); @@ -290,11 +304,26 @@ InAppStore* InAppStore::get_singleton() { InAppStore::InAppStore() { ERR_FAIL_COND(instance != NULL); instance = this; + auto_finish_transactions = false; TransObserver* observer = [[TransObserver alloc] init]; [[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; + //pending_transactions = [NSMutableDictionary dictionary]; }; +void InAppStore::finish_transaction(String product_id){ + NSString* prod_id = [NSString stringWithCString:product_id.utf8().get_data() encoding:NSUTF8StringEncoding]; + + if ([pending_transactions objectForKey:prod_id]){ + [[SKPaymentQueue defaultQueue] finishTransaction:[pending_transactions objectForKey:prod_id]]; + [pending_transactions removeObjectForKey:prod_id]; + } +}; + +void InAppStore::set_auto_finish_transaction(bool b){ + auto_finish_transactions = b; +} + InAppStore::~InAppStore() { }; diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 0e21540e13..b866dd2ec3 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -51,7 +51,7 @@ def get_flags(): return [ ('freetype','builtin'), #use builtin freetype - ('openssl','builtin'), #use builtin openssl + ('openssl','builtin'), #use builtin openssl ] @@ -166,6 +166,7 @@ def configure(env): env.Append(CCFLAGS=['-O3','-ffast-math','-fomit-frame-pointer','-msse2']) env['OBJSUFFIX'] = "_opt"+env['OBJSUFFIX'] env['LIBSUFFIX'] = "_opt"+env['LIBSUFFIX'] + env.Append(LINKFLAGS=['-Wl,--subsystem,windows']) elif (env["target"]=="release_debug"): env.Append(CCFLAGS=['-O2','-DDEBUG_ENABLED']) diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 778609950e..5e57827c68 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -206,6 +206,54 @@ bool OS_Windows::can_draw() const { return !minimized; }; +#define MI_WP_SIGNATURE 0xFF515700 +#define SIGNATURE_MASK 0xFFFFFF00 +#define IsPenEvent(dw) (((dw) & SIGNATURE_MASK) == MI_WP_SIGNATURE) + + +void OS_Windows::_touch_event(int idx, UINT uMsg, WPARAM wParam, LPARAM lParam) { + + InputEvent event; + event.type = InputEvent::SCREEN_TOUCH; + event.ID=++last_id; + event.screen_touch.index = idx; + + switch (uMsg) { + case WM_LBUTTONDOWN: + case WM_MBUTTONDOWN: + case WM_RBUTTONDOWN: { + + event.screen_touch.pressed = true; + } break; + + case WM_LBUTTONUP: + case WM_MBUTTONUP: + case WM_RBUTTONUP: { + event.screen_touch.pressed = false; + } break; + }; + + event.screen_touch.x=GET_X_LPARAM(lParam); + event.screen_touch.y=GET_Y_LPARAM(lParam); + + if (main_loop) { + input->parse_input_event(event); + } +}; + +void OS_Windows::_drag_event(int idx,UINT uMsg, WPARAM wParam, LPARAM lParam) { + + InputEvent event; + event.type = InputEvent::SCREEN_DRAG; + event.ID=++last_id; + event.screen_drag.index = idx; + + event.screen_drag.x=GET_X_LPARAM(lParam); + event.screen_drag.y=GET_Y_LPARAM(lParam); + + if (main_loop) + input->parse_input_event(event); +}; LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -270,28 +318,41 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { } case WM_MOUSELEAVE: { - old_invalid=true; - outside=true; + old_invalid=true; + outside=true; } break; case WM_MOUSEMOVE: { - if (outside) { + if (outside) { - CursorShape c=cursor_shape; - cursor_shape=CURSOR_MAX; - set_cursor_shape(c); - outside=false; + CursorShape c=cursor_shape; + cursor_shape=CURSOR_MAX; + set_cursor_shape(c); + outside=false; + + //Once-Off notification, must call again.... + TRACKMOUSEEVENT tme; + tme.cbSize=sizeof(TRACKMOUSEEVENT); + tme.dwFlags=TME_LEAVE; + tme.hwndTrack=hWnd; + tme.dwHoverTime=HOVER_DEFAULT; + TrackMouseEvent(&tme); + + } + + LPARAM extra = GetMessageExtraInfo(); + if (IsPenEvent(extra)) { + + int idx = extra & 0x7f; + _drag_event(idx, uMsg, wParam, lParam); + if (idx != 0) { + return 0; + }; + // fallthrough for mouse event + }; - //Once-Off notification, must call again.... - TRACKMOUSEEVENT tme; - tme.cbSize=sizeof(TRACKMOUSEEVENT); - tme.dwFlags=TME_LEAVE; - tme.hwndTrack=hWnd; - tme.dwHoverTime=HOVER_DEFAULT; - TrackMouseEvent(&tme); - } InputEvent event; event.type=InputEvent::MOUSE_MOTION; event.ID=++last_id; @@ -360,6 +421,17 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { /*case WM_XBUTTONDOWN: case WM_XBUTTONUP: */{ + LPARAM extra = GetMessageExtraInfo(); + if (IsPenEvent(extra)) { + + int idx = extra & 0x7f; + _touch_event(idx, uMsg, wParam, lParam); + if (idx != 0) { + return 0; + }; + // fallthrough for mouse event + }; + InputEvent event; event.type=InputEvent::MOUSE_BUTTON; event.ID=++last_id; diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index c9eb475e1a..1a41b9d77d 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -160,6 +160,10 @@ class OS_Windows : public OS { void _post_dpad(DWORD p_dpad, int p_device, bool p_pressed); + void _drag_event(int idx,UINT uMsg, WPARAM wParam, LPARAM lParam); + void _touch_event(int idx, UINT uMsg, WPARAM wParam, LPARAM lParam); + + // functions used by main to initialize/deintialize the OS protected: virtual int get_video_driver_count() const; diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index ecd147afde..47d78399b6 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -803,7 +803,7 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) { //print_line("margin: "+rtos(margin)); do { - //fill exclude list.. + //motion recover for(int i=0;ibody_set_layer_mask(get_rid(),p_mask); +} + +uint32_t PhysicsBody::get_layer_mask() const { + + return layer_mask; +} + +void PhysicsBody::_bind_methods() { + ObjectTypeDB::bind_method(_MD("set_layer_mask","mask"),&PhysicsBody::set_layer_mask); + ObjectTypeDB::bind_method(_MD("get_layer_mask"),&PhysicsBody::get_layer_mask); + ADD_PROPERTY(PropertyInfo(Variant::INT,"layers",PROPERTY_HINT_ALL_FLAGS),_SCS("set_layer_mask"),_SCS("get_layer_mask")); +} + + PhysicsBody::PhysicsBody(PhysicsServer::BodyMode p_mode) : CollisionObject( PhysicsServer::get_singleton()->body_create(p_mode), false) { + layer_mask=1; + +} +void StaticBody::set_friction(real_t p_friction){ + + ERR_FAIL_COND(p_friction<0 || p_friction>1); + + friction=p_friction; + PhysicsServer::get_singleton()->body_set_param(get_rid(),PhysicsServer::BODY_PARAM_FRICTION,friction); + +} +real_t StaticBody::get_friction() const{ + + return friction; +} + +void StaticBody::set_bounce(real_t p_bounce){ + + ERR_FAIL_COND(p_bounce<0 || p_bounce>1); + + bounce=p_bounce; + PhysicsServer::get_singleton()->body_set_param(get_rid(),PhysicsServer::BODY_PARAM_BOUNCE,bounce); + +} +real_t StaticBody::get_bounce() const{ + + return bounce; } void StaticBody::set_constant_linear_velocity(const Vector3& p_vel) { @@ -86,131 +132,36 @@ Vector3 StaticBody::get_constant_angular_velocity() const { } -void StaticBody::_state_notify(Object *p_object) { - - if (!pre_xform) - return; - - PhysicsDirectBodyState *p2d = (PhysicsDirectBodyState*)p_object; - setting=true; - - Transform new_xform = p2d->get_transform(); - *pre_xform=new_xform; - set_ignore_transform_notification(true); - set_global_transform(new_xform); - set_ignore_transform_notification(false); - - setting=false; - - -} - -void StaticBody::_update_xform() { - - if (!pre_xform || !pending) - return; - - setting=true; - - - Transform new_xform = get_global_transform(); //obtain the new one - - //set_block_transform_notify(true); - set_ignore_transform_notification(true); - PhysicsServer::get_singleton()->body_set_state(get_rid(),PhysicsServer::BODY_STATE_TRANSFORM,*pre_xform); //then simulate motion! - set_global_transform(*pre_xform); //but restore state to previous one in both visual and physics - set_ignore_transform_notification(false); - - PhysicsServer::get_singleton()->body_static_simulate_motion(get_rid(),new_xform); //then simulate motion! - - setting=false; - pending=false; - -} - -void StaticBody::_notification(int p_what) { - - switch(p_what) { - - case NOTIFICATION_ENTER_SCENE: { - - if (pre_xform) - *pre_xform = get_global_transform(); - pending=false; - } break; - case NOTIFICATION_TRANSFORM_CHANGED: { - - if (simulating_motion && !pending && is_inside_scene() && !setting && !get_scene()->is_editor_hint()) { - - call_deferred(SceneStringNames::get_singleton()->_update_xform); - pending=true; - } - - } break; - } - - -} - -void StaticBody::set_simulate_motion(bool p_enable) { - - if (p_enable==simulating_motion) - return; - simulating_motion=p_enable; - - if (p_enable) { - pre_xform = memnew( Transform ); - if (is_inside_scene()) - *pre_xform=get_transform(); -// query = PhysicsServer::get_singleton()->query_create(this,"_state_notify",Variant()); - // PhysicsServer::get_singleton()->query_body_direct_state(query,get_rid()); - PhysicsServer::get_singleton()->body_set_force_integration_callback(get_rid(),this,"_state_notify"); - - } else { - memdelete( pre_xform ); - pre_xform=NULL; - PhysicsServer::get_singleton()->body_set_force_integration_callback(get_rid(),NULL,StringName()); - pending=false; - } -} - -bool StaticBody::is_simulating_motion() const { - - return simulating_motion; -} void StaticBody::_bind_methods() { - ObjectTypeDB::bind_method(_MD("set_simulate_motion","enabled"),&StaticBody::set_simulate_motion); - ObjectTypeDB::bind_method(_MD("is_simulating_motion"),&StaticBody::is_simulating_motion); - ObjectTypeDB::bind_method(_MD("_update_xform"),&StaticBody::_update_xform); - ObjectTypeDB::bind_method(_MD("_state_notify"),&StaticBody::_state_notify); ObjectTypeDB::bind_method(_MD("set_constant_linear_velocity","vel"),&StaticBody::set_constant_linear_velocity); ObjectTypeDB::bind_method(_MD("set_constant_angular_velocity","vel"),&StaticBody::set_constant_angular_velocity); ObjectTypeDB::bind_method(_MD("get_constant_linear_velocity"),&StaticBody::get_constant_linear_velocity); ObjectTypeDB::bind_method(_MD("get_constant_angular_velocity"),&StaticBody::get_constant_angular_velocity); - ADD_PROPERTY(PropertyInfo(Variant::BOOL,"simulate_motion"),_SCS("set_simulate_motion"),_SCS("is_simulating_motion")); + ObjectTypeDB::bind_method(_MD("set_friction","friction"),&StaticBody::set_friction); + ObjectTypeDB::bind_method(_MD("get_friction"),&StaticBody::get_friction); + + ObjectTypeDB::bind_method(_MD("set_bounce","bounce"),&StaticBody::set_bounce); + ObjectTypeDB::bind_method(_MD("get_bounce"),&StaticBody::get_bounce); + + ADD_PROPERTY( PropertyInfo(Variant::REAL,"friction",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_friction"),_SCS("get_friction")); + ADD_PROPERTY( PropertyInfo(Variant::REAL,"bounce",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_bounce"),_SCS("get_bounce")); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3,"constant_linear_velocity"),_SCS("set_constant_linear_velocity"),_SCS("get_constant_linear_velocity")); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3,"constant_angular_velocity"),_SCS("set_constant_angular_velocity"),_SCS("get_constant_angular_velocity")); } StaticBody::StaticBody() : PhysicsBody(PhysicsServer::BODY_MODE_STATIC) { - simulating_motion=false; - pre_xform=NULL; - setting=false; - pending=false; - //constant_angular_velocity=0; - + bounce=0; + friction=1; } StaticBody::~StaticBody() { - if (pre_xform) - memdelete(pre_xform); - //if (query.is_valid()) - // PhysicsServer::get_singleton()->free(query); + } @@ -768,4 +719,418 @@ RigidBody::~RigidBody() { } +////////////////////////////////////////////////////// +////////////////////////// + + +Variant KinematicBody::_get_collider() const { + + ObjectID oid=get_collider(); + if (oid==0) + return Variant(); + Object *obj = ObjectDB::get_instance(oid); + if (!obj) + return Variant(); + + Reference *ref = obj->cast_to(); + if (ref) { + return Ref(ref); + } + + return obj; +} + + +bool KinematicBody::_ignores_mode(PhysicsServer::BodyMode p_mode) const { + + switch(p_mode) { + case PhysicsServer::BODY_MODE_STATIC: return !collide_static; + case PhysicsServer::BODY_MODE_KINEMATIC: return !collide_kinematic; + case PhysicsServer::BODY_MODE_RIGID: return !collide_rigid; + case PhysicsServer::BODY_MODE_CHARACTER: return !collide_character; + } + + return true; +} + +Vector3 KinematicBody::move(const Vector3& p_motion) { + + //give me back regular physics engine logic + //this is madness + //and most people using this function will think + //what it does is simpler than using physics + //this took about a week to get right.. + //but is it right? who knows at this point.. + + + colliding=false; + ERR_FAIL_COND_V(!is_inside_scene(),Vector3()); + PhysicsDirectSpaceState *dss = PhysicsServer::get_singleton()->space_get_direct_state(get_world()->get_space()); + ERR_FAIL_COND_V(!dss,Vector3()); + const int max_shapes=32; + Vector3 sr[max_shapes*2]; + int res_shapes; + + Set exclude; + exclude.insert(get_rid()); + + + //recover first + int recover_attempts=4; + + bool collided=false; + uint32_t mask=0; + if (collide_static) + mask|=PhysicsDirectSpaceState::TYPE_MASK_STATIC_BODY; + if (collide_kinematic) + mask|=PhysicsDirectSpaceState::TYPE_MASK_KINEMATIC_BODY; + if (collide_rigid) + mask|=PhysicsDirectSpaceState::TYPE_MASK_RIGID_BODY; + if (collide_character) + mask|=PhysicsDirectSpaceState::TYPE_MASK_CHARACTER_BODY; + +// print_line("motion: "+p_motion+" margin: "+rtos(margin)); + + //print_line("margin: "+rtos(margin)); + + float m = margin; + //m=0.001; + + do { + + //motion recover + for(int i=0;icollide_shape(get_shape(i)->get_rid(), get_global_transform() * get_shape_transform(i),m,sr,max_shapes,res_shapes,exclude,get_layer_mask(),mask)) { + collided=true; + } + + } + + + + if (!collided) + break; + + //print_line("have to recover"); + Vector3 recover_motion; + bool all_outside=true; + for(int j=0;j<8;j++) { + for(int i=0;i "+b); +#if 0 + float d = a.distance_to(b); + + //if (dCMP_EPSILON) { + Vector3 norm = (b-a).normalized(); + if (dist>margin*0.5) + all_outside=false; + float adv = norm.dot(recover_motion); + //print_line(itos(i)+" dist: "+rtos(dist)+" adv: "+rtos(adv)); + recover_motion+=norm*MAX(dist-adv,0)*0.4; + } +#endif + + } + } + + + if (recover_motion==Vector3()) { + collided=false; + break; + } + + //print_line("**** RECOVER: "+recover_motion); + + Transform gt = get_global_transform(); + gt.origin+=recover_motion; + set_global_transform(gt); + + recover_attempts--; + + if (all_outside) + break; + + } while (recover_attempts); + + + //move second + float safe = 1.0; + float unsafe = 1.0; + int best_shape=-1; + + PhysicsDirectSpaceState::ShapeRestInfo rest; + + //print_line("pos: "+get_global_transform().origin); + //print_line("motion: "+p_motion); + + + for(int i=0;icast_motion(get_shape(i)->get_rid(), get_global_transform() * get_shape_transform(i), p_motion,0, lsafe,lunsafe,exclude,get_layer_mask(),mask,&lrest); + //print_line("shape: "+itos(i)+" travel:"+rtos(ltravel)); + if (!valid) { + safe=0; + unsafe=0; + best_shape=i; //sadly it's the best + //print_line("initial stuck"); + + break; + } + if (lsafe==1.0) { + //print_line("initial free"); + continue; + } + if (lsafe < safe) { + + //print_line("initial at "+rtos(lsafe)); + safe=lsafe; + safe=MAX(0,lsafe-0.01); + unsafe=lunsafe; + best_shape=i; + rest=lrest; + } + } + + + //print_line("best shape: "+itos(best_shape)+" motion "+p_motion); + + if (safe>=1) { + //not collided + colliding=false; + } else { + + colliding=true; + + if (true || (safe==0 && unsafe==0)) { //use it always because it's more precise than GJK + //no advance, use rest info from collision + Transform ugt = get_global_transform(); + ugt.origin+=p_motion*unsafe; + + PhysicsDirectSpaceState::ShapeRestInfo rest_info; + bool c2 = dss->rest_info(get_shape(best_shape)->get_rid(), ugt*get_shape_transform(best_shape), m,&rest,exclude,get_layer_mask(),mask); + if (!c2) { + //should not happen, but floating point precision is so weird.. + colliding=false; + } + + // print_line("Rest Travel: "+rest.normal); + + } + + if (colliding) { + + collision=rest.point; + normal=rest.normal; + collider=rest.collider_id; + collider_vel=rest.linear_velocity; + } + } + + Vector3 motion=p_motion*safe; + //if (colliding) + // motion+=normal*0.001; + Transform gt = get_global_transform(); + gt.origin+=motion; + set_global_transform(gt); + + return p_motion-motion; + +} + +Vector3 KinematicBody::move_to(const Vector3& p_position) { + + return move(p_position-get_global_transform().origin); +} + +bool KinematicBody::can_move_to(const Vector3& p_position, bool p_discrete) { + + ERR_FAIL_COND_V(!is_inside_scene(),false); + PhysicsDirectSpaceState *dss = PhysicsServer::get_singleton()->space_get_direct_state(get_world()->get_space()); + ERR_FAIL_COND_V(!dss,false); + + uint32_t mask=0; + if (collide_static) + mask|=PhysicsDirectSpaceState::TYPE_MASK_STATIC_BODY; + if (collide_kinematic) + mask|=PhysicsDirectSpaceState::TYPE_MASK_KINEMATIC_BODY; + if (collide_rigid) + mask|=PhysicsDirectSpaceState::TYPE_MASK_RIGID_BODY; + if (collide_character) + mask|=PhysicsDirectSpaceState::TYPE_MASK_CHARACTER_BODY; + + Vector3 motion = p_position-get_global_transform().origin; + Transform xform=get_global_transform(); + + if (true || p_discrete) { + + xform.origin+=motion; + motion=Vector3(); + } + + Set exclude; + exclude.insert(get_rid()); + + //fill exclude list.. + for(int i=0;iintersect_shape(get_shape(i)->get_rid(), xform * get_shape_transform(i),0,NULL,0,exclude,get_layer_mask(),mask); + if (col) + return false; + } + + return true; +} + +bool KinematicBody::is_colliding() const { + + ERR_FAIL_COND_V(!is_inside_scene(),false); + + return colliding; +} +Vector3 KinematicBody::get_collision_pos() const { + + ERR_FAIL_COND_V(!colliding,Vector3()); + return collision; + +} +Vector3 KinematicBody::get_collision_normal() const { + + ERR_FAIL_COND_V(!colliding,Vector3()); + return normal; + +} + +Vector3 KinematicBody::get_collider_velocity() const { + + return collider_vel; +} + +ObjectID KinematicBody::get_collider() const { + + ERR_FAIL_COND_V(!colliding,0); + return collider; +} + +void KinematicBody::set_collide_with_static_bodies(bool p_enable) { + + collide_static=p_enable; +} +bool KinematicBody::can_collide_with_static_bodies() const { + + return collide_static; +} + +void KinematicBody::set_collide_with_rigid_bodies(bool p_enable) { + + collide_rigid=p_enable; + +} +bool KinematicBody::can_collide_with_rigid_bodies() const { + + + return collide_rigid; +} + +void KinematicBody::set_collide_with_kinematic_bodies(bool p_enable) { + + collide_kinematic=p_enable; + +} +bool KinematicBody::can_collide_with_kinematic_bodies() const { + + return collide_kinematic; +} + +void KinematicBody::set_collide_with_character_bodies(bool p_enable) { + + collide_character=p_enable; +} +bool KinematicBody::can_collide_with_character_bodies() const { + + return collide_character; +} + +void KinematicBody::set_collision_margin(float p_margin) { + + margin=p_margin; +} + +float KinematicBody::get_collision_margin() const{ + + return margin; +} + +void KinematicBody::_bind_methods() { + + + ObjectTypeDB::bind_method(_MD("move","rel_vec"),&KinematicBody::move); + ObjectTypeDB::bind_method(_MD("move_to","position"),&KinematicBody::move_to); + + ObjectTypeDB::bind_method(_MD("can_move_to","position"),&KinematicBody::can_move_to); + + ObjectTypeDB::bind_method(_MD("is_colliding"),&KinematicBody::is_colliding); + + ObjectTypeDB::bind_method(_MD("get_collision_pos"),&KinematicBody::get_collision_pos); + ObjectTypeDB::bind_method(_MD("get_collision_normal"),&KinematicBody::get_collision_normal); + ObjectTypeDB::bind_method(_MD("get_collider_velocity"),&KinematicBody::get_collider_velocity); + ObjectTypeDB::bind_method(_MD("get_collider:Object"),&KinematicBody::_get_collider); + + + ObjectTypeDB::bind_method(_MD("set_collide_with_static_bodies","enable"),&KinematicBody::set_collide_with_static_bodies); + ObjectTypeDB::bind_method(_MD("can_collide_with_static_bodies"),&KinematicBody::can_collide_with_static_bodies); + + ObjectTypeDB::bind_method(_MD("set_collide_with_kinematic_bodies","enable"),&KinematicBody::set_collide_with_kinematic_bodies); + ObjectTypeDB::bind_method(_MD("can_collide_with_kinematic_bodies"),&KinematicBody::can_collide_with_kinematic_bodies); + + ObjectTypeDB::bind_method(_MD("set_collide_with_rigid_bodies","enable"),&KinematicBody::set_collide_with_rigid_bodies); + ObjectTypeDB::bind_method(_MD("can_collide_with_rigid_bodies"),&KinematicBody::can_collide_with_rigid_bodies); + + ObjectTypeDB::bind_method(_MD("set_collide_with_character_bodies","enable"),&KinematicBody::set_collide_with_character_bodies); + ObjectTypeDB::bind_method(_MD("can_collide_with_character_bodies"),&KinematicBody::can_collide_with_character_bodies); + + ObjectTypeDB::bind_method(_MD("set_collision_margin","pixels"),&KinematicBody::set_collision_margin); + ObjectTypeDB::bind_method(_MD("get_collision_margin","pixels"),&KinematicBody::get_collision_margin); + + ADD_PROPERTY( PropertyInfo(Variant::BOOL,"collide_with/static"),_SCS("set_collide_with_static_bodies"),_SCS("can_collide_with_static_bodies")); + ADD_PROPERTY( PropertyInfo(Variant::BOOL,"collide_with/kinematic"),_SCS("set_collide_with_kinematic_bodies"),_SCS("can_collide_with_kinematic_bodies")); + ADD_PROPERTY( PropertyInfo(Variant::BOOL,"collide_with/rigid"),_SCS("set_collide_with_rigid_bodies"),_SCS("can_collide_with_rigid_bodies")); + ADD_PROPERTY( PropertyInfo(Variant::BOOL,"collide_with/character"),_SCS("set_collide_with_character_bodies"),_SCS("can_collide_with_character_bodies")); + ADD_PROPERTY( PropertyInfo(Variant::REAL,"collision/margin",PROPERTY_HINT_RANGE,"0.001,256,0.001"),_SCS("set_collision_margin"),_SCS("get_collision_margin")); + + +} + +KinematicBody::KinematicBody() : PhysicsBody(PhysicsServer::BODY_MODE_KINEMATIC){ + + collide_static=true; + collide_rigid=true; + collide_kinematic=true; + collide_character=true; + + colliding=false; + collider=0; + margin=0.001; +} +KinematicBody::~KinematicBody() { + + +} + diff --git a/scene/3d/physics_body.h b/scene/3d/physics_body.h index 616288e1f6..0b7a389449 100644 --- a/scene/3d/physics_body.h +++ b/scene/3d/physics_body.h @@ -38,8 +38,10 @@ class PhysicsBody : public CollisionObject { OBJ_TYPE(PhysicsBody,CollisionObject); + uint32_t layer_mask; protected: + static void _bind_methods(); void _notification(int p_what); PhysicsBody(PhysicsServer::BodyMode p_mode); public: @@ -48,6 +50,10 @@ public: virtual Vector3 get_angular_velocity() const; virtual float get_inverse_mass() const; + void set_layer_mask(uint32_t p_mask); + uint32_t get_layer_mask() const; + + PhysicsBody(); }; @@ -56,25 +62,26 @@ class StaticBody : public PhysicsBody { OBJ_TYPE(StaticBody,PhysicsBody); - Transform *pre_xform; - //RID query; - bool setting; - bool pending; - bool simulating_motion; Vector3 constant_linear_velocity; Vector3 constant_angular_velocity; - void _update_xform(); - void _state_notify(Object *p_object); + + real_t bounce; + real_t friction; + protected: - void _notification(int p_what); static void _bind_methods(); public: - void set_simulate_motion(bool p_enable); - bool is_simulating_motion() const; + + void set_friction(real_t p_friction); + real_t get_friction() const; + + void set_bounce(real_t p_bounce); + real_t get_bounce() const; + void set_constant_linear_velocity(const Vector3& p_vel); void set_constant_angular_velocity(const Vector3& p_vel); @@ -237,4 +244,70 @@ public: VARIANT_ENUM_CAST(RigidBody::Mode); VARIANT_ENUM_CAST(RigidBody::AxisLock); + + + + + +class KinematicBody : public PhysicsBody { + + OBJ_TYPE(KinematicBody,PhysicsBody); + + float margin; + bool collide_static; + bool collide_rigid; + bool collide_kinematic; + bool collide_character; + + bool colliding; + Vector3 collision; + Vector3 normal; + Vector3 collider_vel; + ObjectID collider; + + + Variant _get_collider() const; + + _FORCE_INLINE_ bool _ignores_mode(PhysicsServer::BodyMode) const; +protected: + + static void _bind_methods(); +public: + + enum { + SLIDE_FLAG_FLOOR, + SLIDE_FLAG_WALL, + SLIDE_FLAG_ROOF + }; + + Vector3 move(const Vector3& p_motion); + Vector3 move_to(const Vector3& p_position); + + bool can_move_to(const Vector3& p_position,bool p_discrete=false); + bool is_colliding() const; + Vector3 get_collision_pos() const; + Vector3 get_collision_normal() const; + Vector3 get_collider_velocity() const; + ObjectID get_collider() const; + + void set_collide_with_static_bodies(bool p_enable); + bool can_collide_with_static_bodies() const; + + void set_collide_with_rigid_bodies(bool p_enable); + bool can_collide_with_rigid_bodies() const; + + void set_collide_with_kinematic_bodies(bool p_enable); + bool can_collide_with_kinematic_bodies() const; + + void set_collide_with_character_bodies(bool p_enable); + bool can_collide_with_character_bodies() const; + + void set_collision_margin(float p_margin); + float get_collision_margin() const; + + KinematicBody(); + ~KinematicBody(); + +}; + #endif // PHYSICS_BODY__H diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp index 7680c1d56c..07abd1dcd2 100644 --- a/scene/3d/vehicle_body.cpp +++ b/scene/3d/vehicle_body.cpp @@ -125,19 +125,161 @@ void VehicleWheel::_update(PhysicsDirectBodyState *s) { } } +void VehicleWheel::set_radius(float p_radius) { + + m_wheelRadius=p_radius; + update_gizmo(); +} + +float VehicleWheel::get_radius() const{ + + return m_wheelRadius; +} + +void VehicleWheel::set_suspension_rest_length(float p_length){ + + m_suspensionRestLength=p_length; + update_gizmo(); +} +float VehicleWheel::get_suspension_rest_length() const{ + + return m_suspensionRestLength; +} + +void VehicleWheel::set_suspension_travel(float p_length){ + + m_maxSuspensionTravelCm=p_length/0.01; +} +float VehicleWheel::get_suspension_travel() const{ + + return m_maxSuspensionTravelCm*0.01; +} + +void VehicleWheel::set_suspension_stiffness(float p_value){ + + m_suspensionStiffness=p_value; +} +float VehicleWheel::get_suspension_stiffness() const{ + + return m_suspensionStiffness; +} + +void VehicleWheel::set_suspension_max_force(float p_value){ + + m_maxSuspensionForce=p_value; +} +float VehicleWheel::get_suspension_max_force() const{ + + return m_maxSuspensionForce; +} + +void VehicleWheel::set_damping_compression(float p_value){ + + m_wheelsDampingCompression=p_value; +} +float VehicleWheel::get_damping_compression() const{ + + return m_wheelsDampingRelaxation; +} + +void VehicleWheel::set_damping_relaxation(float p_value){ + + m_wheelsDampingRelaxation=p_value; +} +float VehicleWheel::get_damping_relaxation() const{ + + return m_wheelsDampingRelaxation; +} + +void VehicleWheel::set_friction_slip(float p_value) { + + m_frictionSlip=p_value; +} +float VehicleWheel::get_friction_slip() const{ + + return m_frictionSlip; +} + + void VehicleWheel::_bind_methods() { + ObjectTypeDB::bind_method(_MD("set_radius","length"),&VehicleWheel::set_radius); + ObjectTypeDB::bind_method(_MD("get_radius"),&VehicleWheel::get_radius); + ObjectTypeDB::bind_method(_MD("set_suspension_rest_length","length"),&VehicleWheel::set_suspension_rest_length); + ObjectTypeDB::bind_method(_MD("get_suspension_rest_length"),&VehicleWheel::get_suspension_rest_length); + + ObjectTypeDB::bind_method(_MD("set_suspension_travel","length"),&VehicleWheel::set_suspension_travel); + ObjectTypeDB::bind_method(_MD("get_suspension_travel"),&VehicleWheel::get_suspension_travel); + + ObjectTypeDB::bind_method(_MD("set_suspension_stiffness","length"),&VehicleWheel::set_suspension_stiffness); + ObjectTypeDB::bind_method(_MD("get_suspension_stiffness"),&VehicleWheel::get_suspension_stiffness); + + ObjectTypeDB::bind_method(_MD("set_suspension_max_force","length"),&VehicleWheel::set_suspension_max_force); + ObjectTypeDB::bind_method(_MD("get_suspension_max_force"),&VehicleWheel::get_suspension_max_force); + + + ObjectTypeDB::bind_method(_MD("set_damping_compression","length"),&VehicleWheel::set_damping_compression); + ObjectTypeDB::bind_method(_MD("get_damping_compression"),&VehicleWheel::get_damping_compression); + + ObjectTypeDB::bind_method(_MD("set_damping_relaxation","length"),&VehicleWheel::set_damping_relaxation); + ObjectTypeDB::bind_method(_MD("get_damping_relaxation"),&VehicleWheel::get_damping_relaxation); + + ObjectTypeDB::bind_method(_MD("set_use_as_traction","enable"),&VehicleWheel::set_use_as_traction); + ObjectTypeDB::bind_method(_MD("is_used_as_traction"),&VehicleWheel::is_used_as_traction); + + ObjectTypeDB::bind_method(_MD("set_use_as_steering","enable"),&VehicleWheel::set_use_as_steering); + ObjectTypeDB::bind_method(_MD("is_used_as_steering"),&VehicleWheel::is_used_as_steering); + + ObjectTypeDB::bind_method(_MD("set_friction_slip","length"),&VehicleWheel::set_friction_slip); + ObjectTypeDB::bind_method(_MD("get_friction_slip"),&VehicleWheel::get_friction_slip); + + + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"type/traction"),_SCS("set_use_as_traction"),_SCS("is_used_as_traction")); + ADD_PROPERTY(PropertyInfo(Variant::BOOL,"type/steering"),_SCS("set_use_as_steering"),_SCS("is_used_as_steering")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"wheel/radius"),_SCS("set_radius"),_SCS("get_radius")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"wheel/rest_length"),_SCS("set_suspension_rest_length"),_SCS("get_suspension_rest_length")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"wheel/friction_slip"),_SCS("set_friction_slip"),_SCS("get_friction_slip")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"suspension/travel"),_SCS("set_suspension_travel"),_SCS("get_suspension_travel")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"suspension/stiffness"),_SCS("set_suspension_stiffness"),_SCS("get_suspension_stiffness")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"suspension/max_force"),_SCS("set_suspension_max_force"),_SCS("get_suspension_max_force")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"damping/compression"),_SCS("set_damping_compression"),_SCS("get_damping_compression")); + ADD_PROPERTY(PropertyInfo(Variant::REAL,"damping/relaxation"),_SCS("set_damping_relaxation"),_SCS("get_damping_relaxation")); + +} + + +void VehicleWheel::set_use_as_traction(bool p_enable) { + + engine_traction=p_enable; +} + +bool VehicleWheel::is_used_as_traction() const{ + + return engine_traction; +} + + +void VehicleWheel::set_use_as_steering(bool p_enabled){ + + steers=p_enabled; +} + +bool VehicleWheel::is_used_as_steering() const{ + + return steers; } VehicleWheel::VehicleWheel() { + steers=false; + engine_traction=false; m_steering = real_t(0.); - m_engineForce = real_t(0.); + //m_engineForce = real_t(0.); m_rotation = real_t(0.); m_deltaRotation = real_t(0.); m_brake = real_t(0.); @@ -172,6 +314,7 @@ void VehicleBody::_update_wheel_transform(VehicleWheel& wheel ,PhysicsDirectBody //} wheel.m_raycastInfo.m_hardPointWS = chassisTrans.xform( wheel.m_chassisConnectionPointCS ); + //wheel.m_raycastInfo.m_hardPointWS+=s->get_linear_velocity()*s->get_step(); wheel.m_raycastInfo.m_wheelDirectionWS = chassisTrans.get_basis().xform( wheel.m_wheelDirectionCS).normalized(); wheel.m_raycastInfo.m_wheelAxleWS = chassisTrans.get_basis().xform( wheel.m_wheelAxleCS ).normalized(); } @@ -189,12 +332,16 @@ void VehicleBody::_update_wheel(int p_idx,PhysicsDirectBodyState *s) { // up.normalize(); //rotate around steering over de wheelAxleWS - real_t steering = wheel.m_steering; + real_t steering = wheel.steers?m_steeringValue:0.0; + //print_line(itos(p_idx)+": "+rtos(steering)); Matrix3 steeringMat(up,steering); Matrix3 rotatingMat(right,-wheel.m_rotation); +// if (p_idx==1) +// print_line("steeringMat " +steeringMat); + Matrix3 basis2( right[0],up[0],fwd[0], right[1],up[1],fwd[1], @@ -202,9 +349,11 @@ void VehicleBody::_update_wheel(int p_idx,PhysicsDirectBodyState *s) { ); wheel.m_worldTransform.set_basis(steeringMat * rotatingMat * basis2); + //wheel.m_worldTransform.set_basis(basis2 * (steeringMat * rotatingMat)); wheel.m_worldTransform.set_origin( wheel.m_raycastInfo.m_hardPointWS + wheel.m_raycastInfo.m_wheelDirectionWS * wheel.m_raycastInfo.m_suspensionLength ); + } @@ -221,9 +370,10 @@ real_t VehicleBody::_ray_cast(int p_idx,PhysicsDirectBodyState *s) { real_t raylen = wheel.m_suspensionRestLength+wheel.m_wheelRadius; Vector3 rayvector = wheel.m_raycastInfo.m_wheelDirectionWS * (raylen); - const Vector3& source = wheel.m_raycastInfo.m_hardPointWS; + Vector3 source = wheel.m_raycastInfo.m_hardPointWS; wheel.m_raycastInfo.m_contactPointWS = source + rayvector; const Vector3& target = wheel.m_raycastInfo.m_contactPointWS; + source-=wheel.m_wheelRadius * wheel.m_raycastInfo.m_wheelDirectionWS; real_t param = real_t(0.); @@ -552,9 +702,10 @@ void VehicleBody::_update_friction(PhysicsDirectBodyState *s) { //const btTransform& wheelTrans = getWheelTransformWS( i ); - Matrix3 wheelBasis0 = wheelInfo.get_global_transform().basis; + Matrix3 wheelBasis0 = wheelInfo.m_worldTransform.basis;//get_global_transform().basis; + m_axle[i] = wheelBasis0.get_axis(Vector3::AXIS_X); - m_axle[i] = wheelInfo.m_raycastInfo.m_wheelAxleWS; + //m_axle[i] = wheelInfo.m_raycastInfo.m_wheelAxleWS; const Vector3& surfNormalWS = wheelInfo.m_raycastInfo.m_contactNormalWS; real_t proj = m_axle[i].dot(surfNormalWS); @@ -592,9 +743,9 @@ void VehicleBody::_update_friction(PhysicsDirectBodyState *s) { if (wheelInfo.m_raycastInfo.m_isInContact) { - if (wheelInfo.m_engineForce != 0.f) + if (engine_force != 0.f) { - rollingFriction = wheelInfo.m_engineForce* s->get_step(); + rollingFriction = engine_force* s->get_step(); } else { real_t defaultRollingFrictionImpulse = 0.f; @@ -721,9 +872,11 @@ void VehicleBody::_direct_state_changed(Object *p_state) { _update_wheel(i,s); } + for(int i=0;iset_transform(s->get_transform().inverse() * wheels[i]->m_worldTransform); } _update_suspension(s); @@ -808,6 +961,35 @@ real_t VehicleBody::get_friction() const{ return friction; } +void VehicleBody::set_engine_force(float p_force) { + + engine_force=p_force; +} + +float VehicleBody::get_engine_force() const{ + + return engine_force; +} + +void VehicleBody::set_brake(float p_brake){ + + brake=p_brake; +} +float VehicleBody::get_brake() const{ + + return brake; +} + +void VehicleBody::set_steering(float p_steering){ + + m_steeringValue=p_steering; +} +float VehicleBody::get_steering() const{ + + return m_steeringValue; +} + + void VehicleBody::_bind_methods(){ ObjectTypeDB::bind_method(_MD("set_mass","mass"),&VehicleBody::set_mass); @@ -816,8 +998,20 @@ void VehicleBody::_bind_methods(){ ObjectTypeDB::bind_method(_MD("set_friction","friction"),&VehicleBody::set_friction); ObjectTypeDB::bind_method(_MD("get_friction"),&VehicleBody::get_friction); + ObjectTypeDB::bind_method(_MD("set_engine_force","engine_force"),&VehicleBody::set_engine_force); + ObjectTypeDB::bind_method(_MD("get_engine_force"),&VehicleBody::get_engine_force); + + ObjectTypeDB::bind_method(_MD("set_brake","brake"),&VehicleBody::set_brake); + ObjectTypeDB::bind_method(_MD("get_brake"),&VehicleBody::get_brake); + + ObjectTypeDB::bind_method(_MD("set_steering","steering"),&VehicleBody::set_steering); + ObjectTypeDB::bind_method(_MD("get_steering"),&VehicleBody::get_steering); + ObjectTypeDB::bind_method(_MD("_direct_state_changed"),&VehicleBody::_direct_state_changed); + ADD_PROPERTY( PropertyInfo(Variant::REAL,"motion/engine_force",PROPERTY_HINT_RANGE,"0.01,1024.0,0.01"),_SCS("set_engine_force"),_SCS("get_engine_force")); + ADD_PROPERTY( PropertyInfo(Variant::REAL,"motion/brake",PROPERTY_HINT_RANGE,"0.01,1024.0,0.01"),_SCS("set_brake"),_SCS("get_brake")); + ADD_PROPERTY( PropertyInfo(Variant::REAL,"motion/steering",PROPERTY_HINT_RANGE,"0.01,1024.0,0.01"),_SCS("set_steering"),_SCS("get_steering")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"body/mass",PROPERTY_HINT_RANGE,"0.01,65536,0.01"),_SCS("set_mass"),_SCS("get_mass")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"body/friction",PROPERTY_HINT_RANGE,"0.01,1,0.01"),_SCS("set_friction"),_SCS("get_friction")); @@ -833,8 +1027,11 @@ VehicleBody::VehicleBody() : PhysicsBody(PhysicsServer::BODY_MODE_RIGID) { m_currentVehicleSpeedKmHour = real_t(0.); m_steeringValue = real_t(0.); + engine_force=0; + brake=0; + + - mass=1; friction=1; ccd=false; @@ -842,5 +1039,6 @@ VehicleBody::VehicleBody() : PhysicsBody(PhysicsServer::BODY_MODE_RIGID) { exclude.insert(get_rid()); PhysicsServer::get_singleton()->body_set_force_integration_callback(get_rid(),this,"_direct_state_changed"); + set_mass(40); } diff --git a/scene/3d/vehicle_body.h b/scene/3d/vehicle_body.h index 97137da699..285cca142d 100644 --- a/scene/3d/vehicle_body.h +++ b/scene/3d/vehicle_body.h @@ -14,6 +14,8 @@ friend class VehicleBody; Transform m_worldTransform; Transform local_xform; + bool engine_traction; + bool steers; Vector3 m_chassisConnectionPointCS; //const @@ -39,7 +41,7 @@ friend class VehicleBody; real_t m_rotation; real_t m_deltaRotation; real_t m_rollInfluence; - real_t m_engineForce; + //real_t m_engineForce; real_t m_brake; real_t m_clippedInvContactDotSuspension; @@ -69,6 +71,35 @@ protected: public: + void set_radius(float p_radius); + float get_radius() const; + + void set_suspension_rest_length(float p_length); + float get_suspension_rest_length() const; + + void set_suspension_travel(float p_length); + float get_suspension_travel() const; + + void set_suspension_stiffness(float p_value); + float get_suspension_stiffness() const; + + void set_suspension_max_force(float p_value); + float get_suspension_max_force() const; + + void set_damping_compression(float p_value); + float get_damping_compression() const; + + void set_damping_relaxation(float p_value); + float get_damping_relaxation() const; + + void set_friction_slip(float p_value); + float get_friction_slip() const; + + void set_use_as_traction(bool p_enable); + bool is_used_as_traction() const; + + void set_use_as_steering(bool p_enabled); + bool is_used_as_steering() const; VehicleWheel(); @@ -82,6 +113,9 @@ class VehicleBody : public PhysicsBody { real_t mass; real_t friction; + float engine_force; + float brake; + Vector3 linear_velocity; Vector3 angular_velocity; bool ccd; @@ -135,6 +169,15 @@ public: void set_friction(real_t p_friction); real_t get_friction() const; + void set_engine_force(float p_engine_force); + float get_engine_force() const; + + void set_brake(float p_force); + float get_brake() const; + + void set_steering(float p_steering); + float get_steering() const; + VehicleBody(); }; diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index fb85f0c6b7..25f04379ef 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2787,7 +2787,7 @@ int Tree::get_item_offset(TreeItem *p_item) const { ofs+=compute_item_height(it)+cache.vseparation; - if (it->childs) { + if (it->childs && !it->collapsed) { it=it->childs; diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index f7d6a246e6..02fed25883 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -401,6 +401,7 @@ void register_scene_types() { ObjectTypeDB::register_virtual_type(); ObjectTypeDB::register_type(); ObjectTypeDB::register_type(); + ObjectTypeDB::register_type(); ObjectTypeDB::register_type(); ObjectTypeDB::register_type(); ObjectTypeDB::register_type(); diff --git a/servers/audio/sample_manager_sw.cpp b/servers/audio/sample_manager_sw.cpp index 5a5aa1a34c..29564fe018 100644 --- a/servers/audio/sample_manager_sw.cpp +++ b/servers/audio/sample_manager_sw.cpp @@ -139,7 +139,7 @@ void SampleManagerMallocSW::sample_set_data(RID p_sample, const DVector DVector::Read buffer_r=p_buffer.read(); const uint8_t *src = buffer_r.ptr(); uint8_t *dst = (uint8_t*)s->data; - print_line("set data: "+itos(s->length_bytes)); + //print_line("set data: "+itos(s->length_bytes)); for(int i=0;ilength_bytes;i++) { diff --git a/servers/physics/area_sw.h b/servers/physics/area_sw.h index 3e39dc3bb6..569195d2c3 100644 --- a/servers/physics/area_sw.h +++ b/servers/physics/area_sw.h @@ -70,7 +70,7 @@ class AreaSW : public CollisionObjectSW{ return area_shape < p_key.area_shape; } else - return body_shape < p_key.area_shape; + return body_shape < p_key.body_shape; } else return rid < p_key.rid; diff --git a/servers/physics/body_pair_sw.cpp b/servers/physics/body_pair_sw.cpp index c50bfac472..3c838367c2 100644 --- a/servers/physics/body_pair_sw.cpp +++ b/servers/physics/body_pair_sw.cpp @@ -29,7 +29,7 @@ #include "body_pair_sw.h" #include "collision_solver_sw.h" #include "space_sw.h" - +#include "os/os.h" /* #define NO_ACCUMULATE_IMPULSES @@ -174,6 +174,11 @@ void BodyPairSW::validate_contacts() { bool BodyPairSW::setup(float p_step) { + //cannot collide + if (A->has_exception(B->get_self()) || B->has_exception(A->get_self()) || (A->get_mode()<=PhysicsServer::BODY_MODE_KINEMATIC && B->get_mode()<=PhysicsServer::BODY_MODE_KINEMATIC)) { + collided=false; + return false; + } offset_B = B->get_transform().get_origin() - A->get_transform().get_origin(); @@ -197,10 +202,6 @@ bool BodyPairSW::setup(float p_step) { return false; - //cannot collide - if (A->has_exception(B->get_self()) || B->has_exception(A->get_self()) || (A->get_mode()<=PhysicsServer::BODY_MODE_KINEMATIC && B->get_mode()<=PhysicsServer::BODY_MODE_KINEMATIC)) { - return false; - } real_t max_penetration = space->get_contact_max_allowed_penetration(); @@ -217,6 +218,7 @@ bool BodyPairSW::setup(float p_step) { } + real_t inv_dt = 1.0/p_step; for(int i=0;i0?(1.0/mass):0; _set_static(false); - simulated_motion=false; //jic } break; case PhysicsServer::BODY_MODE_CHARACTER: { _inv_mass=mass>0?(1.0/mass):0; _set_static(false); - simulated_motion=false; //jic } break; } @@ -235,13 +233,19 @@ void BodySW::set_state(PhysicsServer::BodyState p_state, const Variant& p_varian case PhysicsServer::BODY_STATE_TRANSFORM: { - if (mode==PhysicsServer::BODY_MODE_STATIC || mode==PhysicsServer::BODY_MODE_KINEMATIC) { + if (mode==PhysicsServer::BODY_MODE_KINEMATIC) { + new_transform=p_variant; + //wakeup_neighbours(); + set_active(true); + + } else if (mode==PhysicsServer::BODY_MODE_STATIC) { _set_transform(p_variant); _set_inv_transform(get_transform().affine_inverse()); wakeup_neighbours(); } else { Transform t = p_variant; t.orthonormalize(); + new_transform=get_transform(); //used as old to compute motion _set_transform(t); _set_inv_transform(get_transform().inverse()); @@ -353,7 +357,7 @@ void BodySW::_compute_area_gravity(const AreaSW *p_area) { void BodySW::integrate_forces(real_t p_step) { - if (mode==PhysicsServer::BODY_MODE_STATIC || mode==PhysicsServer::BODY_MODE_KINEMATIC) + if (mode==PhysicsServer::BODY_MODE_STATIC) return; AreaSW *current_area = get_space()->get_default_area(); @@ -374,28 +378,56 @@ void BodySW::integrate_forces(real_t p_step) { _compute_area_gravity(current_area); density=current_area->get_density(); - if (!omit_force_integration) { - //overriden by direct state query + Vector3 motion; + bool do_motion=false; - Vector3 force=gravity*mass; - force+=applied_force; - Vector3 torque=applied_torque; + if (mode==PhysicsServer::BODY_MODE_KINEMATIC) { - real_t damp = 1.0 - p_step * density; + //compute motion, angular and etc. velocities from prev transform + linear_velocity = (new_transform.origin - get_transform().origin)/p_step; - if (damp<0) // reached zero in the given time - damp=0; + //compute a FAKE angular velocity, not so easy + Matrix3 rot=new_transform.basis.orthonormalized().transposed() * get_transform().basis.orthonormalized(); + Vector3 axis; + float angle; - real_t angular_damp = 1.0 - p_step * density * get_space()->get_body_angular_velocity_damp_ratio(); + rot.get_axis_and_angle(axis,angle); + axis.normalize(); + angular_velocity=axis.normalized() * (angle/p_step); - if (angular_damp<0) // reached zero in the given time - angular_damp=0; + motion = new_transform.origin - get_transform().origin; + do_motion=true; - linear_velocity*=damp; - angular_velocity*=angular_damp; + } else { + if (!omit_force_integration) { + //overriden by direct state query + + Vector3 force=gravity*mass; + force+=applied_force; + Vector3 torque=applied_torque; + + real_t damp = 1.0 - p_step * density; + + if (damp<0) // reached zero in the given time + damp=0; + + real_t angular_damp = 1.0 - p_step * density * get_space()->get_body_angular_velocity_damp_ratio(); + + if (angular_damp<0) // reached zero in the given time + angular_damp=0; + + linear_velocity*=damp; + angular_velocity*=angular_damp; + + linear_velocity+=_inv_mass * force * p_step; + angular_velocity+=_inv_inertia_tensor.xform(torque)*p_step; + } + + if (continuous_cd) { + motion=linear_velocity*p_step; + do_motion=true; + } - linear_velocity+=_inv_mass * force * p_step; - angular_velocity+=_inv_inertia_tensor.xform(torque)*p_step; } applied_force=Vector3(); @@ -406,8 +438,11 @@ void BodySW::integrate_forces(real_t p_step) { biased_angular_velocity=Vector3(); biased_linear_velocity=Vector3(); - if (continuous_cd) //shapes temporarily extend for raycast - _update_shapes_with_motion(linear_velocity*p_step); + + if (do_motion) {//shapes temporarily extend for raycast + _update_shapes_with_motion(motion); + } + current_area=NULL; // clear the area, so it is set in the next frame contact_count=0; @@ -419,9 +454,16 @@ void BodySW::integrate_velocities(real_t p_step) { if (mode==PhysicsServer::BODY_MODE_STATIC) return; + if (fi_callback) + get_space()->body_add_to_state_query_list(&direct_state_query_list); + if (mode==PhysicsServer::BODY_MODE_KINEMATIC) { - if (fi_callback) - get_space()->body_add_to_state_query_list(&direct_state_query_list); + + _set_transform(new_transform,false); + _set_inv_transform(new_transform.affine_inverse()); ; + if (linear_velocity==Vector3() && angular_velocity==Vector3()) + set_active(false); //stopped moving, deactivate + return; } @@ -475,14 +517,13 @@ void BodySW::integrate_velocities(real_t p_step) { _update_inertia_tensor(); - if (fi_callback) { - - get_space()->body_add_to_state_query_list(&direct_state_query_list); - } + //if (fi_callback) { + // get_space()->body_add_to_state_query_list(&direct_state_query_list); + // } - +/* void BodySW::simulate_motion(const Transform& p_xform,real_t p_step) { Transform inv_xform = p_xform.affine_inverse(); @@ -514,6 +555,7 @@ void BodySW::simulate_motion(const Transform& p_xform,real_t p_step) { } +*/ void BodySW::wakeup_neighbours() { @@ -562,12 +604,7 @@ void BodySW::call_queries() { } - if (simulated_motion) { - // linear_velocity=Vector3(); - // angular_velocity=0; - simulated_motion=false; - } } @@ -634,7 +671,7 @@ BodySW::BodySW() : CollisionObjectSW(TYPE_BODY), active_list(this), inertia_upda _set_static(false); density=0; contact_count=0; - simulated_motion=false; + still_time=0; continuous_cd=false; can_sleep=false; diff --git a/servers/physics/body_sw.h b/servers/physics/body_sw.h index 8d30069777..f627c41231 100644 --- a/servers/physics/body_sw.h +++ b/servers/physics/body_sw.h @@ -71,11 +71,12 @@ class BodySW : public CollisionObjectSW { VSet exceptions; bool omit_force_integration; bool active; - bool simulated_motion; + bool continuous_cd; bool can_sleep; void _update_inertia(); virtual void _shapes_changed(); + Transform new_transform; Map constraint_map; @@ -235,7 +236,7 @@ public: void integrate_forces(real_t p_step); void integrate_velocities(real_t p_step); - void simulate_motion(const Transform& p_xform,real_t p_step); + //void simulate_motion(const Transform& p_xform,real_t p_step); void call_queries(); void wakeup_neighbours(); diff --git a/servers/physics/collision_object_sw.cpp b/servers/physics/collision_object_sw.cpp index 156004d15d..f34aa19cae 100644 --- a/servers/physics/collision_object_sw.cpp +++ b/servers/physics/collision_object_sw.cpp @@ -216,4 +216,5 @@ CollisionObjectSW::CollisionObjectSW(Type p_type) { type=p_type; space=NULL; instance_id=0; + layer_mask=1; } diff --git a/servers/physics/collision_object_sw.h b/servers/physics/collision_object_sw.h index 6d60f2f078..558a48f6fd 100644 --- a/servers/physics/collision_object_sw.h +++ b/servers/physics/collision_object_sw.h @@ -47,6 +47,7 @@ private: Type type; RID self; ObjectID instance_id; + uint32_t layer_mask; struct Shape { @@ -71,7 +72,7 @@ protected: void _update_shapes_with_motion(const Vector3& p_motion); void _unregister_shapes(); - _FORCE_INLINE_ void _set_transform(const Transform& p_transform) { transform=p_transform; _update_shapes(); } + _FORCE_INLINE_ void _set_transform(const Transform& p_transform,bool p_update_shapes=true) { transform=p_transform; if (p_update_shapes) _update_shapes(); } _FORCE_INLINE_ void _set_inv_transform(const Transform& p_transform) { inv_transform=p_transform; } void _set_static(bool p_static); @@ -104,6 +105,8 @@ public: _FORCE_INLINE_ SpaceSW* get_space() const { return space; } + _FORCE_INLINE_ void set_layer_mask(uint32_t p_mask) { layer_mask=p_mask; } + _FORCE_INLINE_ uint32_t get_layer_mask() const { return layer_mask; } void remove_shape(ShapeSW *p_shape); void remove_shape(int p_index); diff --git a/servers/physics/collision_solver_sat.cpp b/servers/physics/collision_solver_sat.cpp index 1cd40db772..750874f507 100644 --- a/servers/physics/collision_solver_sat.cpp +++ b/servers/physics/collision_solver_sat.cpp @@ -43,7 +43,9 @@ struct _CollectorCallback { _FORCE_INLINE_ void call(const Vector3& p_point_A, const Vector3& p_point_B) { //if (normal.dot(p_point_A) >= normal.dot(p_point_B)) - // return; + // return; +// print_line("** A: "+p_point_A+" B: "+p_point_B+" D: "+rtos(p_point_A.distance_to(p_point_B))); + if (swap) callback(p_point_B,p_point_A,userdata); else @@ -231,11 +233,14 @@ static void _generate_contacts_face_face(const Vector3 * p_points_A,int p_point_ for (int i=0;iCMP_EPSILON) - continue; + //if (d>CMP_EPSILON) + // continue; Vector3 closest_B=clipbuf_src[i] - plane_B.normal*d; + if (p_callback->normal.dot(clipbuf_src[i]) >= p_callback->normal.dot(closest_B)) + continue; + p_callback->call(clipbuf_src[i],closest_B); added++; @@ -301,7 +306,7 @@ static void _generate_contacts_from_supports(const Vector3 * p_points_A,int p_po -template +template class SeparatorAxisTest { const ShapeA *shape_A; @@ -311,7 +316,8 @@ class SeparatorAxisTest { real_t best_depth; Vector3 best_axis; _CollectorCallback *callback; - + real_t margin_A; + real_t margin_B; Vector3 separator_axis; public: @@ -340,6 +346,13 @@ public: shape_A->project_range(axis,*transform_A,min_A,max_A); shape_B->project_range(axis,*transform_B,min_B,max_B); + if (withMargin) { + min_A-=margin_A; + max_A+=margin_A; + min_B-=margin_B; + max_B+=margin_B; + } + min_B -= ( max_A - min_A ) * 0.5; max_B += ( max_A - min_A ) * 0.5; @@ -394,6 +407,14 @@ public: supports_A[i] = transform_A->xform(supports_A[i]); } + if (withMargin) { + + for(int i=0;ixform(supports_B[i]); } + + if (withMargin) { + + for(int i=0;i +static void _collision_sphere_sphere(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const SphereShapeSW *sphere_A = static_cast(p_a); const SphereShapeSW *sphere_B = static_cast(p_b); - SeparatorAxisTest separator(sphere_A,p_transform_a,sphere_B,p_transform_b,p_collector); + SeparatorAxisTest separator(sphere_A,p_transform_a,sphere_B,p_transform_b,p_collector,p_margin_a,p_margin_b); // previous axis @@ -462,13 +495,14 @@ static void _collision_sphere_sphere(const ShapeSW *p_a,const Transform &p_trans separator.generate_contacts(); } -static void _collision_sphere_box(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_sphere_box(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const SphereShapeSW *sphere_A = static_cast(p_a); const BoxShapeSW *box_B = static_cast(p_b); - SeparatorAxisTest separator(sphere_A,p_transform_a,box_B,p_transform_b,p_collector); + SeparatorAxisTest separator(sphere_A,p_transform_a,box_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -516,13 +550,13 @@ static void _collision_sphere_box(const ShapeSW *p_a,const Transform &p_transfor } - -static void _collision_sphere_capsule(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_sphere_capsule(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const SphereShapeSW *sphere_A = static_cast(p_a); const CapsuleShapeSW *capsule_B = static_cast(p_b); - SeparatorAxisTest separator(sphere_A,p_transform_a,capsule_B,p_transform_b,p_collector); + SeparatorAxisTest separator(sphere_A,p_transform_a,capsule_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -540,7 +574,7 @@ static void _collision_sphere_capsule(const ShapeSW *p_a,const Transform &p_tran Vector3 capsule_ball_2 = p_transform_b.origin - capsule_axis; - if (!separator.test_axis( (capsule_ball_1 - p_transform_a.origin).normalized() ) ) + if (!separator.test_axis( (capsule_ball_2 - p_transform_a.origin).normalized() ) ) return; //capsule edge, sphere @@ -556,13 +590,14 @@ static void _collision_sphere_capsule(const ShapeSW *p_a,const Transform &p_tran separator.generate_contacts(); } -static void _collision_sphere_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_sphere_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const SphereShapeSW *sphere_A = static_cast(p_a); const ConvexPolygonShapeSW *convex_polygon_B = static_cast(p_b); - SeparatorAxisTest separator(sphere_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector); + SeparatorAxisTest separator(sphere_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) @@ -626,14 +661,15 @@ static void _collision_sphere_convex_polygon(const ShapeSW *p_a,const Transform } -static void _collision_sphere_face(const ShapeSW *p_a,const Transform &p_transform_a, const ShapeSW *p_b,const Transform& p_transform_b, _CollectorCallback *p_collector) { +template +static void _collision_sphere_face(const ShapeSW *p_a,const Transform &p_transform_a, const ShapeSW *p_b,const Transform& p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const SphereShapeSW *sphere_A = static_cast(p_a); const FaceShapeSW *face_B = static_cast(p_b); - SeparatorAxisTest separator(sphere_A,p_transform_a,face_B,p_transform_b,p_collector); + SeparatorAxisTest separator(sphere_A,p_transform_a,face_B,p_transform_b,p_collector,p_margin_a,p_margin_b); Vector3 vertex[3]={ @@ -669,16 +705,14 @@ static void _collision_sphere_face(const ShapeSW *p_a,const Transform &p_transfo } - - - -static void _collision_box_box(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_box_box(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const BoxShapeSW *box_A = static_cast(p_a); const BoxShapeSW *box_B = static_cast(p_b); - SeparatorAxisTest separator(box_A,p_transform_a,box_B,p_transform_b,p_collector); + SeparatorAxisTest separator(box_A,p_transform_a,box_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -723,18 +757,69 @@ static void _collision_box_box(const ShapeSW *p_a,const Transform &p_transform_a } } + if (withMargin) { + //add endpoint test between closest vertices and edges + + // calculate closest point to sphere + + Vector3 ab_vec = p_transform_b.origin - p_transform_a.origin; + + Vector3 cnormal_a=p_transform_a.basis.xform_inv( ab_vec ); + + Vector3 support_a=p_transform_a.xform( Vector3( + + (cnormal_a.x<0) ? -box_A->get_half_extents().x : box_A->get_half_extents().x, + (cnormal_a.y<0) ? -box_A->get_half_extents().y : box_A->get_half_extents().y, + (cnormal_a.z<0) ? -box_A->get_half_extents().z : box_A->get_half_extents().z + ) ); + + + Vector3 cnormal_b=p_transform_b.basis.xform_inv( -ab_vec ); + + Vector3 support_b=p_transform_b.xform( Vector3( + + (cnormal_b.x<0) ? -box_B->get_half_extents().x : box_B->get_half_extents().x, + (cnormal_b.y<0) ? -box_B->get_half_extents().y : box_B->get_half_extents().y, + (cnormal_b.z<0) ? -box_B->get_half_extents().z : box_B->get_half_extents().z + ) ); + + Vector3 axis_ab = (support_a-support_b); + + if (!separator.test_axis( axis_ab.normalized() )) { + return; + } + + //now try edges, which become cylinders! + + for(int i=0;i<3;i++) { + + //a ->b + Vector3 axis_a = p_transform_a.basis.get_axis(i); + + if (!separator.test_axis( axis_ab.cross(axis_a).cross(axis_a).normalized() )) + return; + + //b ->a + Vector3 axis_b = p_transform_b.basis.get_axis(i); + + if (!separator.test_axis( axis_ab.cross(axis_b).cross(axis_b).normalized() )) + return; + + } + } + separator.generate_contacts(); } - -static void _collision_box_capsule(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_box_capsule(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const BoxShapeSW *box_A = static_cast(p_a); const CapsuleShapeSW *capsule_B = static_cast(p_b); - SeparatorAxisTest separator(box_A,p_transform_a,capsule_B,p_transform_b,p_collector); + SeparatorAxisTest separator(box_A,p_transform_a,capsule_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -828,15 +913,15 @@ static void _collision_box_capsule(const ShapeSW *p_a,const Transform &p_transfo separator.generate_contacts(); } - -static void _collision_box_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_box_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const BoxShapeSW *box_A = static_cast(p_a); const ConvexPolygonShapeSW *convex_polygon_B = static_cast(p_b); - SeparatorAxisTest separator(box_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector); + SeparatorAxisTest separator(box_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -886,18 +971,84 @@ static void _collision_box_convex_polygon(const ShapeSW *p_a,const Transform &p_ } } + if (withMargin) { + + // calculate closest points between vertices and box edges + for(int v=0;vget_half_extents().x : box_A->get_half_extents().x, + (cnormal_a.y<0) ? -box_A->get_half_extents().y : box_A->get_half_extents().y, + (cnormal_a.z<0) ? -box_A->get_half_extents().z : box_A->get_half_extents().z + ) ); + + + Vector3 axis_ab = support_a-vtxb; + + if (!separator.test_axis( axis_ab.normalized() )) { + return; + } + + //now try edges, which become cylinders! + + for(int i=0;i<3;i++) { + + //a ->b + Vector3 axis_a = p_transform_a.basis.get_axis(i); + + if (!separator.test_axis( axis_ab.cross(axis_a).cross(axis_a).normalized() )) + return; + } + } + + //convex edges and box points + for (int i=0;i<2;i++) { + for (int j=0;j<2;j++) { + for (int k=0;k<2;k++) { + Vector3 he = box_A->get_half_extents(); + he.x*=(i*2-1); + he.y*=(j*2-1); + he.z*=(k*2-1); + Vector3 point=p_transform_a.origin; + for(int l=0;l<3;l++) + point+=p_transform_a.basis.get_axis(l)*he[l]; + + for(int e=0;e +static void _collision_box_face(const ShapeSW *p_a,const Transform &p_transform_a, const ShapeSW *p_b,const Transform& p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const BoxShapeSW *box_A = static_cast(p_a); const FaceShapeSW *face_B = static_cast(p_b); - SeparatorAxisTest separator(box_A,p_transform_a,face_B,p_transform_b,p_collector); + SeparatorAxisTest separator(box_A,p_transform_a,face_B,p_transform_b,p_collector,p_margin_a,p_margin_b); Vector3 vertex[3]={ p_transform_b.xform( face_B->vertex[0] ), @@ -918,13 +1069,14 @@ static void _collision_box_face(const ShapeSW *p_a,const Transform &p_transform_ } // combined edges + for(int i=0;i<3;i++) { Vector3 e=vertex[i]-vertex[(i+1)%3]; - for (int i=0;i<3;i++) { + for (int j=0;j<3;j++) { - Vector3 axis = p_transform_a.basis.get_axis(i); + Vector3 axis = p_transform_a.basis.get_axis(j); if (!separator.test_axis( e.cross(axis).normalized() )) return; @@ -932,16 +1084,82 @@ static void _collision_box_face(const ShapeSW *p_a,const Transform &p_transform_ } + if (withMargin) { + + // calculate closest points between vertices and box edges + for(int v=0;v<3;v++) { + + + Vector3 ab_vec = vertex[v] - p_transform_a.origin; + + Vector3 cnormal_a=p_transform_a.basis.xform_inv( ab_vec ); + + Vector3 support_a=p_transform_a.xform( Vector3( + + (cnormal_a.x<0) ? -box_A->get_half_extents().x : box_A->get_half_extents().x, + (cnormal_a.y<0) ? -box_A->get_half_extents().y : box_A->get_half_extents().y, + (cnormal_a.z<0) ? -box_A->get_half_extents().z : box_A->get_half_extents().z + ) ); + + + Vector3 axis_ab = support_a-vertex[v]; + + if (!separator.test_axis( axis_ab.normalized() )) { + return; + } + + //now try edges, which become cylinders! + + for(int i=0;i<3;i++) { + + //a ->b + Vector3 axis_a = p_transform_a.basis.get_axis(i); + + if (!separator.test_axis( axis_ab.cross(axis_a).cross(axis_a).normalized() )) + return; + } + } + + //convex edges and box points, there has to be a way to speed up this (get closest point?) + for (int i=0;i<2;i++) { + for (int j=0;j<2;j++) { + for (int k=0;k<2;k++) { + Vector3 he = box_A->get_half_extents(); + he.x*=(i*2-1); + he.y*=(j*2-1); + he.z*=(k*2-1); + Vector3 point=p_transform_a.origin; + for(int l=0;l<3;l++) + point+=p_transform_a.basis.get_axis(l)*he[l]; + + for(int e=0;e<3;e++) { + + Vector3 p1=vertex[e]; + Vector3 p2=vertex[(e+1)%3]; + + Vector3 n = (p2-p1); + + if (!separator.test_axis( (point-p2).cross(n).cross(n).normalized() )) + return; + } + } + } + } + + } + separator.generate_contacts(); } -static void _collision_capsule_capsule(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { + +template +static void _collision_capsule_capsule(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const CapsuleShapeSW *capsule_A = static_cast(p_a); const CapsuleShapeSW *capsule_B = static_cast(p_b); - SeparatorAxisTest separator(capsule_A,p_transform_a,capsule_B,p_transform_b,p_collector); + SeparatorAxisTest separator(capsule_A,p_transform_a,capsule_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -993,13 +1211,14 @@ static void _collision_capsule_capsule(const ShapeSW *p_a,const Transform &p_tra } -static void _collision_capsule_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_capsule_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const CapsuleShapeSW *capsule_A = static_cast(p_a); const ConvexPolygonShapeSW *convex_polygon_B = static_cast(p_b); - SeparatorAxisTest separator(capsule_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector); + SeparatorAxisTest separator(capsule_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -1063,12 +1282,14 @@ static void _collision_capsule_convex_polygon(const ShapeSW *p_a,const Transform } -static void _collision_capsule_face(const ShapeSW *p_a,const Transform &p_transform_a, const ShapeSW *p_b,const Transform& p_transform_b, _CollectorCallback *p_collector) { + +template +static void _collision_capsule_face(const ShapeSW *p_a,const Transform &p_transform_a, const ShapeSW *p_b,const Transform& p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const CapsuleShapeSW *capsule_A = static_cast(p_a); const FaceShapeSW *face_B = static_cast(p_b); - SeparatorAxisTest separator(capsule_A,p_transform_a,face_B,p_transform_b,p_collector); + SeparatorAxisTest separator(capsule_A,p_transform_a,face_B,p_transform_b,p_collector,p_margin_a,p_margin_b); @@ -1125,13 +1346,14 @@ static void _collision_capsule_face(const ShapeSW *p_a,const Transform &p_transf } -static void _collision_convex_polygon_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector) { +template +static void _collision_convex_polygon_convex_polygon(const ShapeSW *p_a,const Transform &p_transform_a,const ShapeSW *p_b,const Transform &p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const ConvexPolygonShapeSW *convex_polygon_A = static_cast(p_a); const ConvexPolygonShapeSW *convex_polygon_B = static_cast(p_b); - SeparatorAxisTest separator(convex_polygon_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector); + SeparatorAxisTest separator(convex_polygon_A,p_transform_a,convex_polygon_B,p_transform_b,p_collector,p_margin_a,p_margin_b); if (!separator.test_previous_axis()) return; @@ -1192,17 +1414,70 @@ static void _collision_convex_polygon_convex_polygon(const ShapeSW *p_a,const Tr } } + if (withMargin) { + + //vertex-vertex + for(int i=0;i +static void _collision_convex_polygon_face(const ShapeSW *p_a,const Transform &p_transform_a, const ShapeSW *p_b,const Transform& p_transform_b,_CollectorCallback *p_collector,float p_margin_a,float p_margin_b) { const ConvexPolygonShapeSW *convex_polygon_A = static_cast(p_a); const FaceShapeSW *face_B = static_cast(p_b); - SeparatorAxisTest separator(convex_polygon_A,p_transform_a,face_B,p_transform_b,p_collector); + SeparatorAxisTest separator(convex_polygon_A,p_transform_a,face_B,p_transform_b,p_collector,p_margin_a,p_margin_b); const Geometry::MeshData &mesh = convex_polygon_A->get_mesh(); @@ -1252,12 +1527,62 @@ static void _collision_convex_polygon_face(const ShapeSW *p_a,const Transform &p } } + + if (withMargin) { + + //vertex-vertex + for(int i=0;iget_type(); @@ -1273,26 +1598,54 @@ bool sat_calculate_penetration(const ShapeSW *p_shape_A, const Transform& p_tran static const CollisionFunc collision_table[5][5]={ - {_collision_sphere_sphere, - _collision_sphere_box, - _collision_sphere_capsule, - _collision_sphere_convex_polygon, - _collision_sphere_face}, + {_collision_sphere_sphere, + _collision_sphere_box, + _collision_sphere_capsule, + _collision_sphere_convex_polygon, + _collision_sphere_face}, {0, - _collision_box_box, - _collision_box_capsule, - _collision_box_convex_polygon, - _collision_box_face}, + _collision_box_box, + _collision_box_capsule, + _collision_box_convex_polygon, + _collision_box_face}, {0, 0, - _collision_capsule_capsule, - _collision_capsule_convex_polygon, - _collision_capsule_face}, + _collision_capsule_capsule, + _collision_capsule_convex_polygon, + _collision_capsule_face}, {0, 0, 0, - _collision_convex_polygon_convex_polygon, - _collision_convex_polygon_face}, + _collision_convex_polygon_convex_polygon, + _collision_convex_polygon_face}, + {0, + 0, + 0, + 0, + 0}, + }; + + static const CollisionFunc collision_table_margin[5][5]={ + {_collision_sphere_sphere, + _collision_sphere_box, + _collision_sphere_capsule, + _collision_sphere_convex_polygon, + _collision_sphere_face}, + {0, + _collision_box_box, + _collision_box_capsule, + _collision_box_convex_polygon, + _collision_box_face}, + {0, + 0, + _collision_capsule_capsule, + _collision_capsule_convex_polygon, + _collision_capsule_face}, + {0, + 0, + 0, + _collision_convex_polygon_convex_polygon, + _collision_convex_polygon_face}, {0, 0, 0, @@ -1311,20 +1664,30 @@ bool sat_calculate_penetration(const ShapeSW *p_shape_A, const Transform& p_tran const ShapeSW *B=p_shape_B; const Transform *transform_A=&p_transform_A; const Transform *transform_B=&p_transform_B; + float margin_A=p_margin_a; + float margin_B=p_margin_b; if (type_A > type_B) { SWAP(A,B); SWAP(transform_A,transform_B); SWAP(type_A,type_B); + SWAP(margin_A,margin_B); callback.swap = !callback.swap; } - CollisionFunc collision_func = collision_table[type_A-2][type_B-2]; + CollisionFunc collision_func; + if (margin_A!=0.0 || margin_B!=0.0) { + collision_func = collision_table_margin[type_A-2][type_B-2]; + + } else { + collision_func = collision_table[type_A-2][type_B-2]; + + } ERR_FAIL_COND_V(!collision_func,false); - collision_func(A,*transform_A,B,*transform_B,&callback); + collision_func(A,*transform_A,B,*transform_B,&callback,margin_A,margin_B); return callback.collided; diff --git a/servers/physics/collision_solver_sat.h b/servers/physics/collision_solver_sat.h index 5023a17810..eeba53f160 100644 --- a/servers/physics/collision_solver_sat.h +++ b/servers/physics/collision_solver_sat.h @@ -32,6 +32,6 @@ #include "collision_solver_sw.h" -bool sat_calculate_penetration(const ShapeSW *p_shape_A, const Transform& p_transform_A, const ShapeSW *p_shape_B, const Transform& p_transform_B, CollisionSolverSW::CallbackResult p_result_callback,void *p_userdata, bool p_swap=false,Vector3* r_prev_axis=NULL); +bool sat_calculate_penetration(const ShapeSW *p_shape_A, const Transform& p_transform_A, const ShapeSW *p_shape_B, const Transform& p_transform_B, CollisionSolverSW::CallbackResult p_result_callback,void *p_userdata, bool p_swap=false,Vector3* r_prev_axis=NULL,float p_margin_a=0,float p_margin_b=0); #endif // COLLISION_SOLVER_SAT_H diff --git a/servers/physics/collision_solver_sw.cpp b/servers/physics/collision_solver_sw.cpp index da28a4934f..673f2d4385 100644 --- a/servers/physics/collision_solver_sw.cpp +++ b/servers/physics/collision_solver_sw.cpp @@ -114,6 +114,10 @@ struct _ConcaveCollisionInfo { bool collided; int aabb_tests; int collisions; + bool tested; + float margin_A; + float margin_B; + Vector3 close_A,close_B; }; @@ -123,7 +127,7 @@ void CollisionSolverSW::concave_callback(void *p_userdata, ShapeSW *p_convex) { _ConcaveCollisionInfo &cinfo = *(_ConcaveCollisionInfo*)(p_userdata); cinfo.aabb_tests++; - bool collided = collision_solver(cinfo.shape_A, *cinfo.transform_A, p_convex,*cinfo.transform_B, cinfo.result_callback, cinfo.userdata, cinfo.swap_result ); + bool collided = collision_solver(cinfo.shape_A, *cinfo.transform_A, p_convex,*cinfo.transform_B, cinfo.result_callback, cinfo.userdata, cinfo.swap_result,NULL,cinfo.margin_A,cinfo.margin_B); if (!collided) return; @@ -132,7 +136,7 @@ void CollisionSolverSW::concave_callback(void *p_userdata, ShapeSW *p_convex) { } -bool CollisionSolverSW::solve_concave(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,bool p_swap_result) { +bool CollisionSolverSW::solve_concave(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,bool p_swap_result,float p_margin_A,float p_margin_B) { const ConcaveShapeSW *concave_B=static_cast(p_shape_B); @@ -146,6 +150,8 @@ bool CollisionSolverSW::solve_concave(const ShapeSW *p_shape_A,const Transform& cinfo.swap_result=p_swap_result; cinfo.collided=false; cinfo.collisions=0; + cinfo.margin_A=p_margin_A; + cinfo.margin_B=p_margin_B; cinfo.aabb_tests=0; @@ -163,21 +169,23 @@ bool CollisionSolverSW::solve_concave(const ShapeSW *p_shape_A,const Transform& float smin,smax; p_shape_A->project_range(axis,rel_transform,smin,smax); + smin-=p_margin_A; + smax+=p_margin_A; smin*=axis_scale; smax*=axis_scale; + local_aabb.pos[i]=smin; local_aabb.size[i]=smax-smin; } concave_B->cull(local_aabb,concave_callback,&cinfo); - return cinfo.collided; } -bool CollisionSolverSW::solve_static(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,Vector3 *r_sep_axis) { +bool CollisionSolverSW::solve_static(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,Vector3 *r_sep_axis,float p_margin_A,float p_margin_B) { PhysicsServer::ShapeType type_A=p_shape_A->get_type(); @@ -225,17 +233,126 @@ bool CollisionSolverSW::solve_static(const ShapeSW *p_shape_A,const Transform& p return false; if (!swap) - return solve_concave(p_shape_A,p_transform_A,p_shape_B,p_transform_B,p_result_callback,p_userdata,false); + return solve_concave(p_shape_A,p_transform_A,p_shape_B,p_transform_B,p_result_callback,p_userdata,false,p_margin_A,p_margin_B); else - return solve_concave(p_shape_B,p_transform_B,p_shape_A,p_transform_A,p_result_callback,p_userdata,true); + return solve_concave(p_shape_B,p_transform_B,p_shape_A,p_transform_A,p_result_callback,p_userdata,true,p_margin_A,p_margin_B); } else { - return collision_solver(p_shape_A, p_transform_A, p_shape_B, p_transform_B, p_result_callback,p_userdata,false,r_sep_axis); + return collision_solver(p_shape_A, p_transform_A, p_shape_B, p_transform_B, p_result_callback,p_userdata,false,r_sep_axis,p_margin_A,p_margin_B); } return false; } + + +void CollisionSolverSW::concave_distance_callback(void *p_userdata, ShapeSW *p_convex) { + + + _ConcaveCollisionInfo &cinfo = *(_ConcaveCollisionInfo*)(p_userdata); + cinfo.aabb_tests++; + if (cinfo.collided) + return; + + Vector3 close_A,close_B; + cinfo.collided = !gjk_epa_calculate_distance(cinfo.shape_A,*cinfo.transform_A,p_convex,*cinfo.transform_B,close_A,close_B); + + if (cinfo.collided) + return; + if (!cinfo.tested || close_A.distance_squared_to(close_B) < cinfo.close_A.distance_squared_to(cinfo.close_B)) { + + cinfo.close_A=close_A; + cinfo.close_B=close_B; + cinfo.tested=true; + } + + cinfo.collisions++; + +} + + +bool CollisionSolverSW::solve_distance(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,Vector3& r_point_A,Vector3& r_point_B,const AABB& p_concave_hint,Vector3 *r_sep_axis) { + + if (p_shape_A->is_concave()) + return false; + + if (p_shape_B->get_type()==PhysicsServer::SHAPE_PLANE) { + + return false; //unsupported + + } else if (p_shape_B->is_concave()) { + + if (p_shape_A->is_concave()) + return false; + + + const ConcaveShapeSW *concave_B=static_cast(p_shape_B); + + _ConcaveCollisionInfo cinfo; + cinfo.transform_A=&p_transform_A; + cinfo.shape_A=p_shape_A; + cinfo.transform_B=&p_transform_B; + cinfo.result_callback=NULL; + cinfo.userdata=NULL; + cinfo.swap_result=false; + cinfo.collided=false; + cinfo.collisions=0; + cinfo.aabb_tests=0; + cinfo.tested=false; + + Transform rel_transform = p_transform_A; + rel_transform.origin-=p_transform_B.origin; + + //quickly compute a local AABB + + bool use_cc_hint=p_concave_hint!=AABB(); + AABB cc_hint_aabb; + if (use_cc_hint) { + cc_hint_aabb=p_concave_hint; + cc_hint_aabb.pos-=p_transform_B.origin; + } + + AABB local_aabb; + for(int i=0;i<3;i++) { + + Vector3 axis( p_transform_B.basis.get_axis(i) ); + float axis_scale = 1.0/axis.length(); + axis*=axis_scale; + + float smin,smax; + + if (use_cc_hint) { + cc_hint_aabb.project_range_in_plane(Plane(axis,0),smin,smax); + } else { + p_shape_A->project_range(axis,rel_transform,smin,smax); + } + + smin*=axis_scale; + smax*=axis_scale; + + local_aabb.pos[i]=smin; + local_aabb.size[i]=smax-smin; + } + + + concave_B->cull(local_aabb,concave_distance_callback,&cinfo); + if (!cinfo.collided) { +// print_line(itos(cinfo.tested)); + r_point_A=cinfo.close_A; + r_point_B=cinfo.close_B; + + } + + return !cinfo.collided; + } else { + + return gjk_epa_calculate_distance(p_shape_A,p_transform_A,p_shape_B,p_transform_B,r_point_A,r_point_B); //should pass sepaxis.. + } + + + return false; +} + diff --git a/servers/physics/collision_solver_sw.h b/servers/physics/collision_solver_sw.h index e135ab92e0..430f057c7c 100644 --- a/servers/physics/collision_solver_sw.h +++ b/servers/physics/collision_solver_sw.h @@ -40,12 +40,14 @@ private: static void concave_callback(void *p_userdata, ShapeSW *p_convex); static bool solve_static_plane(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,bool p_swap_result); static bool solve_ray(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,bool p_swap_result); - static bool solve_concave(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,bool p_swap_result); + static bool solve_concave(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,bool p_swap_result,float p_margin_A=0,float p_margin_B=0); + static void concave_distance_callback(void *p_userdata, ShapeSW *p_convex); public: - static bool solve_static(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,Vector3 *r_sep_axis=NULL); + static bool solve_static(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,CallbackResult p_result_callback,void *p_userdata,Vector3 *r_sep_axis=NULL,float p_margin_A=0,float p_margin_B=0); + static bool solve_distance(const ShapeSW *p_shape_A,const Transform& p_transform_A,const ShapeSW *p_shape_B,const Transform& p_transform_B,Vector3& r_point_A,Vector3& r_point_B,const AABB& p_concave_hint,Vector3 *r_sep_axis=NULL); }; diff --git a/servers/physics/gjk_epa.cpp b/servers/physics/gjk_epa.cpp index 37edc0d414..9b5b3d4f67 100644 --- a/servers/physics/gjk_epa.cpp +++ b/servers/physics/gjk_epa.cpp @@ -1,31 +1,14 @@ -/*************************************************************************/ -/* gjk_epa.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ +/*************************************************/ +/* gjk_epa.cpp */ +/*************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/*************************************************/ +/* Source code within this file is: */ +/* (c) 2007-2010 Juan Linietsky, Ariel Manzur */ +/* All Rights Reserved. */ +/*************************************************/ + #include "gjk_epa.h" /*************** Bullet's GJK-EPA2 IMPLEMENTATION *******************/ @@ -798,8 +781,8 @@ bool Distance( const ShapeSW* shape0, w0+=shape.Support( gjk.m_simplex->c[i]->d,0)*p; w1+=shape.Support(-gjk.m_simplex->c[i]->d,1)*p; } - results.witnesses[0] = wtrs0.xform(w0); - results.witnesses[1] = wtrs0.xform(w1); + results.witnesses[0] = w0; + results.witnesses[1] = w1; results.normal = w0-w1; results.distance = results.normal.length(); results.normal /= results.distance>GJK_MIN_DISTANCE?results.distance:1; @@ -881,6 +864,24 @@ bool Penetration( const ShapeSW* shape0, + + +bool gjk_epa_calculate_distance(const ShapeSW *p_shape_A, const Transform& p_transform_A, const ShapeSW *p_shape_B, const Transform& p_transform_B, Vector3& r_result_A, Vector3& r_result_B) { + + + GjkEpa2::sResults res; + + if (GjkEpa2::Distance(p_shape_A,p_transform_A,p_shape_B,p_transform_B,p_transform_B.origin-p_transform_A.origin,res)) { + + r_result_A=res.witnesses[0]; + r_result_B=res.witnesses[1]; + return true; + } + + return false; + +} + bool gjk_epa_calculate_penetration(const ShapeSW *p_shape_A, const Transform& p_transform_A, const ShapeSW *p_shape_B, const Transform& p_transform_B, CollisionSolverSW::CallbackResult p_result_callback,void *p_userdata, bool p_swap ) { GjkEpa2::sResults res; diff --git a/servers/physics/gjk_epa.h b/servers/physics/gjk_epa.h index 0303478f17..08b0a65b15 100644 --- a/servers/physics/gjk_epa.h +++ b/servers/physics/gjk_epa.h @@ -1,31 +1,14 @@ -/*************************************************************************/ -/* gjk_epa.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ +/*************************************************/ +/* gjk_epa.h */ +/*************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/*************************************************/ +/* Source code within this file is: */ +/* (c) 2007-2010 Juan Linietsky, Ariel Manzur */ +/* All Rights Reserved. */ +/*************************************************/ + #ifndef GJK_EPA_H #define GJK_EPA_H @@ -36,5 +19,6 @@ #include "collision_solver_sw.h" bool gjk_epa_calculate_penetration(const ShapeSW *p_shape_A, const Transform& p_transform_A, const ShapeSW *p_shape_B, const Transform& p_transform_B, CollisionSolverSW::CallbackResult p_result_callback,void *p_userdata, bool p_swap=false); +bool gjk_epa_calculate_distance(const ShapeSW *p_shape_A, const Transform& p_transform_A, const ShapeSW *p_shape_B, const Transform& p_transform_B, Vector3& r_result_A, Vector3& r_result_B); #endif diff --git a/servers/physics/physics_server_sw.cpp b/servers/physics/physics_server_sw.cpp index aff60b5881..a30383a88d 100644 --- a/servers/physics/physics_server_sw.cpp +++ b/servers/physics/physics_server_sw.cpp @@ -568,6 +568,25 @@ bool PhysicsServerSW::body_is_continuous_collision_detection_enabled(RID p_body) return body->is_continuous_collision_detection_enabled(); } +void PhysicsServerSW::body_set_layer_mask(RID p_body, uint32_t p_mask) { + + BodySW *body = body_owner.get(p_body); + ERR_FAIL_COND(!body); + + body->set_layer_mask(p_mask); + +} + +uint32_t PhysicsServerSW::body_get_layer_mask(RID p_body, uint32_t p_mask) const{ + + const BodySW *body = body_owner.get(p_body); + ERR_FAIL_COND_V(!body,0); + + return body->get_layer_mask(); + +} + + void PhysicsServerSW::body_attach_object_instance_ID(RID p_body,uint32_t p_ID) { BodySW *body = body_owner.get(p_body); @@ -618,13 +637,6 @@ float PhysicsServerSW::body_get_param(RID p_body, BodyParameter p_param) const { }; -void PhysicsServerSW::body_static_simulate_motion(RID p_body,const Transform& p_new_transform) { - - BodySW *body = body_owner.get(p_body); - ERR_FAIL_COND(!body); - body->simulate_motion(p_new_transform,last_step); - -}; void PhysicsServerSW::body_set_state(RID p_body, BodyState p_state, const Variant& p_variant) { @@ -1021,11 +1033,18 @@ void PhysicsServerSW::step(float p_step) { last_step=p_step; PhysicsDirectBodyStateSW::singleton->step=p_step; + island_count=0; + active_objects=0; + collision_pairs=0; for( Set::Element *E=active_spaces.front();E;E=E->next()) { stepper->step((SpaceSW*)E->get(),p_step,iterations); + island_count+=E->get()->get_island_count(); + active_objects+=E->get()->get_active_objects(); + collision_pairs+=E->get()->get_collision_pairs(); } -}; + +} void PhysicsServerSW::sync() { @@ -1054,9 +1073,72 @@ void PhysicsServerSW::finish() { }; +int PhysicsServerSW::get_process_info(ProcessInfo p_info) { + + switch(p_info) { + + case INFO_ACTIVE_OBJECTS: { + + return active_objects; + } break; + case INFO_COLLISION_PAIRS: { + return collision_pairs; + } break; + case INFO_ISLAND_COUNT: { + + return island_count; + } break; + + } + + return 0; +} + + +void PhysicsServerSW::_shape_col_cbk(const Vector3& p_point_A,const Vector3& p_point_B,void *p_userdata) { + + + CollCbkData *cbk=(CollCbkData *)p_userdata; + + if (cbk->max==0) + return; + + if (cbk->amount == cbk->max) { + //find least deep + float min_depth=1e20; + int min_depth_idx=0; + for(int i=0;iamount;i++) { + + float d = cbk->ptr[i*2+0].distance_squared_to(cbk->ptr[i*2+1]); + if (dptr[min_depth_idx*2+0]=p_point_A; + cbk->ptr[min_depth_idx*2+1]=p_point_B; + + + } else { + + cbk->ptr[cbk->amount*2+0]=p_point_A; + cbk->ptr[cbk->amount*2+1]=p_point_B; + cbk->amount++; + } +} + + PhysicsServerSW::PhysicsServerSW() { BroadPhaseSW::create_func=BroadPhaseOctree::_create; + island_count=0; + active_objects=0; + collision_pairs=0; active=true; diff --git a/servers/physics/physics_server_sw.h b/servers/physics/physics_server_sw.h index 0822d76936..185867e817 100644 --- a/servers/physics/physics_server_sw.h +++ b/servers/physics/physics_server_sw.h @@ -47,6 +47,10 @@ friend class PhysicsDirectSpaceStateSW; bool doing_sync; real_t last_step; + int island_count; + int active_objects; + int collision_pairs; + StepSW *stepper; Set active_spaces; @@ -61,6 +65,15 @@ friend class PhysicsDirectSpaceStateSW; // void _clear_query(QuerySW *p_query); public: + struct CollCbkData { + + int max; + int amount; + Vector3 *ptr; + }; + + static void _shape_col_cbk(const Vector3& p_point_A,const Vector3& p_point_B,void *p_userdata); + virtual RID shape_create(ShapeType p_shape); virtual void shape_set_data(RID p_shape, const Variant& p_data); virtual void shape_set_custom_solver_bias(RID p_shape, real_t p_bias); @@ -146,15 +159,15 @@ public: virtual void body_set_enable_continuous_collision_detection(RID p_body,bool p_enable); virtual bool body_is_continuous_collision_detection_enabled(RID p_body) const; + virtual void body_set_layer_mask(RID p_body, uint32_t p_mask); + virtual uint32_t body_get_layer_mask(RID p_body, uint32_t p_mask) const; + virtual void body_set_user_flags(RID p_body, uint32_t p_flags); virtual uint32_t body_get_user_flags(RID p_body, uint32_t p_flags) const; virtual void body_set_param(RID p_body, BodyParameter p_param, float p_value); virtual float body_get_param(RID p_body, BodyParameter p_param) const; - //advanced simulation - virtual void body_static_simulate_motion(RID p_body,const Transform& p_new_transform); - virtual void body_set_state(RID p_body, BodyState p_state, const Variant& p_variant); virtual Variant body_get_state(RID p_body, BodyState p_state) const; @@ -209,6 +222,8 @@ public: virtual void flush_queries(); virtual void finish(); + int get_process_info(ProcessInfo p_info); + PhysicsServerSW(); ~PhysicsServerSW(); diff --git a/servers/physics/shape_sw.cpp b/servers/physics/shape_sw.cpp index 1312b7da95..bd4be05bb9 100644 --- a/servers/physics/shape_sw.cpp +++ b/servers/physics/shape_sw.cpp @@ -928,8 +928,8 @@ void FaceShapeSW::get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supp for (int i=0;i<3;i++) { int nx=(i+1)%3; - //if (i!=vert_support_idx && nx!=vert_support_idx) - // continue; + if (i!=vert_support_idx && nx!=vert_support_idx) + continue; // check if edge is valid as a support float dot=(vertex[i]-vertex[nx]).normalized().dot(n); @@ -951,8 +951,12 @@ bool FaceShapeSW::intersect_segment(const Vector3& p_begin,const Vector3& p_end, bool c=Geometry::segment_intersects_triangle(p_begin,p_end,vertex[0],vertex[1],vertex[2],&r_result); - if (c) + if (c) { r_normal=Plane(vertex[0],vertex[1],vertex[2]).normal; + if (r_normal.dot(p_end-p_begin)>0) { + r_normal=-r_normal; + } + } return c; } @@ -1070,13 +1074,15 @@ void ConcavePolygonShapeSW::_cull_segment(int p_idx,_SegmentCullParams *p_params &res)) { - float d=p_params->normal.dot(res) - p_params->normal.dot(p_params->from); + float d=p_params->dir.dot(res) - p_params->dir.dot(p_params->from); //TODO, seems segmen/triangle intersection is broken :( if (d>0 && dmin_d) { p_params->min_d=d; p_params->result=res; p_params->normal=Plane(vertices[0],vertices[1],vertices[2]).normal; + if (p_params->normal.dot(p_params->dir)>0) + p_params->normal=-p_params->normal; p_params->collisions++; } @@ -1107,7 +1113,7 @@ bool ConcavePolygonShapeSW::intersect_segment(const Vector3& p_begin,const Vecto params.from=p_begin; params.to=p_end; params.collisions=0; - params.normal=(p_end-p_begin).normalized(); + params.dir=(p_end-p_begin).normalized(); params.faces=fr.ptr(); params.vertices=vr.ptr(); diff --git a/servers/physics/shape_sw.h b/servers/physics/shape_sw.h index 890d6d8741..cdb21556b8 100644 --- a/servers/physics/shape_sw.h +++ b/servers/physics/shape_sw.h @@ -26,405 +26,446 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef SHAPE_SW_H -#define SHAPE_SW_H - -#include "servers/physics_server.h" -#include "bsp_tree.h" -#include "geometry.h" -/* - -SHAPE_LINE, ///< plane:"plane" -SHAPE_SEGMENT, ///< float:"length" -SHAPE_CIRCLE, ///< float:"radius" -SHAPE_RECTANGLE, ///< vec3:"extents" -SHAPE_CONVEX_POLYGON, ///< array of planes:"planes" -SHAPE_CONCAVE_POLYGON, ///< Vector3 array:"triangles" , or Dictionary with "indices" (int array) and "triangles" (Vector3 array) -SHAPE_CUSTOM, ///< Server-Implementation based custom shape, calling shape_create() with this value will result in an error - -*/ - -class ShapeSW; - -class ShapeOwnerSW { -public: - - virtual void _shape_changed()=0; - virtual void remove_shape(ShapeSW *p_shape)=0; - - virtual ~ShapeOwnerSW() {} -}; - - -class ShapeSW { - - RID self; - AABB aabb; - bool configured; - real_t custom_bias; - - Map owners; -protected: - - void configure(const AABB& p_aabb); -public: - - enum { - MAX_SUPPORTS=8 - }; - - _FORCE_INLINE_ void set_self(const RID& p_self) { self=p_self; } - _FORCE_INLINE_ RID get_self() const {return self; } - - virtual PhysicsServer::ShapeType get_type() const=0; - - _FORCE_INLINE_ AABB get_aabb() const { return aabb; } - _FORCE_INLINE_ bool is_configured() const { return configured; } - - virtual bool is_concave() const { return false; } - - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const=0; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const=0; - - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_point, Vector3 &r_normal) const=0; - virtual Vector3 get_moment_of_inertia(float p_mass) const=0; - - virtual void set_data(const Variant& p_data)=0; - virtual Variant get_data() const=0; - - _FORCE_INLINE_ void set_custom_bias(real_t p_bias) { custom_bias=p_bias; } - _FORCE_INLINE_ real_t get_custom_bias() const { return custom_bias; } - - void add_owner(ShapeOwnerSW *p_owner); - void remove_owner(ShapeOwnerSW *p_owner); - bool is_owner(ShapeOwnerSW *p_owner) const; - const Map& get_owners() const; - - ShapeSW(); - virtual ~ShapeSW(); -}; - - -class ConcaveShapeSW : public ShapeSW { - -public: - - virtual bool is_concave() const { return true; } - typedef void (*Callback)(void* p_userdata,ShapeSW *p_convex); - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const { r_amount=0; } - - virtual void cull(const AABB& p_local_aabb,Callback p_callback,void* p_userdata) const=0; - - ConcaveShapeSW() {} -}; - -class PlaneShapeSW : public ShapeSW { - - Plane plane; - - void _setup(const Plane& p_plane); -public: - - Plane get_plane() const; - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_PLANE; } - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const { r_amount=0; } - - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - PlaneShapeSW(); -}; - -class RayShapeSW : public ShapeSW { - - float length; - - void _setup(float p_length); -public: - - float get_length() const; - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_RAY; } - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; - - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - RayShapeSW(); -}; - -class SphereShapeSW : public ShapeSW { - - real_t radius; - - void _setup(real_t p_radius); -public: - - real_t get_radius() const; - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_SPHERE; } - - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - SphereShapeSW(); -}; - -class BoxShapeSW : public ShapeSW { - - Vector3 half_extents; - void _setup(const Vector3& p_half_extents); -public: - - _FORCE_INLINE_ Vector3 get_half_extents() const { return half_extents; } - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_BOX; } - - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - BoxShapeSW(); -}; - -class CapsuleShapeSW : public ShapeSW { - - real_t height; - real_t radius; - - - void _setup(real_t p_height,real_t p_radius); -public: - - _FORCE_INLINE_ real_t get_height() const { return height; } - _FORCE_INLINE_ real_t get_radius() const { return radius; } - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CAPSULE; } - - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - CapsuleShapeSW(); -}; - -struct ConvexPolygonShapeSW : public ShapeSW { - - Geometry::MeshData mesh; - - void _setup(const Vector& p_vertices); -public: - - const Geometry::MeshData& get_mesh() const { return mesh; } - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CONVEX_POLYGON; } - - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - ConvexPolygonShapeSW(); - -}; - - -struct _VolumeSW_BVH; -struct FaceShapeSW; - -struct ConcavePolygonShapeSW : public ConcaveShapeSW { - // always a trimesh - - struct Face { - - Vector3 normal; - int indices[3]; - }; - - DVector faces; - DVector vertices; - - struct BVH { - - AABB aabb; - int left; - int right; - - int face_index; - }; - - DVector bvh; - - struct _CullParams { - - AABB aabb; - Callback callback; - void *userdata; - const Face *faces; - const Vector3 *vertices; - const BVH *bvh; - FaceShapeSW *face; - }; - - struct _SegmentCullParams { - - Vector3 from; - Vector3 to; - const Face *faces; - const Vector3 *vertices; - const BVH *bvh; - - Vector3 result; - Vector3 normal; - real_t min_d; - int collisions; - - }; - - void _cull_segment(int p_idx,_SegmentCullParams *p_params) const; - void _cull(int p_idx,_CullParams *p_params) const; - - void _fill_bvh(_VolumeSW_BVH* p_bvh_tree,BVH* p_bvh_array,int& p_idx); - - - void _setup(DVector p_faces); -public: - - DVector get_faces() const; - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CONCAVE_POLYGON; } - - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual void cull(const AABB& p_local_aabb,Callback p_callback,void* p_userdata) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - ConcavePolygonShapeSW(); - -}; - - -struct HeightMapShapeSW : public ConcaveShapeSW { - - DVector heights; - int width; - int depth; - float cell_size; - -// void _cull_segment(int p_idx,_SegmentCullParams *p_params) const; -// void _cull(int p_idx,_CullParams *p_params) const; - - void _setup(DVector p_heights,int p_width,int p_depth,float p_cell_size); -public: - - DVector get_heights() const; - int get_width() const; - int get_depth() const; - float get_cell_size() const; - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_HEIGHTMAP; } - - virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - virtual Vector3 get_support(const Vector3& p_normal) const; - virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - virtual void cull(const AABB& p_local_aabb,Callback p_callback,void* p_userdata) const; - - virtual Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data); - virtual Variant get_data() const; - - HeightMapShapeSW(); - -}; - -//used internally -struct FaceShapeSW : public ShapeSW { - - Vector3 normal; //cache - Vector3 vertex[3]; - - virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CONCAVE_POLYGON; } - - const Vector3& get_vertex(int p_idx) const { return vertex[p_idx]; } - - void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; - Vector3 get_support(const Vector3& p_normal) const; - virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; - bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; - - Vector3 get_moment_of_inertia(float p_mass) const; - - virtual void set_data(const Variant& p_data) {} - virtual Variant get_data() const { return Variant(); } - - FaceShapeSW(); -}; - - - - - -struct _ShapeTestConvexBSPSW { - - const BSP_Tree *bsp; - const ShapeSW *shape; - Transform transform; - - _FORCE_INLINE_ void project_range(const Vector3& p_normal, real_t& r_min, real_t& r_max) const { - - shape->project_range(p_normal,transform,r_min,r_max); - } - -}; - - - - -#endif // SHAPESW_H +#ifndef SHAPE_SW_H +#define SHAPE_SW_H + +#include "servers/physics_server.h" +#include "bsp_tree.h" +#include "geometry.h" +/* + +SHAPE_LINE, ///< plane:"plane" +SHAPE_SEGMENT, ///< float:"length" +SHAPE_CIRCLE, ///< float:"radius" +SHAPE_RECTANGLE, ///< vec3:"extents" +SHAPE_CONVEX_POLYGON, ///< array of planes:"planes" +SHAPE_CONCAVE_POLYGON, ///< Vector3 array:"triangles" , or Dictionary with "indices" (int array) and "triangles" (Vector3 array) +SHAPE_CUSTOM, ///< Server-Implementation based custom shape, calling shape_create() with this value will result in an error + +*/ + +class ShapeSW; + +class ShapeOwnerSW { +public: + + virtual void _shape_changed()=0; + virtual void remove_shape(ShapeSW *p_shape)=0; + + virtual ~ShapeOwnerSW() {} +}; + + +class ShapeSW { + + RID self; + AABB aabb; + bool configured; + real_t custom_bias; + + Map owners; +protected: + + void configure(const AABB& p_aabb); +public: + + enum { + MAX_SUPPORTS=8 + }; + + _FORCE_INLINE_ void set_self(const RID& p_self) { self=p_self; } + _FORCE_INLINE_ RID get_self() const {return self; } + + virtual PhysicsServer::ShapeType get_type() const=0; + + _FORCE_INLINE_ AABB get_aabb() const { return aabb; } + _FORCE_INLINE_ bool is_configured() const { return configured; } + + virtual bool is_concave() const { return false; } + + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const=0; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const=0; + + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_point, Vector3 &r_normal) const=0; + virtual Vector3 get_moment_of_inertia(float p_mass) const=0; + + virtual void set_data(const Variant& p_data)=0; + virtual Variant get_data() const=0; + + _FORCE_INLINE_ void set_custom_bias(real_t p_bias) { custom_bias=p_bias; } + _FORCE_INLINE_ real_t get_custom_bias() const { return custom_bias; } + + void add_owner(ShapeOwnerSW *p_owner); + void remove_owner(ShapeOwnerSW *p_owner); + bool is_owner(ShapeOwnerSW *p_owner) const; + const Map& get_owners() const; + + ShapeSW(); + virtual ~ShapeSW(); +}; + + +class ConcaveShapeSW : public ShapeSW { + +public: + + virtual bool is_concave() const { return true; } + typedef void (*Callback)(void* p_userdata,ShapeSW *p_convex); + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const { r_amount=0; } + + virtual void cull(const AABB& p_local_aabb,Callback p_callback,void* p_userdata) const=0; + + ConcaveShapeSW() {} +}; + +class PlaneShapeSW : public ShapeSW { + + Plane plane; + + void _setup(const Plane& p_plane); +public: + + Plane get_plane() const; + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_PLANE; } + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const { r_amount=0; } + + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + PlaneShapeSW(); +}; + +class RayShapeSW : public ShapeSW { + + float length; + + void _setup(float p_length); +public: + + float get_length() const; + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_RAY; } + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; + + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + RayShapeSW(); +}; + +class SphereShapeSW : public ShapeSW { + + real_t radius; + + void _setup(real_t p_radius); +public: + + real_t get_radius() const; + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_SPHERE; } + + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + SphereShapeSW(); +}; + +class BoxShapeSW : public ShapeSW { + + Vector3 half_extents; + void _setup(const Vector3& p_half_extents); +public: + + _FORCE_INLINE_ Vector3 get_half_extents() const { return half_extents; } + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_BOX; } + + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + BoxShapeSW(); +}; + +class CapsuleShapeSW : public ShapeSW { + + real_t height; + real_t radius; + + + void _setup(real_t p_height,real_t p_radius); +public: + + _FORCE_INLINE_ real_t get_height() const { return height; } + _FORCE_INLINE_ real_t get_radius() const { return radius; } + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CAPSULE; } + + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + CapsuleShapeSW(); +}; + +struct ConvexPolygonShapeSW : public ShapeSW { + + Geometry::MeshData mesh; + + void _setup(const Vector& p_vertices); +public: + + const Geometry::MeshData& get_mesh() const { return mesh; } + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CONVEX_POLYGON; } + + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + ConvexPolygonShapeSW(); + +}; + + +struct _VolumeSW_BVH; +struct FaceShapeSW; + +struct ConcavePolygonShapeSW : public ConcaveShapeSW { + // always a trimesh + + struct Face { + + Vector3 normal; + int indices[3]; + }; + + DVector faces; + DVector vertices; + + struct BVH { + + AABB aabb; + int left; + int right; + + int face_index; + }; + + DVector bvh; + + struct _CullParams { + + AABB aabb; + Callback callback; + void *userdata; + const Face *faces; + const Vector3 *vertices; + const BVH *bvh; + FaceShapeSW *face; + }; + + struct _SegmentCullParams { + + Vector3 from; + Vector3 to; + const Face *faces; + const Vector3 *vertices; + const BVH *bvh; + Vector3 dir; + + Vector3 result; + Vector3 normal; + real_t min_d; + int collisions; + + }; + + void _cull_segment(int p_idx,_SegmentCullParams *p_params) const; + void _cull(int p_idx,_CullParams *p_params) const; + + void _fill_bvh(_VolumeSW_BVH* p_bvh_tree,BVH* p_bvh_array,int& p_idx); + + + void _setup(DVector p_faces); +public: + + DVector get_faces() const; + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CONCAVE_POLYGON; } + + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual void cull(const AABB& p_local_aabb,Callback p_callback,void* p_userdata) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + ConcavePolygonShapeSW(); + +}; + + +struct HeightMapShapeSW : public ConcaveShapeSW { + + DVector heights; + int width; + int depth; + float cell_size; + +// void _cull_segment(int p_idx,_SegmentCullParams *p_params) const; +// void _cull(int p_idx,_CullParams *p_params) const; + + void _setup(DVector p_heights,int p_width,int p_depth,float p_cell_size); +public: + + DVector get_heights() const; + int get_width() const; + int get_depth() const; + float get_cell_size() const; + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_HEIGHTMAP; } + + virtual void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + virtual Vector3 get_support(const Vector3& p_normal) const; + virtual bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + virtual void cull(const AABB& p_local_aabb,Callback p_callback,void* p_userdata) const; + + virtual Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data); + virtual Variant get_data() const; + + HeightMapShapeSW(); + +}; + +//used internally +struct FaceShapeSW : public ShapeSW { + + Vector3 normal; //cache + Vector3 vertex[3]; + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CONCAVE_POLYGON; } + + const Vector3& get_vertex(int p_idx) const { return vertex[p_idx]; } + + void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const; + Vector3 get_support(const Vector3& p_normal) const; + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const; + bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const; + + Vector3 get_moment_of_inertia(float p_mass) const; + + virtual void set_data(const Variant& p_data) {} + virtual Variant get_data() const { return Variant(); } + + FaceShapeSW(); +}; + + +struct MotionShapeSW : public ShapeSW { + + ShapeSW *shape; + Vector3 motion; + + virtual PhysicsServer::ShapeType get_type() const { return PhysicsServer::SHAPE_CONVEX_POLYGON; } + + + void project_range(const Vector3& p_normal, const Transform& p_transform, real_t &r_min, real_t &r_max) const { + + Vector3 cast = p_transform.basis.xform(motion); + real_t mina,maxa; + real_t minb,maxb; + Transform ofsb = p_transform; + ofsb.origin+=cast; + shape->project_range(p_normal,p_transform,mina,maxa); + shape->project_range(p_normal,ofsb,minb,maxb); + r_min=MIN(mina,minb); + r_max=MAX(maxa,maxb); + } + + Vector3 get_support(const Vector3& p_normal) const { + + Vector3 support = shape->get_support(p_normal); + if (p_normal.dot(motion)>0) { + support+=motion; + } + return support; + } + virtual void get_supports(const Vector3& p_normal,int p_max,Vector3 *r_supports,int & r_amount) const {} + bool intersect_segment(const Vector3& p_begin,const Vector3& p_end,Vector3 &r_result, Vector3 &r_normal) const { return false; } + + Vector3 get_moment_of_inertia(float p_mass) const { return Vector3(); } + + virtual void set_data(const Variant& p_data) {} + virtual Variant get_data() const { return Variant(); } + + MotionShapeSW() { configure(AABB()); } +}; + + + + +struct _ShapeTestConvexBSPSW { + + const BSP_Tree *bsp; + const ShapeSW *shape; + Transform transform; + + _FORCE_INLINE_ void project_range(const Vector3& p_normal, real_t& r_min, real_t& r_max) const { + + shape->project_range(p_normal,transform,r_min,r_max); + } + +}; + + + + +#endif // SHAPESW_H diff --git a/servers/physics/space_sw.cpp b/servers/physics/space_sw.cpp index ad86a62280..da023e1144 100644 --- a/servers/physics/space_sw.cpp +++ b/servers/physics/space_sw.cpp @@ -32,7 +32,22 @@ #include "physics_server_sw.h" -bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3& p_from, const Vector3& p_to,RayResult &r_result,const Set& p_exclude,uint32_t p_user_mask) { +_FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object, uint32_t p_layer_mask, uint32_t p_type_mask) { + + if ((p_object->get_layer_mask()&p_layer_mask)==0) + return false; + + if (p_object->get_type()==CollisionObjectSW::TYPE_AREA && !(p_type_mask&PhysicsDirectSpaceState::TYPE_MASK_AREA)) + return false; + + BodySW *body = static_cast(p_object); + + return (1<get_mode())&p_type_mask; + +} + + +bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3& p_from, const Vector3& p_to,RayResult &r_result,const Set& p_exclude,uint32_t p_layer_mask,uint32_t p_object_type_mask) { ERR_FAIL_COND_V(space->locked,false); @@ -58,8 +73,8 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3& p_from, const Vecto for(int i=0;iintersection_query_results[i]->get_type()==CollisionObjectSW::TYPE_AREA) - continue; //ignore area + if (!_match_object_type_query(space->intersection_query_results[i],p_layer_mask,p_object_type_mask)) + continue; if (p_exclude.has( space->intersection_query_results[i]->get_self())) continue; @@ -114,7 +129,7 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3& p_from, const Vecto } -int PhysicsDirectSpaceStateSW::intersect_shape(const RID& p_shape, const Transform& p_xform,ShapeResult *r_results,int p_result_max,const Set& p_exclude,uint32_t p_user_mask) { +int PhysicsDirectSpaceStateSW::intersect_shape(const RID& p_shape, const Transform& p_xform,float p_margin,ShapeResult *r_results,int p_result_max,const Set& p_exclude,uint32_t p_layer_mask,uint32_t p_object_type_mask) { if (p_result_max<=0) return 0; @@ -136,8 +151,9 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID& p_shape, const Transfo if (cc>=p_result_max) break; - if (space->intersection_query_results[i]->get_type()==CollisionObjectSW::TYPE_AREA) - continue; //ignore area + if (!_match_object_type_query(space->intersection_query_results[i],p_layer_mask,p_object_type_mask)) + continue; + if (p_exclude.has( space->intersection_query_results[i]->get_self())) continue; @@ -146,7 +162,7 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID& p_shape, const Transfo const CollisionObjectSW *col_obj=space->intersection_query_results[i]; int shape_idx=space->intersection_query_subindex_results[i]; - if (!CollisionSolverSW::solve_static(shape,p_xform,col_obj->get_shape(shape_idx),col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), NULL,NULL,NULL)) + if (!CollisionSolverSW::solve_static(shape,p_xform,col_obj->get_shape(shape_idx),col_obj->get_transform() * col_obj->get_shape_transform(shape_idx), NULL,NULL,NULL,p_margin,0)) continue; r_results[cc].collider_id=col_obj->get_instance_id(); @@ -163,6 +179,283 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID& p_shape, const Transfo } + +bool PhysicsDirectSpaceStateSW::cast_motion(const RID& p_shape, const Transform& p_xform,const Vector3& p_motion,float p_margin,float &p_closest_safe,float &p_closest_unsafe, const Set& p_exclude,uint32_t p_layer_mask,uint32_t p_object_type_mask,ShapeRestInfo *r_info) { + + + + ShapeSW *shape = static_cast(PhysicsServer::get_singleton())->shape_owner.get(p_shape); + ERR_FAIL_COND_V(!shape,false); + + AABB aabb = p_xform.xform(shape->get_aabb()); + aabb=aabb.merge(AABB(aabb.pos+p_motion,aabb.size)); //motion + aabb=aabb.grow(p_margin); + + //if (p_motion!=Vector3()) + // print_line(p_motion); + + int amount = space->broadphase->cull_aabb(aabb,space->intersection_query_results,SpaceSW::INTERSECTION_QUERY_MAX,space->intersection_query_subindex_results); + + float best_safe=1; + float best_unsafe=1; + + Transform xform_inv = p_xform.affine_inverse(); + MotionShapeSW mshape; + mshape.shape=shape; + mshape.motion=xform_inv.basis.xform(p_motion); + + bool best_first=true; + + Vector3 closest_A,closest_B; + + for(int i=0;iintersection_query_results[i],p_layer_mask,p_object_type_mask)) + continue; + + if (p_exclude.has( space->intersection_query_results[i]->get_self())) + continue; //ignore excluded + + + const CollisionObjectSW *col_obj=space->intersection_query_results[i]; + int shape_idx=space->intersection_query_subindex_results[i]; + + Vector3 point_A,point_B; + Vector3 sep_axis=p_motion.normalized(); + + Transform col_obj_xform = col_obj->get_transform() * col_obj->get_shape_transform(shape_idx); + //test initial overlap, does it collide if going all the way? + if (CollisionSolverSW::solve_distance(&mshape,p_xform,col_obj->get_shape(shape_idx),col_obj_xform,point_A,point_B,aabb,&sep_axis)) { + //print_line("failed motion cast (no collision)"); + continue; + } + + + //test initial overlap +#if 0 + if (CollisionSolverSW::solve_static(shape,p_xform,col_obj->get_shape(shape_idx),col_obj_xform,NULL,NULL,&sep_axis)) { + print_line("failed initial cast (collision at begining)"); + return false; + } +#else + sep_axis=p_motion.normalized(); + + if (!CollisionSolverSW::solve_distance(shape,p_xform,col_obj->get_shape(shape_idx),col_obj_xform,point_A,point_B,aabb,&sep_axis)) { + //print_line("failed motion cast (no collision)"); + return false; + } +#endif + + + //just do kinematic solving + float low=0; + float hi=1; + Vector3 mnormal=p_motion.normalized(); + + for(int i=0;i<8;i++) { //steps should be customizable.. + + Transform xfa = p_xform; + float ofs = (low+hi)*0.5; + + Vector3 sep=mnormal; //important optimization for this to work fast enough + + mshape.motion=xform_inv.basis.xform(p_motion*ofs); + + Vector3 lA,lB; + + bool collided = !CollisionSolverSW::solve_distance(&mshape,p_xform,col_obj->get_shape(shape_idx),col_obj_xform,lA,lB,aabb,&sep); + + if (collided) { + + //print_line(itos(i)+": "+rtos(ofs)); + hi=ofs; + } else { + + point_A=lA; + point_B=lB; + low=ofs; + } + } + + if (lowcollider_id=col_obj->get_instance_id(); + r_info->rid=col_obj->get_self(); + r_info->shape=shape_idx; + r_info->point=closest_B; + r_info->normal=(closest_A-closest_B).normalized(); + best_first=false; + if (col_obj->get_type()==CollisionObjectSW::TYPE_BODY) { + const BodySW *body=static_cast(col_obj); + r_info->linear_velocity= body->get_linear_velocity() + (body->get_angular_velocity()).cross(body->get_transform().origin - closest_B); + } + + } + + + } + + p_closest_safe=best_safe; + p_closest_unsafe=best_unsafe; + + return true; +} + +bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform& p_shape_xform,float p_margin,Vector3 *r_results,int p_result_max,int &r_result_count, const Set& p_exclude,uint32_t p_layer_mask,uint32_t p_object_type_mask){ + + if (p_result_max<=0) + return 0; + + ShapeSW *shape = static_cast(PhysicsServer::get_singleton())->shape_owner.get(p_shape); + ERR_FAIL_COND_V(!shape,0); + + AABB aabb = p_shape_xform.xform(shape->get_aabb()); + aabb=aabb.grow(p_margin); + + int amount = space->broadphase->cull_aabb(aabb,space->intersection_query_results,SpaceSW::INTERSECTION_QUERY_MAX,space->intersection_query_subindex_results); + + bool collided=false; + int cc=0; + r_result_count=0; + + PhysicsServerSW::CollCbkData cbk; + cbk.max=p_result_max; + cbk.amount=0; + cbk.ptr=r_results; + CollisionSolverSW::CallbackResult cbkres=NULL; + + PhysicsServerSW::CollCbkData *cbkptr=NULL; + if (p_result_max>0) { + cbkptr=&cbk; + cbkres=PhysicsServerSW::_shape_col_cbk; + } + + + for(int i=0;iintersection_query_results[i],p_layer_mask,p_object_type_mask)) + continue; + + const CollisionObjectSW *col_obj=space->intersection_query_results[i]; + int shape_idx=space->intersection_query_subindex_results[i]; + + if (p_exclude.has( col_obj->get_self() )) { + continue; + } + + //print_line("AGAINST: "+itos(col_obj->get_self().get_id())+":"+itos(shape_idx)); + //print_line("THE ABBB: "+(col_obj->get_transform() * col_obj->get_shape_transform(shape_idx)).xform(col_obj->get_shape(shape_idx)->get_aabb())); + + if (CollisionSolverSW::solve_static(shape,p_shape_xform,col_obj->get_shape(shape_idx),col_obj->get_transform() * col_obj->get_shape_transform(shape_idx),cbkres,cbkptr,NULL,p_margin)) { + collided=true; + } + + } + + r_result_count=cbk.amount; + + return collided; + +} + + +struct _RestCallbackData { + + const CollisionObjectSW *object; + const CollisionObjectSW *best_object; + int shape; + int best_shape; + Vector3 best_contact; + Vector3 best_normal; + float best_len; +}; + +static void _rest_cbk_result(const Vector3& p_point_A,const Vector3& p_point_B,void *p_userdata) { + + + _RestCallbackData *rd=(_RestCallbackData*)p_userdata; + + Vector3 contact_rel = p_point_B - p_point_A; + float len = contact_rel.length(); + if (len <= rd->best_len) + return; + + rd->best_len=len; + rd->best_contact=p_point_B; + rd->best_normal=contact_rel/len; + rd->best_object=rd->object; + rd->best_shape=rd->shape; + +} +bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform& p_shape_xform,float p_margin,ShapeRestInfo *r_info, const Set& p_exclude,uint32_t p_layer_mask,uint32_t p_object_type_mask) { + + + ShapeSW *shape = static_cast(PhysicsServer::get_singleton())->shape_owner.get(p_shape); + ERR_FAIL_COND_V(!shape,0); + + AABB aabb = p_shape_xform.xform(shape->get_aabb()); + aabb=aabb.grow(p_margin); + + int amount = space->broadphase->cull_aabb(aabb,space->intersection_query_results,SpaceSW::INTERSECTION_QUERY_MAX,space->intersection_query_subindex_results); + + _RestCallbackData rcd; + rcd.best_len=0; + rcd.best_object=NULL; + rcd.best_shape=0; + + for(int i=0;iintersection_query_results[i],p_layer_mask,p_object_type_mask)) + continue; + + const CollisionObjectSW *col_obj=space->intersection_query_results[i]; + int shape_idx=space->intersection_query_subindex_results[i]; + + if (p_exclude.has( col_obj->get_self() )) + continue; + + rcd.object=col_obj; + rcd.shape=shape_idx; + bool sc = CollisionSolverSW::solve_static(shape,p_shape_xform,col_obj->get_shape(shape_idx),col_obj->get_transform() * col_obj->get_shape_transform(shape_idx),_rest_cbk_result,&rcd,NULL,p_margin); + if (!sc) + continue; + + + } + + if (rcd.best_len==0) + return false; + + r_info->collider_id=rcd.best_object->get_instance_id(); + r_info->shape=rcd.best_shape; + r_info->normal=rcd.best_normal; + r_info->point=rcd.best_contact; + r_info->rid=rcd.best_object->get_self(); + if (rcd.best_object->get_type()==CollisionObjectSW::TYPE_BODY) { + + const BodySW *body = static_cast(rcd.best_object); + Vector3 rel_vec = r_info->point-body->get_transform().get_origin(); + r_info->linear_velocity = body->get_linear_velocity() + + (body->get_angular_velocity()).cross(body->get_transform().origin-rcd.best_contact);// * mPos); + + + } else { + r_info->linear_velocity=Vector3(); + } + + return true; +} + + PhysicsDirectSpaceStateSW::PhysicsDirectSpaceStateSW() { @@ -194,6 +487,8 @@ void* SpaceSW::_broadphase_pair(CollisionObjectSW *A,int p_subindex_A,CollisionO SpaceSW *self = (SpaceSW*)p_self; + self->collision_pairs++; + if (type_A==CollisionObjectSW::TYPE_AREA) { @@ -221,6 +516,7 @@ void SpaceSW::_broadphase_unpair(CollisionObjectSW *A,int p_subindex_A,Collision SpaceSW *self = (SpaceSW*)p_self; + self->collision_pairs--; ConstraintSW *c = (ConstraintSW*)p_data; memdelete(c); } @@ -398,6 +694,9 @@ PhysicsDirectSpaceStateSW *SpaceSW::get_direct_state() { SpaceSW::SpaceSW() { + collision_pairs=0; + active_objects=0; + island_count=0; locked=false; contact_recycle_radius=0.01; diff --git a/servers/physics/space_sw.h b/servers/physics/space_sw.h index cec1053400..a97647dcfc 100644 --- a/servers/physics/space_sw.h +++ b/servers/physics/space_sw.h @@ -46,8 +46,11 @@ public: SpaceSW *space; - bool intersect_ray(const Vector3& p_from, const Vector3& p_to,RayResult &r_result,const Set& p_exclude=Set(),uint32_t p_user_mask=0); - int intersect_shape(const RID& p_shape, const Transform& p_xform,ShapeResult *r_results,int p_result_max,const Set& p_exclude=Set(),uint32_t p_user_mask=0); + virtual bool intersect_ray(const Vector3& p_from, const Vector3& p_to,RayResult &r_result,const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION); + virtual int intersect_shape(const RID& p_shape, const Transform& p_xform,float p_margin,ShapeResult *r_results,int p_result_max,const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION); + virtual bool cast_motion(const RID& p_shape, const Transform& p_xform,const Vector3& p_motion,float p_margin,float &p_closest_safe,float &p_closest_unsafe, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION,ShapeRestInfo *r_info=NULL); + virtual bool collide_shape(RID p_shape, const Transform& p_shape_xform,float p_margin,Vector3 *r_results,int p_result_max,int &r_result_count, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION); + virtual bool rest_info(RID p_shape, const Transform& p_shape_xform,float p_margin,ShapeRestInfo *r_info, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION); PhysicsDirectSpaceStateSW(); }; @@ -94,6 +97,10 @@ class SpaceSW { bool locked; + int island_count; + int active_objects; + int collision_pairs; + friend class PhysicsDirectSpaceStateSW; public: @@ -147,6 +154,14 @@ public: void set_param(PhysicsServer::SpaceParameter p_param, real_t p_value); real_t get_param(PhysicsServer::SpaceParameter p_param) const; + void set_island_count(int p_island_count) { island_count=p_island_count; } + int get_island_count() const { return island_count; } + + void set_active_objects(int p_active_objects) { active_objects=p_active_objects; } + int get_active_objects() const { return active_objects; } + + int get_collision_pairs() const { return collision_pairs; } + PhysicsDirectSpaceStateSW *get_direct_state(); SpaceSW(); diff --git a/servers/physics/step_sw.cpp b/servers/physics/step_sw.cpp index b7815d2250..6d95804875 100644 --- a/servers/physics/step_sw.cpp +++ b/servers/physics/step_sw.cpp @@ -49,7 +49,7 @@ void StepSW::_populate_island(BodySW* p_body,BodySW** p_island,ConstraintSW **p_ if (i==E->get()) continue; BodySW *b = c->get_body_ptr()[i]; - if (b->get_island_step()==_step || b->get_mode()==PhysicsServer::BODY_MODE_STATIC) + if (b->get_island_step()==_step || b->get_mode()==PhysicsServer::BODY_MODE_STATIC || b->get_mode()==PhysicsServer::BODY_MODE_KINEMATIC) continue; //no go _populate_island(c->get_body_ptr()[i],p_island,p_constraint_island); } @@ -86,8 +86,10 @@ void StepSW::_check_suspend(BodySW *p_island,float p_delta) { BodySW *b = p_island; while(b) { - if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC) + if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC || b->get_mode()==PhysicsServer::BODY_MODE_KINEMATIC) { + b=b->get_island_next(); continue; //ignore for static + } if (!b->sleep_test(p_delta)) can_sleep=false; @@ -100,8 +102,10 @@ void StepSW::_check_suspend(BodySW *p_island,float p_delta) { b = p_island; while(b) { - if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC) + if (b->get_mode()==PhysicsServer::BODY_MODE_STATIC || b->get_mode()==PhysicsServer::BODY_MODE_KINEMATIC) { + b=b->get_island_next(); continue; //ignore for static + } bool active = b->is_active(); @@ -131,6 +135,7 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) { active_count++; } + p_space->set_active_objects(active_count); /* GENERATE CONSTRAINT ISLANDS */ @@ -164,6 +169,8 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) { b=b->next(); } + p_space->set_island_count(island_count); + const SelfList::List &aml = p_space->get_moved_area_list(); while(aml.first()) { @@ -207,9 +214,9 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) { b = body_list->first(); while(b) { - + const SelfList*n=b->next(); b->self()->integrate_velocities(p_delta); - b=b->next(); + b=n; } /* SLEEP / WAKE UP ISLANDS */ diff --git a/servers/physics_2d/area_2d_sw.h b/servers/physics_2d/area_2d_sw.h index 51e6ccd166..0eda1050fa 100644 --- a/servers/physics_2d/area_2d_sw.h +++ b/servers/physics_2d/area_2d_sw.h @@ -71,7 +71,7 @@ class Area2DSW : public CollisionObject2DSW{ return area_shape < p_key.area_shape; } else - return body_shape < p_key.area_shape; + return body_shape < p_key.body_shape; } else return rid < p_key.rid; diff --git a/servers/physics_2d/collision_solver_2d_sat.cpp b/servers/physics_2d/collision_solver_2d_sat.cpp index 7d85183645..f73ed5732e 100644 --- a/servers/physics_2d/collision_solver_2d_sat.cpp +++ b/servers/physics_2d/collision_solver_2d_sat.cpp @@ -593,8 +593,8 @@ static void _collision_segment_segment(const Shape2DSW* p_a,const Matrix32& p_tr //this collision is kind of pointless - if (!separator.test_previous_axis()) - return; + //if (!separator.test_previous_axis()) + // return; if (!separator.test_cast()) return; diff --git a/servers/physics_2d/physics_2d_server_sw.cpp b/servers/physics_2d/physics_2d_server_sw.cpp index 2171a9c2c4..09fa3f9b6a 100644 --- a/servers/physics_2d/physics_2d_server_sw.cpp +++ b/servers/physics_2d/physics_2d_server_sw.cpp @@ -1086,9 +1086,15 @@ void Physics2DServerSW::step(float p_step) { last_step=p_step; Physics2DDirectBodyStateSW::singleton->step=p_step; + island_count=0; + active_objects=0; + collision_pairs=0; for( Set::Element *E=active_spaces.front();E;E=E->next()) { stepper->step((Space2DSW*)E->get(),p_step,iterations); + island_count+=E->get()->get_island_count(); + active_objects+=E->get()->get_active_objects(); + collision_pairs+=E->get()->get_collision_pairs(); } }; @@ -1118,6 +1124,27 @@ void Physics2DServerSW::finish() { memdelete(direct_state); }; +int Physics2DServerSW::get_process_info(ProcessInfo p_info) { + + switch(p_info) { + + case INFO_ACTIVE_OBJECTS: { + + return active_objects; + } break; + case INFO_COLLISION_PAIRS: { + return collision_pairs; + } break; + case INFO_ISLAND_COUNT: { + + return island_count; + } break; + + } + + return 0; +} + Physics2DServerSW::Physics2DServerSW() { @@ -1125,8 +1152,13 @@ Physics2DServerSW::Physics2DServerSW() { // BroadPhase2DSW::create_func=BroadPhase2DBasic::_create; active=true; + island_count=0; + active_objects=0; + collision_pairs=0; + }; + Physics2DServerSW::~Physics2DServerSW() { }; diff --git a/servers/physics_2d/physics_2d_server_sw.h b/servers/physics_2d/physics_2d_server_sw.h index 09ca029127..7ffffe669f 100644 --- a/servers/physics_2d/physics_2d_server_sw.h +++ b/servers/physics_2d/physics_2d_server_sw.h @@ -47,6 +47,11 @@ friend class Physics2DDirectSpaceStateSW; bool doing_sync; real_t last_step; + int island_count; + int active_objects; + int collision_pairs; + + Step2DSW *stepper; Set active_spaces; @@ -223,6 +228,8 @@ public: virtual void flush_queries(); virtual void finish(); + int get_process_info(ProcessInfo p_info); + Physics2DServerSW(); ~Physics2DServerSW(); diff --git a/servers/physics_2d/shape_2d_sw.h b/servers/physics_2d/shape_2d_sw.h index d3fcf1fab2..8500a6194f 100644 --- a/servers/physics_2d/shape_2d_sw.h +++ b/servers/physics_2d/shape_2d_sw.h @@ -582,5 +582,6 @@ public: }; +#undef DEFAULT_PROJECT_RANGE_CAST #endif // SHAPE_2D_2DSW_H diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp index 5fbf828c38..21a99cd4b2 100644 --- a/servers/physics_2d/space_2d_sw.cpp +++ b/servers/physics_2d/space_2d_sw.cpp @@ -323,7 +323,7 @@ bool Physics2DDirectSpaceStateSW::collide_shape(RID p_shape, const Matrix32& p_s } -struct _RestCallbackData { +struct _RestCallbackData2D { const CollisionObject2DSW *object; const CollisionObject2DSW *best_object; @@ -337,7 +337,7 @@ struct _RestCallbackData { static void _rest_cbk_result(const Vector2& p_point_A,const Vector2& p_point_B,void *p_userdata) { - _RestCallbackData *rd=(_RestCallbackData*)p_userdata; + _RestCallbackData2D *rd=(_RestCallbackData2D*)p_userdata; Vector2 contact_rel = p_point_B - p_point_A; float len = contact_rel.length(); @@ -365,7 +365,7 @@ bool Physics2DDirectSpaceStateSW::rest_info(RID p_shape, const Matrix32& p_shape int amount = space->broadphase->cull_aabb(aabb,space->intersection_query_results,Space2DSW::INTERSECTION_QUERY_MAX,space->intersection_query_subindex_results); - _RestCallbackData rcd; + _RestCallbackData2D rcd; rcd.best_len=0; rcd.best_object=NULL; rcd.best_shape=0; @@ -443,6 +443,7 @@ void* Space2DSW::_broadphase_pair(CollisionObject2DSW *A,int p_subindex_A,Collis } Space2DSW *self = (Space2DSW*)p_self; + self->collision_pairs++; if (type_A==CollisionObject2DSW::TYPE_AREA) { @@ -468,8 +469,8 @@ void* Space2DSW::_broadphase_pair(CollisionObject2DSW *A,int p_subindex_A,Collis void Space2DSW::_broadphase_unpair(CollisionObject2DSW *A,int p_subindex_A,CollisionObject2DSW *B,int p_subindex_B,void *p_data,void *p_self) { - Space2DSW *self = (Space2DSW*)p_self; + self->collision_pairs--; Constraint2DSW *c = (Constraint2DSW*)p_data; memdelete(c); } @@ -646,6 +647,10 @@ Physics2DDirectSpaceStateSW *Space2DSW::get_direct_state() { Space2DSW::Space2DSW() { + collision_pairs=0; + active_objects=0; + island_count=0; + locked=false; contact_recycle_radius=0.01; contact_max_separation=0.05; diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h index bd41097fba..c638a0c45b 100644 --- a/servers/physics_2d/space_2d_sw.h +++ b/servers/physics_2d/space_2d_sw.h @@ -97,6 +97,10 @@ class Space2DSW { bool locked; + int island_count; + int active_objects; + int collision_pairs; + friend class Physics2DDirectSpaceStateSW; public: @@ -153,6 +157,14 @@ public: void set_param(Physics2DServer::SpaceParameter p_param, real_t p_value); real_t get_param(Physics2DServer::SpaceParameter p_param) const; + void set_island_count(int p_island_count) { island_count=p_island_count; } + int get_island_count() const { return island_count; } + + void set_active_objects(int p_active_objects) { active_objects=p_active_objects; } + int get_active_objects() const { return active_objects; } + + int get_collision_pairs() const { return collision_pairs; } + Physics2DDirectSpaceStateSW *get_direct_state(); Space2DSW(); diff --git a/servers/physics_2d/step_2d_sw.cpp b/servers/physics_2d/step_2d_sw.cpp index 29f4a58287..e75f9300ce 100644 --- a/servers/physics_2d/step_2d_sw.cpp +++ b/servers/physics_2d/step_2d_sw.cpp @@ -137,6 +137,8 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) { active_count++; } + p_space->set_active_objects(active_count); + /* GENERATE CONSTRAINT ISLANDS */ Body2DSW *island_list=NULL; @@ -168,6 +170,8 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) { b=b->next(); } + p_space->set_island_count(island_count); + const SelfList::List &aml = p_space->get_moved_area_list(); diff --git a/servers/physics_2d_server.cpp b/servers/physics_2d_server.cpp index 9cbd7414bd..da8ac5f9c8 100644 --- a/servers/physics_2d_server.cpp +++ b/servers/physics_2d_server.cpp @@ -110,17 +110,132 @@ Physics2DDirectBodyState::Physics2DDirectBodyState() {} -Variant Physics2DDirectSpaceState::_intersect_ray(const Vector2& p_from, const Vector2& p_to,const Vector& p_exclude,uint32_t p_user_mask) { +void Physics2DShapeQueryParameters::set_shape(const RES &p_shape) { + + ERR_FAIL_COND(p_shape.is_null()); + shape=p_shape->get_rid(); +} + +void Physics2DShapeQueryParameters::set_shape_rid(const RID& p_shape) { + + shape=p_shape; +} + +RID Physics2DShapeQueryParameters::get_shape_rid() const { + + return shape; +} + +void Physics2DShapeQueryParameters::set_transform(const Matrix32& p_transform){ + + transform=p_transform; +} +Matrix32 Physics2DShapeQueryParameters::get_transform() const{ + + return transform; +} + +void Physics2DShapeQueryParameters::set_motion(const Vector2& p_motion){ + + motion=p_motion; +} +Vector2 Physics2DShapeQueryParameters::get_motion() const{ + + return motion; +} + +void Physics2DShapeQueryParameters::set_margin(float p_margin){ + + margin=p_margin; +} +float Physics2DShapeQueryParameters::get_margin() const{ + + return margin; +} + +void Physics2DShapeQueryParameters::set_layer_mask(int p_layer_mask){ + + layer_mask=p_layer_mask; +} +int Physics2DShapeQueryParameters::get_layer_mask() const{ + + return layer_mask; +} + + +void Physics2DShapeQueryParameters::set_object_type_mask(int p_object_type_mask){ + + object_type_mask=p_object_type_mask; +} +int Physics2DShapeQueryParameters::get_object_type_mask() const{ + + return object_type_mask; +} +void Physics2DShapeQueryParameters::set_exclude(const Vector& p_exclude) { + + exclude.clear();; + for(int i=0;i Physics2DShapeQueryParameters::get_exclude() const{ + + Vector ret; + ret.resize(exclude.size()); + int idx=0; + for(Set::Element *E=exclude.front();E;E=E->next()) { + ret[idx]=E->get(); + } + return ret; +} + +void Physics2DShapeQueryParameters::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_shape","shape:Shape2D"),&Physics2DShapeQueryParameters::set_shape); + ObjectTypeDB::bind_method(_MD("set_shape_rid","shape"),&Physics2DShapeQueryParameters::set_shape_rid); + ObjectTypeDB::bind_method(_MD("get_shape_rid"),&Physics2DShapeQueryParameters::get_shape_rid); + + ObjectTypeDB::bind_method(_MD("set_transform","transform"),&Physics2DShapeQueryParameters::set_transform); + ObjectTypeDB::bind_method(_MD("get_transform"),&Physics2DShapeQueryParameters::get_transform); + + ObjectTypeDB::bind_method(_MD("set_motion","motion"),&Physics2DShapeQueryParameters::set_motion); + ObjectTypeDB::bind_method(_MD("get_motion"),&Physics2DShapeQueryParameters::get_motion); + + ObjectTypeDB::bind_method(_MD("set_margin","margin"),&Physics2DShapeQueryParameters::set_margin); + ObjectTypeDB::bind_method(_MD("get_margin"),&Physics2DShapeQueryParameters::get_margin); + + ObjectTypeDB::bind_method(_MD("set_layer_mask","layer_mask"),&Physics2DShapeQueryParameters::set_layer_mask); + ObjectTypeDB::bind_method(_MD("get_layer_mask"),&Physics2DShapeQueryParameters::get_layer_mask); + + ObjectTypeDB::bind_method(_MD("set_object_type_mask","object_type_mask"),&Physics2DShapeQueryParameters::set_object_type_mask); + ObjectTypeDB::bind_method(_MD("get_object_type_mask"),&Physics2DShapeQueryParameters::get_object_type_mask); + + ObjectTypeDB::bind_method(_MD("set_exclude","exclude"),&Physics2DShapeQueryParameters::set_exclude); + ObjectTypeDB::bind_method(_MD("get_exclude"),&Physics2DShapeQueryParameters::get_exclude); + + +} + +Physics2DShapeQueryParameters::Physics2DShapeQueryParameters() { + + margin=0; + layer_mask=0x7FFFFFFF; + object_type_mask=Physics2DDirectSpaceState::TYPE_MASK_COLLISION; +} + + +Dictionary Physics2DDirectSpaceState::_intersect_ray(const Vector2& p_from, const Vector2& p_to,const Vector& p_exclude,uint32_t p_layers,uint32_t p_object_type_mask) { RayResult inters; Set exclude; for(int i=0;i& p_exclude,uint32_t p_user_mask) { +Array Physics2DDirectSpaceState::_intersect_shape(const Ref &psq, int p_max_results) { - ERR_FAIL_INDEX_V(p_result_max,4096,Variant()); - if (p_result_max<=0) - return Variant(); + Vector sr; + sr.resize(p_max_results); + int rc = intersect_shape(psq->shape,psq->transform,psq->motion,psq->margin,sr.ptr(),sr.size(),psq->exclude,psq->layer_mask,psq->object_type_mask); + Array ret; + ret.resize(rc); + for(int i=0;i exclude; - for(int i=0;i result = memnew( Physics2DShapeQueryResult ); - result->result.resize(rc); - for(int i=0;iresult[i]=res[i]; - - return result; + Dictionary d; + d["rid"]=sr[i].rid; + d["collider_id"]=sr[i].collider_id; + d["collider"]=sr[i].collider; + d["shape"]=sr[i].shape; + ret[i]=d; + } + return ret; } +Array Physics2DDirectSpaceState::_cast_motion(const Ref &psq){ -Variant Physics2DDirectSpaceState::_cast_motion(const RID& p_shape, const Matrix32& p_xform,const Vector2& p_motion,const Vector& p_exclude,uint32_t p_user_mask) { + float closest_safe,closest_unsafe; + bool res = cast_motion(psq->shape,psq->transform,psq->motion,psq->margin,closest_safe,closest_unsafe,psq->exclude,psq->layer_mask,psq->object_type_mask); + if (!res) + return Array(); + Array ret(true); + ret.resize(2); + ret[0]=closest_safe; + ret[0]=closest_unsafe; + return ret; +} +Array Physics2DDirectSpaceState::_collide_shape(const Ref &psq, int p_max_results){ -#if 0 - Set exclude; - for(int i=0;i ret; + ret.resize(p_max_results*2); + int rc=0; + bool res = collide_shape(psq->shape,psq->transform,psq->motion,psq->margin,ret.ptr(),p_max_results,rc,psq->exclude,psq->layer_mask,psq->object_type_mask); + if (!res) + return Array(); + Array r; + r.resize(rc*2); + for(int i=0;i &psq){ - bool result = cast_motion(p_shape,p_xform,p_motion,0,mcc,exclude,p_user_mask); + ShapeRestInfo sri; - if (!result) - return Variant(); + bool res = rest_info(psq->shape,psq->transform,psq->motion,psq->margin,&sri,psq->exclude,psq->layer_mask,psq->object_type_mask); + Dictionary r(true); + if (!res) + return r; - Dictionary d(true); - d["point"]=mcc.point; - d["normal"]=mcc.normal; - d["rid"]=mcc.rid; - d["collider_id"]=mcc.collider_id; - d["collider"]=mcc.collider; - d["shape"]=mcc.shape; - - return d; -#endif - return Variant(); + r["point"]=sri.point; + r["normal"]=sri.normal; + r["rid"]=sri.rid; + r["collider_id"]=sri.collider_id; + r["shape"]=sri.shape; + r["linear_velocity"]=sri.linear_velocity; + return r; } @@ -200,9 +327,19 @@ Physics2DDirectSpaceState::Physics2DDirectSpaceState() { void Physics2DDirectSpaceState::_bind_methods() { - ObjectTypeDB::bind_method(_MD("intersect_ray:Dictionary","from","to","exclude","umask"),&Physics2DDirectSpaceState::_intersect_ray,DEFVAL(Array()),DEFVAL(0)); - ObjectTypeDB::bind_method(_MD("intersect_shape:Physics2DShapeQueryResult","shape","xform","result_max","exclude","umask"),&Physics2DDirectSpaceState::_intersect_shape,DEFVAL(Array()),DEFVAL(0)); - ObjectTypeDB::bind_method(_MD("cast_motion","shape","xform","motion","exclude","umask"),&Physics2DDirectSpaceState::_intersect_shape,DEFVAL(Array()),DEFVAL(0)); + ObjectTypeDB::bind_method(_MD("intersect_ray:Dictionary","from","to","exclude","layer_mask","type_mask"),&Physics2DDirectSpaceState::_intersect_ray,DEFVAL(Array()),DEFVAL(0x7FFFFFFF),DEFVAL(TYPE_MASK_COLLISION)); + ObjectTypeDB::bind_method(_MD("intersect_shape","shape:Physics2DShapeQueryParameters","max_results"),&Physics2DDirectSpaceState::_intersect_shape,DEFVAL(32)); + ObjectTypeDB::bind_method(_MD("cast_motion","shape:Physics2DShapeQueryParameters"),&Physics2DDirectSpaceState::_cast_motion); + ObjectTypeDB::bind_method(_MD("collide_shape","shape:Physics2DShapeQueryParameters","max_results"),&Physics2DDirectSpaceState::_collide_shape,DEFVAL(32)); + ObjectTypeDB::bind_method(_MD("get_rest_info","shape:Physics2DShapeQueryParameters"),&Physics2DDirectSpaceState::_get_rest_info); + //ObjectTypeDB::bind_method(_MD("cast_motion","shape","xform","motion","exclude","umask"),&Physics2DDirectSpaceState::_intersect_shape,DEFVAL(Array()),DEFVAL(0)); + + BIND_CONSTANT( TYPE_MASK_STATIC_BODY ); + BIND_CONSTANT( TYPE_MASK_KINEMATIC_BODY ); + BIND_CONSTANT( TYPE_MASK_RIGID_BODY ); + BIND_CONSTANT( TYPE_MASK_CHARACTER_BODY ); + BIND_CONSTANT( TYPE_MASK_AREA ); + BIND_CONSTANT( TYPE_MASK_COLLISION ); } @@ -375,6 +512,8 @@ void Physics2DServer::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_active","active"),&Physics2DServer::set_active); + ObjectTypeDB::bind_method(_MD("get_process_info"),&Physics2DServer::get_process_info); + // ObjectTypeDB::bind_method(_MD("init"),&Physics2DServer::init); // ObjectTypeDB::bind_method(_MD("step"),&Physics2DServer::step); // ObjectTypeDB::bind_method(_MD("sync"),&Physics2DServer::sync); @@ -434,6 +573,10 @@ void Physics2DServer::_bind_methods() { BIND_CONSTANT( AREA_BODY_ADDED ); BIND_CONSTANT( AREA_BODY_REMOVED ); + BIND_CONSTANT( INFO_ACTIVE_OBJECTS ); + BIND_CONSTANT( INFO_COLLISION_PAIRS ); + BIND_CONSTANT( INFO_ISLAND_COUNT ); + } diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h index def1e69992..17a21e46a3 100644 --- a/servers/physics_2d_server.h +++ b/servers/physics_2d_server.h @@ -31,6 +31,7 @@ #include "object.h" #include "reference.h" +#include "resource.h" class Physics2DDirectSpaceState; @@ -84,14 +85,60 @@ public: class Physics2DShapeQueryResult; +//used for script +class Physics2DShapeQueryParameters : public Reference { + + OBJ_TYPE(Physics2DShapeQueryParameters, Reference); +friend class Physics2DDirectSpaceState; + RID shape; + Matrix32 transform; + Vector2 motion; + float margin; + Set exclude; + uint32_t layer_mask; + uint32_t object_type_mask; +protected: + static void _bind_methods(); +public: + + + void set_shape(const RES& p_shape); + void set_shape_rid(const RID& p_shape); + RID get_shape_rid() const; + + void set_transform(const Matrix32& p_transform); + Matrix32 get_transform() const; + + void set_motion(const Vector2& p_motion); + Vector2 get_motion() const; + + void set_margin(float p_margin); + float get_margin() const; + + void set_layer_mask(int p_layer_mask); + int get_layer_mask() const; + + void set_object_type_mask(int p_object_type_mask); + int get_object_type_mask() const; + + void set_exclude(const Vector& p_exclude); + Vector get_exclude() const; + + Physics2DShapeQueryParameters(); + +}; + + class Physics2DDirectSpaceState : public Object { OBJ_TYPE( Physics2DDirectSpaceState, Object ); - Variant _intersect_ray(const Vector2& p_from, const Vector2& p_to,const Vector& p_exclude=Vector(),uint32_t p_layers=0); - Variant _intersect_shape(const RID& p_shape, const Matrix32& p_xform,int p_result_max=64,const Vector& p_exclude=Vector(),uint32_t p_layers=0); - Variant _cast_motion(const RID& p_shape, const Matrix32& p_xform,const Vector2& p_motion,const Vector& p_exclude=Vector(),uint32_t p_layers=0); + Dictionary _intersect_ray(const Vector2& p_from, const Vector2& p_to,const Vector& p_exclude=Vector(),uint32_t p_layers=0,uint32_t p_object_type_mask=TYPE_MASK_COLLISION); + Array _intersect_shape(const Ref &p_shape_query,int p_max_results=32); + Array _cast_motion(const Ref &p_shape_query); + Array _collide_shape(const Ref &p_shape_query,int p_max_results=32); + Dictionary _get_rest_info(const Ref &p_shape_query); protected: static void _bind_methods(); @@ -131,8 +178,6 @@ public: virtual int intersect_shape(const RID& p_shape, const Matrix32& p_xform,const Vector2& p_motion,float p_margin,ShapeResult *r_results,int p_result_max,const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION)=0; - - virtual bool cast_motion(const RID& p_shape, const Matrix32& p_xform,const Vector2& p_motion,float p_margin,float &p_closest_safe,float &p_closest_unsafe, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION)=0; virtual bool collide_shape(RID p_shape, const Matrix32& p_shape_xform,const Vector2& p_motion,float p_margin,Vector2 *r_results,int p_result_max,int &r_result_count, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION)=0; @@ -448,6 +493,15 @@ public: virtual void flush_queries()=0; virtual void finish()=0; + enum ProcessInfo { + + INFO_ACTIVE_OBJECTS, + INFO_COLLISION_PAIRS, + INFO_ISLAND_COUNT + }; + + virtual int get_process_info(ProcessInfo p_info)=0; + Physics2DServer(); ~Physics2DServer(); }; @@ -465,5 +519,6 @@ VARIANT_ENUM_CAST( Physics2DServer::JointType ); VARIANT_ENUM_CAST( Physics2DServer::DampedStringParam ); //VARIANT_ENUM_CAST( Physics2DServer::ObjectType ); VARIANT_ENUM_CAST( Physics2DServer::AreaBodyStatus ); +VARIANT_ENUM_CAST( Physics2DServer::ProcessInfo ); #endif diff --git a/servers/physics_server.cpp b/servers/physics_server.cpp index 070bc5e062..e2dd3e14eb 100644 --- a/servers/physics_server.cpp +++ b/servers/physics_server.cpp @@ -113,6 +113,112 @@ PhysicsDirectBodyState::PhysicsDirectBodyState() {} +void PhysicsShapeQueryParameters::set_shape(const RES &p_shape) { + + ERR_FAIL_COND(p_shape.is_null()); + shape=p_shape->get_rid(); +} + +void PhysicsShapeQueryParameters::set_shape_rid(const RID& p_shape) { + + shape=p_shape; +} + +RID PhysicsShapeQueryParameters::get_shape_rid() const { + + return shape; +} + +void PhysicsShapeQueryParameters::set_transform(const Matrix32& p_transform){ + + transform=p_transform; +} +Matrix32 PhysicsShapeQueryParameters::get_transform() const{ + + return transform; +} + +void PhysicsShapeQueryParameters::set_margin(float p_margin){ + + margin=p_margin; +} + +float PhysicsShapeQueryParameters::get_margin() const{ + + return margin; +} + +void PhysicsShapeQueryParameters::set_layer_mask(int p_layer_mask){ + + layer_mask=p_layer_mask; +} +int PhysicsShapeQueryParameters::get_layer_mask() const{ + + return layer_mask; +} + + +void PhysicsShapeQueryParameters::set_object_type_mask(int p_object_type_mask){ + + object_type_mask=p_object_type_mask; +} +int PhysicsShapeQueryParameters::get_object_type_mask() const{ + + return object_type_mask; +} +void PhysicsShapeQueryParameters::set_exclude(const Vector& p_exclude) { + + exclude.clear();; + for(int i=0;i PhysicsShapeQueryParameters::get_exclude() const{ + + Vector ret; + ret.resize(exclude.size()); + int idx=0; + for(Set::Element *E=exclude.front();E;E=E->next()) { + ret[idx]=E->get(); + } + return ret; +} + +void PhysicsShapeQueryParameters::_bind_methods() { + + ObjectTypeDB::bind_method(_MD("set_shape","shape:Shape"),&PhysicsShapeQueryParameters::set_shape); + ObjectTypeDB::bind_method(_MD("set_shape_rid","shape"),&PhysicsShapeQueryParameters::set_shape_rid); + ObjectTypeDB::bind_method(_MD("get_shape_rid"),&PhysicsShapeQueryParameters::get_shape_rid); + + ObjectTypeDB::bind_method(_MD("set_transform","transform"),&PhysicsShapeQueryParameters::set_transform); + ObjectTypeDB::bind_method(_MD("get_transform"),&PhysicsShapeQueryParameters::get_transform); + + ObjectTypeDB::bind_method(_MD("set_margin","margin"),&PhysicsShapeQueryParameters::set_margin); + ObjectTypeDB::bind_method(_MD("get_margin"),&PhysicsShapeQueryParameters::get_margin); + + ObjectTypeDB::bind_method(_MD("set_layer_mask","layer_mask"),&PhysicsShapeQueryParameters::set_layer_mask); + ObjectTypeDB::bind_method(_MD("get_layer_mask"),&PhysicsShapeQueryParameters::get_layer_mask); + + ObjectTypeDB::bind_method(_MD("set_object_type_mask","object_type_mask"),&PhysicsShapeQueryParameters::set_object_type_mask); + ObjectTypeDB::bind_method(_MD("get_object_type_mask"),&PhysicsShapeQueryParameters::get_object_type_mask); + + ObjectTypeDB::bind_method(_MD("set_exclude","exclude"),&PhysicsShapeQueryParameters::set_exclude); + ObjectTypeDB::bind_method(_MD("get_exclude"),&PhysicsShapeQueryParameters::get_exclude); + + +} + +PhysicsShapeQueryParameters::PhysicsShapeQueryParameters() { + + margin=0; + layer_mask=0x7FFFFFFF; + object_type_mask=PhysicsDirectSpaceState::TYPE_MASK_COLLISION; +} + + + +///////////////////////////////////// Variant PhysicsDirectSpaceState::_intersect_ray(const Vector3& p_from, const Vector3& p_to,const Vector& p_exclude,uint32_t p_user_mask) { RayResult inters; @@ -150,7 +256,7 @@ Variant PhysicsDirectSpaceState::_intersect_shape(const RID& p_shape, const Tran ShapeResult *res=(ShapeResult*)alloca(p_result_max*sizeof(ShapeResult)); - int rc = intersect_shape(p_shape,p_xform,res,p_result_max,exclude,p_user_mask); + int rc = intersect_shape(p_shape,p_xform,0,res,p_result_max,exclude); if (rc==0) return Variant(); @@ -308,8 +414,6 @@ void PhysicsServer::_bind_methods() { ObjectTypeDB::bind_method(_MD("body_set_param","body","param","value"),&PhysicsServer::body_set_param); ObjectTypeDB::bind_method(_MD("body_get_param","body","param"),&PhysicsServer::body_get_param); - ObjectTypeDB::bind_method(_MD("body_static_simulate_motion","body","new_xform"),&PhysicsServer::body_static_simulate_motion); - ObjectTypeDB::bind_method(_MD("body_set_state","body","state","value"),&PhysicsServer::body_set_state); ObjectTypeDB::bind_method(_MD("body_get_state","body","state"),&PhysicsServer::body_get_state); @@ -355,6 +459,8 @@ void PhysicsServer::_bind_methods() { //ObjectTypeDB::bind_method(_MD("flush_queries"),&PhysicsServer::flush_queries); + ObjectTypeDB::bind_method(_MD("get_process_info"),&PhysicsServer::get_process_info); + BIND_CONSTANT( SHAPE_PLANE ); BIND_CONSTANT( SHAPE_RAY ); BIND_CONSTANT( SHAPE_SPHERE ); @@ -407,6 +513,11 @@ void PhysicsServer::_bind_methods() { BIND_CONSTANT( AREA_BODY_ADDED ); BIND_CONSTANT( AREA_BODY_REMOVED ); + BIND_CONSTANT( INFO_ACTIVE_OBJECTS ); + BIND_CONSTANT( INFO_COLLISION_PAIRS ); + BIND_CONSTANT( INFO_ISLAND_COUNT ); + + } diff --git a/servers/physics_server.h b/servers/physics_server.h index 955caffe5b..5709974cc0 100644 --- a/servers/physics_server.h +++ b/servers/physics_server.h @@ -30,7 +30,7 @@ #define PHYSICS_SERVER_H #include "object.h" -#include "reference.h" +#include "resource.h" class PhysicsDirectSpaceState; @@ -87,6 +87,45 @@ public: class PhysicsShapeQueryResult; +class PhysicsShapeQueryParameters : public Reference { + + OBJ_TYPE(PhysicsShapeQueryParameters, Reference); +friend class PhysicsDirectSpaceState; + RID shape; + Matrix32 transform; + float margin; + Set exclude; + uint32_t layer_mask; + uint32_t object_type_mask; +protected: + static void _bind_methods(); +public: + + + void set_shape(const RES& p_shape); + void set_shape_rid(const RID& p_shape); + RID get_shape_rid() const; + + void set_transform(const Matrix32& p_transform); + Matrix32 get_transform() const; + + void set_margin(float p_margin); + float get_margin() const; + + void set_layer_mask(int p_layer_mask); + int get_layer_mask() const; + + void set_object_type_mask(int p_object_type_mask); + int get_object_type_mask() const; + + void set_exclude(const Vector& p_exclude); + Vector get_exclude() const; + + PhysicsShapeQueryParameters(); + +}; + + class PhysicsDirectSpaceState : public Object { @@ -101,6 +140,15 @@ protected: public: + enum ObjectTypeMask { + TYPE_MASK_STATIC_BODY=1<<0, + TYPE_MASK_KINEMATIC_BODY=1<<1, + TYPE_MASK_RIGID_BODY=1<<2, + TYPE_MASK_CHARACTER_BODY=1<<3, + TYPE_MASK_AREA=1<<4, + TYPE_MASK_COLLISION=TYPE_MASK_STATIC_BODY|TYPE_MASK_CHARACTER_BODY|TYPE_MASK_KINEMATIC_BODY|TYPE_MASK_RIGID_BODY + }; + struct RayResult { Vector3 position; @@ -111,7 +159,7 @@ public: int shape; }; - virtual bool intersect_ray(const Vector3& p_from, const Vector3& p_to,RayResult &r_result,const Set& p_exclude=Set(),uint32_t p_user_mask=0)=0; + virtual bool intersect_ray(const Vector3& p_from, const Vector3& p_to,RayResult &r_result,const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION)=0; struct ShapeResult { @@ -122,7 +170,25 @@ public: }; - virtual int intersect_shape(const RID& p_shape, const Transform& p_xform,ShapeResult *r_results,int p_result_max,const Set& p_exclude=Set(),uint32_t p_user_mask=0)=0; + virtual int intersect_shape(const RID& p_shape, const Transform& p_xform,float p_margin,ShapeResult *r_results,int p_result_max,const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION)=0; + + struct ShapeRestInfo { + + Vector3 point; + Vector3 normal; + RID rid; + ObjectID collider_id; + int shape; + Vector3 linear_velocity; //velocity at contact point + + }; + + virtual bool cast_motion(const RID& p_shape, const Transform& p_xform,const Vector3& p_motion,float p_margin,float &p_closest_safe,float &p_closest_unsafe, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION,ShapeRestInfo *r_info=NULL)=0; + + virtual bool collide_shape(RID p_shape, const Transform& p_shape_xform,float p_margin,Vector3 *r_results,int p_result_max,int &r_result_count, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION)=0; + + virtual bool rest_info(RID p_shape, const Transform& p_shape_xform,float p_margin,ShapeRestInfo *r_info, const Set& p_exclude=Set(),uint32_t p_layer_mask=0xFFFFFFFF,uint32_t p_object_type_mask=TYPE_MASK_COLLISION)=0; + PhysicsDirectSpaceState(); }; @@ -303,6 +369,9 @@ public: virtual void body_set_enable_continuous_collision_detection(RID p_body,bool p_enable)=0; virtual bool body_is_continuous_collision_detection_enabled(RID p_body) const=0; + virtual void body_set_layer_mask(RID p_body, uint32_t p_mask)=0; + virtual uint32_t body_get_layer_mask(RID p_body, uint32_t p_mask) const=0; + virtual void body_set_user_flags(RID p_body, uint32_t p_flags)=0; virtual uint32_t body_get_user_flags(RID p_body, uint32_t p_flags) const=0; @@ -317,8 +386,6 @@ public: virtual void body_set_param(RID p_body, BodyParameter p_param, float p_value)=0; virtual float body_get_param(RID p_body, BodyParameter p_param) const=0; - //advanced simulation - virtual void body_static_simulate_motion(RID p_body,const Transform& p_new_transform)=0; //state enum BodyState { @@ -420,6 +487,15 @@ public: virtual void flush_queries()=0; virtual void finish()=0; + enum ProcessInfo { + + INFO_ACTIVE_OBJECTS, + INFO_COLLISION_PAIRS, + INFO_ISLAND_COUNT + }; + + virtual int get_process_info(ProcessInfo p_info)=0; + PhysicsServer(); ~PhysicsServer(); }; @@ -437,5 +513,6 @@ VARIANT_ENUM_CAST( PhysicsServer::BodyAxisLock ); //VARIANT_ENUM_CAST( PhysicsServer::DampedStringParam ); //VARIANT_ENUM_CAST( PhysicsServer::ObjectType ); VARIANT_ENUM_CAST( PhysicsServer::AreaBodyStatus ); +VARIANT_ENUM_CAST( PhysicsServer::ProcessInfo ); #endif diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 638156d813..f8d38d15c0 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -55,6 +55,7 @@ void register_server_types() { ObjectTypeDB::register_virtual_type(); ObjectTypeDB::register_virtual_type(); ObjectTypeDB::register_virtual_type(); + ObjectTypeDB::register_type(); ObjectTypeDB::register_virtual_type(); ObjectTypeDB::register_virtual_type(); diff --git a/tools/collada/collada.cpp b/tools/collada/collada.cpp index 9962eed1b2..c416286c19 100644 --- a/tools/collada/collada.cpp +++ b/tools/collada/collada.cpp @@ -1388,8 +1388,11 @@ void Collada::_parse_morph_controller(XMLParser& parser, String p_id) { state.morph_controller_data_map[p_id]=MorphControllerData(); MorphControllerData &morphdata = state.morph_controller_data_map[p_id]; + print_line("morph source: "+parser.get_attribute_value("source")+" id: "+p_id); morphdata.mesh=_uri_to_id(parser.get_attribute_value("source")); + print_line("morph source2: "+morphdata.mesh); morphdata.mode=parser.get_attribute_value("method"); + printf("JJmorph: %p\n",&morphdata); String current_source; while(parser.read()==OK) { diff --git a/tools/editor/icons/icon_instance_options.png b/tools/editor/icons/icon_instance_options.png new file mode 100644 index 0000000000000000000000000000000000000000..2d3e98b2ea0e1d6680872748f37f6bcf53333f5e GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l3y3xj4Fey1TQpDrE#N3GHHaT++e%adYJCCeMK+OEaZ&T`zxn>?lYVA={uLpHmu2sirte~PVBqK3{pQ5_`Zu{cx*HgGJWUbxwS!Vy6 z|2yj^x`!@Se8BMa$190nmZnmXp)VP}t+sENdR0|2bgJ;($kn-`SEU^`f0BGq%fpr{ zI+5W(RI#bYCEf!qjwKe4zHZ)gIqQql^I68S4AExGPgZZ5xG_`I@sNTQ82LP5{5ORl4niR*XN`izZ}s1{vua1$AVCqWoLH!f4zFbR*rkg%~QwA z0wV<3j?Kzuxc&a& p_mesh,const Maptargets.has("MORPH_TARGET"), ERR_INVALID_DATA ); String mt = p_morph_data->targets["MORPH_TARGET"]; @@ -1478,8 +1479,11 @@ Error ColladaImport::_create_resources(Collada::Node *p_node) { Transform apply_xform; Vector bone_remap; + print_line("mesh: "+String(mi->get_name())); + if (ng->controller) { + print_line("has controller"); if (collada.state.skin_controller_data_map.has(ng->source)) { @@ -1528,9 +1532,12 @@ Error ColladaImport::_create_resources(Collada::Node *p_node) { bone_remap[i]=bone_remap_map[str]; } } else if (collada.state.morph_controller_data_map.has(ng->source)) { + print_line("is morph "+ng->source); //it's a morph!! - morph = &collada.state.morph_controller_data_map[meshid]; + morph = &collada.state.morph_controller_data_map[ng->source]; meshid=morph->mesh; + printf("KKmorph: %p\n",morph); + print_line("morph mshid: "+meshid); } else { ERR_EXPLAIN("Controller Instance Source '"+ng->source+"' is neither skin or morph!"); ERR_FAIL_V( ERR_INVALID_DATA ); diff --git a/tools/editor/plugins/baked_light_baker.cpp b/tools/editor/plugins/baked_light_baker.cpp index 1574ce81d7..dea83e0ff8 100644 --- a/tools/editor/plugins/baked_light_baker.cpp +++ b/tools/editor/plugins/baked_light_baker.cpp @@ -338,7 +338,7 @@ void BakedLightBaker::_fix_lights() { } if (dl.type==VS::LIGHT_OMNI) { - dl.area=4.0*Math_PI*pow(dl.radius,2.0); + dl.area=4.0*Math_PI*pow(dl.radius,2.0f); dl.constant=1.0/3.5; } else { diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp index 4ac2ff0594..645d967a4b 100644 --- a/tools/editor/property_editor.cpp +++ b/tools/editor/property_editor.cpp @@ -38,6 +38,7 @@ #include "scene/scene_string_names.h" #include "editor_settings.h" #include "editor_import_export.h" +#include "editor_node.h" void CustomPropertyEditor::_notification(int p_what) { @@ -1619,6 +1620,7 @@ CustomPropertyEditor::CustomPropertyEditor() { scene_tree = memnew( SceneTreeDialog ); add_child(scene_tree); scene_tree->connect("selected", this,"_node_path_selected"); + scene_tree->get_tree()->set_show_enabled_subscene(true); texture_preview = memnew( TextureFrame ); add_child( texture_preview); @@ -2037,6 +2039,17 @@ void PropertyEditor::update_tree() { List plist; obj->get_property_list(&plist,true); + bool draw_red=false; + + { + Node *nod = obj->cast_to(); + Node *es = EditorNode::get_singleton()->get_edited_scene(); + if (nod && es!=nod && nod->get_owner()!=es) { + draw_red=true; + } + } + + Color sscolor=get_color("prop_subsection","Editor"); TreeItem * current_category=NULL; @@ -2141,11 +2154,16 @@ void PropertyEditor::update_tree() { item->set_metadata( 0, d ); item->set_metadata( 1, p.name ); + + if (draw_red) + item->set_custom_color(0,Color(0.8,0.4,0.20)); + if (p.name==selected_property) { item->select(1); } + //printf("property %s type %i\n",p.name.ascii().get_data(),p.type); switch( p.type ) { diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp index c4c3a10f74..e7f4beb46e 100644 --- a/tools/editor/scene_tree_dock.cpp +++ b/tools/editor/scene_tree_dock.cpp @@ -108,6 +108,9 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { case TOOL_NEW: { + + if (!_validate_no_foreign()) + break; create_dialog->popup_centered_ratio(); } break; case TOOL_INSTANCE: { @@ -124,6 +127,9 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { break; } + if (!_validate_no_foreign()) + break; + file->set_mode(FileDialog::MODE_OPEN_FILE); List extensions; ResourceLoader::get_recognized_extensions_for_type("PackedScene",&extensions); @@ -147,6 +153,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (!current) break; + if (!_validate_no_foreign()) + break; connect_dialog->popup_centered_ratio(); connect_dialog->set_node(current); @@ -156,6 +164,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { Node *current = scene_tree->get_selected(); if (!current) break; + if (!_validate_no_foreign()) + break; groups_editor->set_current(current); groups_editor->popup_centered_ratio(); } break; @@ -165,6 +175,9 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (!selected) break; + if (!_validate_no_foreign()) + break; + Ref

@9k>}%o{kQ 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ⅆ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 literal 0 HcmV?d00001 diff --git a/demos/3d/kinematic_char/white_wood.tex b/demos/3d/kinematic_char/white_wood.tex new file mode 100644 index 0000000000000000000000000000000000000000..e003442e70c665f2fb17aca84c7b11fac25902d4 GIT binary patch literal 169001 zcmWFvc6Md}0RaYvyK9&j1o;^lQurAdO8FTWI{6tG>i8KLa`+h-qWBpYqWKvZlKB}J z3i%lr^7t7Tn)n$QLZNCK_!$^#p}3fzfuWtBfuWI~fuWV3fgz2bfuWM0fguShpUKa_ zkPo#7q&9$`fgyySfuVq(fdM3!$j`t4!d_55$Zn9EKy(H_149fy1A_<;0|O%iLjxlN zV*^_P0|T!DE5B!MVtQ&wYDGzDQ7VJ(8YTsy2Zjs`>BdbF~qK*TP0y6{W0%`djtC$!jwY<+>SF786 zxksSn?q0q1mwP6)tPTIiaJi?jh57&bstg5o(VF!P^%b9|OltYvAD>$~H?U@P)845j=-j?!28LB%OXmuda4T{Ax;kxXVa+P0|Dg`- z%>OvT|0=Mvwyb9e{XR{>UVar<{OZ!V@3R*atX7z|bW=kBru2$cLjaPNWQdY0m^kFNc4V3(;E?fO+%^FF)u#lPsl zn)BJ(OkJvlHS4mwxS}2uD)2LZZ`$|QL7ZDlORlb{<$N~xs$Jh5#FDH=g3jE9~R(##($j?%*x&QArMSJGvs{dad`I#R)T2m z(YUu(X`6yR(~r1aiuIzxQy1M1d3Am5rWU3bU)OJ2`+3SWtyQZX)Ol9!dd0PE>E)gW zS-&bw6xF$teyKkSoja*zWn8_v13Swu-bFT{is>w?cI^LBs_4(NYVN89p>r>_m@dBm zy;RAcxvOsfFGqLgUE8hn9P?SC{{8C=Rf=a?yZV)ax?;RwN2#{ST%G6zuR<9@=dMd$ z_4TTPIP3f31y@(Ta$px(#htKUWa|6kA62FgrY#jH`F>UF?KGwJ-2d0Vh%H;XsfVfV zf2~6}lftj-3i`4JH45S7t3v1ICNspZYABt%F8kM24vx~f=d-_ZF)VPf=lRRk5EnXi zU3SBYSJzDx!nu_G)&Dn{Dp11kdaHst--lu??iXK8rW(||_;K~Uh!Q`ue(&Se4)yXC zt5&Vr)Uz&IDQm-m!kWJ1tp5uXCbje?2kohyF{#BjTIO3B4)S!31rCWreh4Oe%s4^=$Rw5r}#;X7Mk4b%7i`$JXKnHa9FQuJpntl@aG zR$PIdxn*0^enoZGz?z5^tM@yw^F(*8&;Vug)pffchbr1LulU}uOL09<_N)6`t3#(w zYWcqG#Xl!;me=0-?a!={pE{0CU{j8s-{JT4^!I_;|>)-cZO7g5N4XfUN3su?9a%%teuc1op zEEWu0S)~g8ObcG^Rx)R~+|%)My~20aO)VelR@FJMGuPFA`tK;t^Z&Qg|I0l^Ep|Oy zwJ$6GXIZf7UBzeR|MKg8)Yorn39R9G7k_P#oE*(&a5GpJc{_3)uh zD(uX0yZLrGu(O1JV|aC0L7iE5^?F^0c9uogSFblw^k-JvueHx%J@Y#IRofl;nO`i> zxZ%Lg6WX+ct8D4#o~?_NxV9-jXLy3DVy4V_yZ&%bD!0z30^W`;M; z=b2V1G^xb1iA-Jf;oseD3hK=NzxMxj&}ZKFxP;k(orP&vZ_zdtbM6QG@2{Pfxw zccwV4^^WO094pr?4V`m1veR_t1vRL@kuc87vFYe3CZrFHQR z=1gmT+*OumHK@6_^!*0s=REIUe+my>YEZN9Kgab@g>aVpTNkV@RsJuc|5q!%bm@oU z1x%~rO{V%LuUfFKT14$VQ^&9WDtp<^XE((E)iP0h&$4Rmt2LjM*|}CNxY{5x^?deq z?G7b%w!oUdtGIrZDja9ozpCMDsnThmcHZ$ ztyA|4)#Qb_bk_bYtnrP`U$JACL5Xj2{Gt{A6;fG})mPW`Ij}Q#?R%T&V9s*)zv|jT zwQ!bo+AF?oQa;c8_*K|Chj!+!Rk5oa*jXA@#dl3o3g^){^>oFgmiNV6++VXUspPZt zulvvWS#3Xy_5aS-pB4C7R=v2*@L5q_q>C$g)#oWZ!3-SL8p2a^qq&-{YF$>C&)lH! zb%9bTOY%C6o$DOFGp**@r;*NLP_p934pn>B!Wypd{jZ&tvowAE{6koYohxqjqx#Q1 zlUk}*JW&0vAkVytDb7UEpJ~%|N6g* zI-5aB!@sX9LY3aLJlI;hC{(qdscXSiHE|Y$60Uz+mA|tX)Nt*uQh&~{PF1dDZIg zOfKw9s}?;~U}q61S=4Y+^E!(_$-i5#)!13z7cXjP3UE+o*6PyUs-n(P6ZiXmyW?@5 z>#N={e4dh<{CCxV1rxP)me>D7nM@VFv#i?RyFf(Iok?%ePDOU!!WPx_yYx$!exB0s z_x%Fr|I7=tGdNtnGq2{(Ug5yb%<*bzlLI?T#s4m@>ze#bfA=!0u(N#bS=+Em!=EQ~ zE(7y?gnm|bXJvSG&;IiiO-3fh zW(Fm5)|PW!aZDnL%b9;~`c>s1&h%)(GR1Z_fs&+-nAMjQ*jZv%yj^rzMO{iX{!#Vk zDFP+emagKzzE+^-YrMU7+0w$Ay{jK+tQR#XS@2Ju7Vl@tHRgoD~L1K zd|S_@a-6NO=C76p*EE%QW`+eT!W51()^up9D%7*oWQBJ=aGKA}{XRnLe0J#6rd6v# z70g*m6n<}Cr6AAS^6UO;t-_jVOINH|6;-Op&z$l9-!+HzOn)m@sP5+ptf{O2z`Uua zH~H7QaK-N|Jkjy1-Yd6@tnvz9wZ3Cg%juxIt5z`;w&+A(<etAfob|IW%;Chm$(f|Gy0i z;cV-Y?RTxZzDcE>S^L%cuMYOi3-*Wac3RG)ur5?(KAS+vreB@imzAIMJdW@FUsxkh z^5~AojY(?lEKGIPt1m11Gj(l!sj;6$pyZ9*f2I3OABwkYFmP;Yd7m9^ZMyH0GCxz8 z7Dw8AmQIBi>p^wVz16=DTvk}llBcEJ^;zXT(^Ul~jd-?o*{TXF)?HRMXIj9uRwJC{ zeD+nYZVh*q_u0>xR%wW{ZED$jAUxJY)t`xDMV^{EYhlZx^>4YAH2@w`7D!K7sz=YHlDtF-<)vNQkJ`tw$K zJ#)4KQ=Q^}R)Z4z{iT0>>v{gv-ul0(rLZQ8LrY_mVmfo(Dy$sfQnL~GT zX*sYn#s2Hk-Onaa^7qAphD}P_nW|SWP*CR)DA~H6f$Q^>zT|aT42t*VUI(rFTle7d zlvQ2~On-H!EnS!W|My?*?^_LOzW(oiHBI?F^ZSMW{wsWEnbNTS-hWSa7T#Su|4&o- z&cd~N>-A~M+gZ5kuWv0=U}srT+O%ey`hI5J+WlW0#JM%Nt5|rIzVE*SJF`*vqEdx;mYykE4NNZlEN6f5XN4-7GsUgCqfqYtUYSABpJ`FO zjcUEXrWW(v*H@L!Ev(ta9lS1dZlQclSHo3pP_td#X!#3JPmCk{eSGNL_t{lkTwSGe z-}4mzWmxeGq=TuU!rFmd{`#x0FHELRYGI1n{UUU3V9krKzy5#j39QlGx87c4sz3>I zS9rq$2X>~8PzD8dzW2oqp{rJ#%srnS_qB@wR6NK3U-iI2oOx^0zyA*QOp8L-DzM8> zYN`Lq(e=3}H#wYZ#S2h>^gF}8(91o2*<36BZ4I5vDp0cM>-Y5z`aDW27q0^KTNmwW z2oH6b&fVN}wRG<1o`2tTqe2z>S@tQcstQ%u&b{JA!E}+S1|@Op^tBwsMb@rcWU+1O zrk48q)fJ(0H?{n?{lB$Tft_VlH5b=31##xkwGT2J#F;;Zm#v>i<;?pQi-Ygopm>5GdKy!=ROw`FYB^?Ca}yF@2t*@LxzN zVlAk#u}b0X0+XryCEAa^u6MBK`SrbX@8=$anqRBdG6*ZUGp|}T{gi`0tCrIC)h1IF z+L^c-t|zcFGjvT2Rk$wPwP5$PvZb4Py8iwDTRQhrPsaZBs~zUEd|kDG0aPU2`?X+& zgF4gKa;-#uuJY@v7(}KP*4zzUrBKc)P!b>dkIR8wbfu=;b4K*|24 z`?O3H#hK#&D=X&9ozE^`wcyv~p7+_Y9IJkR?s;GQwyS&fgdnY)xZ#LGWC770#iq*i9$RxQv*Y+13L@Hss(#Z6y7t>vQk*((9g`U>cLkBb{36Q z_5Vv1`v|e3z5NFa_@Yg|{rG{Za)>nsgmWKa(nM@S+ zv)uaM|G-31o_YPMraA|AmQ|~ou7)bO^Dr>2(lnWRxuxP)tAmK5KF`%1@4`Wij7@sm zH9jkbOV@S%S_f)j$FBRY0qRe6HY{2ZSTm_*X_Hf^<8hu>U%P&9YWYyCv1&!#Wrgny zU5fb(mlgS$S2rmARZ?fIStz1k_>xD`+SFHmLh;TBkdIuU0S@deQQaSImrK+p4 zR+TLcnYt=pli5LBn5pTS*0!Z4Q&;@{x@y|e(7F7f@oOCTS=Rks-L*}DpZVW^a(_u1E(UMWmx+tec375z0-v7Lphp`NQ$alhg+Mg|i_ zbsnvHrUhk74QlS|{^|-<@E3|+)BWrET7i?O0s?g4`TJafU>0Cv3!3A;JpcebTRbLle z?pc?;clBcB?QDfDi|_5LH&Kyi`nP$NQaQ`I?23OYl&-VAFJ8-}wJ20coJXT>-S5vm z=d!P9E3Epgc%9|iiUnFC3i8Zz7j^w`xX!G-nS1WvSgW$0t*|Ek z|BC-23jEBabt}Frh%>ib{m-q+u2Ro--I?&&+IGwFnvDja9K+@iI0 z)vHh?e;$tN@AW2AKliviweK-eb>~@;(7_NowJ&+q)>R6jipQCEH!(6fgtI)Ye9#f9 z;Lr2z@9!0tTLNo#Rjk-`S>-wNTc`MU&f?r$d$z6qJjI|SYx`bXM|Q5oN;UffYlNpR z)zVN*XDzJJ3JqPPD9&2LQ2+jwiSl+Pt*46o+MJ zXWnDB#D+a%a-ay z|J&QV!d;$O_tF2~j{jM1yn6L(l0rIj#p+d@isq~}FSUQa`mEs2%(ZIuUx($)8u|;& z9L_WCU9<|^9bToiKYp4ht` zirba{Gu7#@b6{uIydJmOL7Zpn+GeK0meRSLD_5>GQLkrN&Xx4bMESqS{$F$XrY)V+ zvhM0~rfq94^*sHnb;?AwpE>6Li``D~%;CSZ8ywhKt}`jDDpkJD(!FX`wu#DgmPK7L z{US>4Ogb-AmGf2VnND50?!eB}a41wIT*aU9udX6H>!gw8RRX{wLnDpQnaT6C33L7(+fPrRv8lY=}<=!!*6p$h6O`>R2tO7cuy z-P;w!Sxu%gguYT$VrT9RpRbh|&a&^;fd{3|`HZWkD_mzanVKEiwb;R&MXCMNf>Oov z%m>1{loY-**Zc~9rO3~=sb$yR*BYe?;Y|ABy$YZRSoL?2Qa#J(p0EEFDcon9R8#ee zV?l_+amM%!8sRJkCHL;n(`080EZO%U?EYtUbLIsr=I>MBXRfh-AFiU$S6Fjm|Nd%F zJNNmX>3cURx3h%rdZF`K=|9uze{WTt$GE1 z)|RSO3l^Cugfp#WSfRR~WmC&LjjIarY@1rj7sc)uQR-)zwrbUiO$zf__U&8Vuvvkf zo9X%^15nR<-Ktp?F6_*^mYT0sVP~mfy1!aoSzeK!gR4tq>gyl|1_fn(HlE;y9n)8e zsM<6A58JPn&z76~mvhyw%L?CF&Mm0Uo}}r|vaW$sYm@4K7Ot&Yi#Dm1v;27VplXsr zJj-hCu9cS+#JN{7tg8Rq!(YP1^*Y?4pP6gb{=W+8EHzsH>%Tg%GjW9fRqkh*)S~xy zy~1<0&pllG-^Z3JwsSG9S|1J?Xlqak*Zj@`8d1ON@}9Mafq~(Esfs$2R$hJrJ9CEq z`dtqEEWZ<~9)mhE41431-?M)1X;{6tR>7WiiUQMu>S@aRnHmjpxiYt2lmXomZXD{NU?m5hZcvxc$vt3hXNJOkH&$3gQf} zmE|18c{rFj>OtfA46EwamMZ*bS@7%Ysu0C==I^DiS2)x&t$OrYVYVpyxRP4zi*9p7uv;L6$sD;9a)XRhlD z33XV`T&}?N-$9*wl~z-H+1#QQh6Vp@9r>9SeEXZk&eZ=ZRzsfka?gWD)$bkhnVR;0 zS3R!zpXvT0dk1#z@)y?ip>x0V>|ZlS-+`Z*>HeKOM}C$C(W_R6s>icb)vtPFq9o1| zx@Z>{s9Usl-Hv<*b(Tfp?`usI!YVin(K_5V_P*LQJT?s*-=#Gq02dCHrhgdIzpr!Do3zPo3e_Ij4S zfN5!M7pt-Rb@l{NPHRrPThhA#}4UoRds$T?} z0%2M7^{kSCg1qqie7~x|n!fDn|N6|Ad-{^UuGd=aQqJ^t)efCFLR+-Mi z^{ZCvvpPRh)9UT2=`534zVBP6JD)AE=D{q66($PLd9L#R_zxPW)?aru6f_##v}%34 ziNbwmja7fl71)`3Rs?YC*@J3;#)1u+$3B; zCQ~P|wycO<6(*v+3*0JBD@pD@+vFg&)Q5eGlrmhHh1-m%a`0OrVLh1^>P_fo8~7UG4q=8Uqmhz3PE&=-kUa-2Y3pL4yYj z_177$uT_xe{=aoW>D&*+Rl8O(OjA&2`MYXW18B;%_P>@^DQF&NcEbt>bC$omerc2{ zh;#nkx0d5`Pv~5&5Jyn9n&0)d+d-Zyd);5A(xsPs{>T4UI4{)YwPGg&gUM9i=u(CS z44->^ldmeUbAUSgYZtBJFi~_D*~=WaXxh?EE!@lF_k&s>T3lE6frayQ@~4Of{@owW3NvpJh_ZzpE?3eW|5g4XZ*Gjx*o;#r4{uor#MfLZO_k zu%>Gl>-|uL^Gq-9uXbQ(X?YZ19;a}hwdK+4y>CMm(wXbGHqCQjXTG|-sl%b1`~RwY zk3y!3Osx$o{jZ?T((_{ef^`n^%zN)^?{Y|Ieq9B2<*MyW2OPwi;#Ry;0M#Dh91V)! z72KJ$R%tn?Gu1Czr2uODmH%sK5K&-ftuKGk^tne-o;miHf{0Q$^Z&R1yByf%|J@B; z0~!G6S{1bdG(+9-sy=U1%lqQ@E4bHg>M^JhG0uAMA2fo%wP@cxP_|mNuB-l%f;ji~ zU#oR5_Xw0sU%|)Z5HA0h@$_kvsjIz|7&_uUPw{kWxS_lHbIyOlwqpQYyhdV6l? zbe7d`yH*J+JZJg0b`=w-!uYDy#N?>XviH{iA0mqU%pC7B4mq&1FvRU&0V=*;E#=~J zT+Xt0)oQB{#pBGYy6c}h`ZH^SsYqu$5sIXy7}v>77D7+ohi4zwXAHDF5easCxMxH1Pf7>MAP{<>eyL zx{FqU#&Yg4bu9Ya)0-T}#rNy8;&GO*3@i9RZMv_k;uo1H#EZlpdKqC*V={HsvM5c^ zoHp01U!f)n{X7j?rfWmy7Pd4kDBWkGz|Q>d_AXt8_q-+lwHWG3m-%ejjgI2h_)2ZhcJ4GmTBS8$hOSW!D|sZR8Q6ddRTYD1NuGcz^St#z2s!l3naL8!`i zmWCBuSD7gOXL%KB8Y-f|&JeLt3eA>QFshwp~%XQt=$=8|Qo?fN6oo!PK*L|+P zp-S@1i=tL#Ij}Rm)@4%lSL$b8udy#wDV=HUD=r0bw#z+_s(y8vD8FZ7TB@a_&-%G% z_3B;Q9N3vxEdQnNV$PMBzdkN>uE^B2y8jiP^N36h?TTG$GWGM6+jjpIpR-=>d8E~q z;lR$bXjR?1&pjqn6PGbC2`luoWWD;d>$BQ?=GtAL(O90?IjfpLJ-d7N7&JaBKW8eh z?oiF=7by7~`j25!i%v8b*NTuyEo$OYEB=3-)RO76B5wb_z#5(CtG0Yxpux0dUF*L) zxAQ!DUtc<@MWAH$f>rl7DX_Eb>-xTE6R04I){k>wXI{E>#dnu<=IS3-uN~xhqF(&b z0xgL6ah-u-lhSgo>aJI-CbjfsudU)x;OAYJ-M`mL0W`_;oqH9iWAU{^X?3VlKhx@R zCdKV61||FdGN^!>xc|Spv#SL%hkvgMRWxUbzy5!Pi2^%Q9KV)gJ?rP5uSN&nIj}R= zb8s^_>a&E}e}5gSpwGA~&N-g-bI-4zO>xTiS$pcQUR_+O=+E*uZXJV(qCHd7?R1!z%2%Y*o6Qo|G&tAUF1*vu63nzg{PMAR_`iZDl&Edbk?n)nl5bB zjz^)&_nEH#xR;{OwBGiW5@_s4(8p+nY6kU)bFzx)Ns68 zmF&-QDgNyo6GeBXRUOqT=B$%ic5yQdOtlH@OkGUn4*EiO)h1*MBVPkCRgpcQ&UL7%x;i>X$*UHLpC!&e1%-pf4|H$t<_reKeS41 zIcxFXRsSCdE12_yE?V{bQje$8FNPJ9KT9a>9UeK_g*HBy30Me z$sG(0Zym~+xfX5TufWcn%&_RS+I&8pXa=QK@t=FnXEP|hRu$3kXX0R5t#F^EFL}iZ zE=7G-fs$PuRqGw*Gp$+?uE@@^E_(&T*JO6)hK5)r2Xm$s4cFE3mG(2Meq14<@SmAm zd+&b-b|!`O?-jyX18ZJzE&A&;pIKFp;jcqHGXq0IoFh9kgU0%JMR(?!2Cc0MSJ?_{ z6g0w_OqA=H)~))gc%S8R&+>nW%s!ctwgW~shcPf^%M&Dnt;6b7KbneyM zO>05x2KW6gXI5ZmDQ>9v+Ti@3Rqy@Z-J4nz{h8~3Yl$ePv#ejsv_M4Boat`8lA=A! zq?W6S>$I-3PHOqfq4ifSou{Uhsp0PDDF!uls~*gE{LZ{PjEO^aJ#+E$k4raDLD9>-%c;e3nZ+;k#C- zuV>!Wa&?{abe_vSU-xk>C|&xwr+)Qo#d4OW|5VSj zh)i7(zF#4pMP%yr>Q}1u42GKDnYiwiYK61>&u-Wn>i(XQQ$uY&o5<9!uN2-*Q!r<# zf8FsPH0AUE{e$vQ6?SHZhJW!6XEpZ}&*>p06Qr3F(<6_&I7(*IXos*ui7U$U0DR6(72EAu}l zXL+V|3fI)_*)I1~cr~v8H9Y^tt#}}!&d&2+y^9GnSt;H<gM9(wDtztCIG7 z7J-sqTeXzetL8JUV&HNXXU)sF7`^*b= z#c3&s^Va7$>gk~DRqNE} zvv@kau3DuwpC!{NR*OsXJxiC@Rfa_hpd}o&t5zv5XA>xieAm_RS;d}d;i?4+;%x7; zS9L9Lx~%-4sfvL?Q(VcOnSp8AWd(7TPL5sEKP&HNS+U~Y`p*jHObjbRmH)H6FYee? z>cGyNy-KTIp`7J>_N$n;3jAz3(W}C_R$W#t=l->pq2Y25f5}xXrg(>ZmhTD=u6|ay z&-7YjrLsR;U`_Xi@1>uW{aN*zW#!Wp+(-`hLu(K@saqoAiRygyD z@9+OPFK1#})$Jh8+QPKz-|bK(dB&z#2YuGdJuhmr3l#KOS_-bdTiaztC zmQ`z;uCvsy)&eahV*GnZbH8#pGsl8e^$zMxN()wL{AV+$S=A69E}|gL+z?ZH-}OGz zgYU0Y)+>lJ|8iKhN%g((&A+TUpb@(N(>k<4i_2>J7ravT<;~vS@nhb)>`OhX7I0)u zQa;Wzzl50y)N*HDRrPC=!gc1YJ3IB=k27;IlqrCcz`Ivp)%w{4N;Yq1NVu$M&$4P& z!~IQ);Y|Nu{7~Adq!Ib@hVqSEY*XEUUP_{ts2@XKHAuQb=brsM)76{ho>X zcP8yFCY9wZ>#`Xb7O0vl)H5;Y>#G0fuUWN<$qZ!Ms;;X2mwQ5a=W1%M3N@Mgc}mj* z`)Q>L?A%(5cEy9*s0^!iUv=P@*-;g`vUKjGmabK+GD_!O?rB<|^mp3Q&prS6f5(+6 zsLL`fShaWB(oH?9R@8$g%v%_`t}B!-oz&7$^?#MgR0VV9m0b@^6wF0db^QHnGIvwU zi!RmmAyW%$uCHFOK2(99IsWUS?+)rL;Yu8*LKW;~zOLeW3+gKWTg8zTI`>2Is#Obi zf*RnfR$b#1QDB!}u%GD$Xh`5?_K&Ba32v=jzpsOO(g))IufE*#zF7Wi_v(63YiiA* zhPX{FI?=1RR(vh2>C2whu&Nrg{y_fs>Ui!=E$gx?7uEjX)bcuryJ1~CXbQby_y1~8 zy(+&bboGx-ExE~B_4(PGdb+$Ae#dKpx@}$St}1M5IUOX-aKC=lrJhVDjnylggs1i< z@2U^yQm|)9ezp5+lf!=|(?`1$+2ud?G$&cuf%+u>lJ<3#E#1`8{qq06(zymTubNiH zi%ga6%jTG+wOY8>proN{-!GA=@3W(74~2p{4eS5M>N>D9|Epik;K0uP|L-dB4Aylm zZU%*T?wY%=b}<-~gw9>GC{#h8ZBxtF&_^pm6~u-Ay^n7I4>m-tUSKlyeD>#_x=eh9v6O8zkk)F7L%#VxK=F?nR>ZpU+3DV3i7Ni_cY(V6H$=o zu5a2u@AH&REpM6DUvr$!vPx@Loryv@^P)xnuR7E-?>cbrzXQ9_ivQv7LE}0VzxMwE z&7|+rUZs%FT3EAw4d)Fs&DI%$>Z-1o%{ui_P+^9j^& ze7{-_TJo^q{@(Q_it|~z{{OEERd#1t#eIKosN!}OCM~&Dq00F@9Ot+02lY}Kloxe+$noM0#Zy)c#&aAcST{UP?`@bFEK@I6^nib&+<}5v{YqTts(pjdws$H?p z!Jq3#!m3vyQ+c9)R4q`P&+41Je(5SEhk71cEgJ^Vl>EO1EAE>phcjvEZB-~|z1+jF zO6!*Mbrub+RntNh%2~E`SKSU(2xrpLh);;;zOJvo*PsT}Rh+8i)Xu`dunYo{aUAf=9cAqA1SP7dtc1Nuu{ncRISaruVtcqUqs`^DsZc3Rrz`blez1% zSCwlV5OMIAoW7tN)XUM@R`Ck78spFMT&>GJ=d*w1D=L1MUzh!^>cS7GTBOb_;&%;oD%zSW?W|9Q%}?3Ya|Km`lW?q&P9Lgxn5#IIk?5u#Ae z@_oJ5gAkQ^mi^zBa+NAC=h?cSiK%Sq<(^P&28L-W=b7tQDJ*c*XI|amvBH6!>D7;C)er_B|f`s(v) z#s6%=QgG#?jKI8h=D)DSZEk9ShS1?ij&Up2= zBRkuqmhGjF?tNBPmx+u2|7cT7Uvku`eaxT{ub*9-43~NgYX0i?t-7Q-pCx|RitU>e z#95YhEoiu`c$``H{x2@4SYCa=3fT?*E&3BTGbVIm@J$ zT88y%?W_hhwG9jYJ5A@Q@8Z(_JjJkPZ<9uch@w7=*6shwp-S;At5#~SFI7Cw@^+Wj zZ_w<-D!rys2Y%*PtCT_&=X1BLQdsphbnfOJ28IshcDBMA1uliZrE2y}T?+rz`xU=4 zFIaya)JJF1+NYq-GO1+|*MG=lt3up<6SZ)zj)tsNCUbeB8<^HAKW8(jseAB0e3PO% z%m0M`?@g4Rb8D|(dmU8h-1xUo-+`TF-+c?KP$hAeRhp~xLzVV3=e>H}q`=PFQ(ynN z-b9I?WnKAdJy5dQzDi5!K1*Rs{OS(p<*X&)9gkj^D3r7O)mr^ORH2>a@1j+!O%&9b zv=*#Tny>twXT_^pP)C@7;a|APR0np(YzzqRGU>V4@_>{A*eND~JEg@myT{ z9r>9;6?Q4svlX_i=V+<|b+uP$bcKFa^XHCj=GX`7KdL=6ldSjnGBv?rfWS=KtSo6{2#SN2w{n0W=2Buxe3!sKR+> zrq$Qix`;EassasiO=^jHs-VKpx~XNY);}%h{Y?Kq#Vdn41MBpcDlAv3XKc8qkj`dM zGVA(&hBAe47Uli*zow~NXIa2>YgL&-JyX+)zl#1m0woXPe=nG})SzVj|F0_fEQK|z z?lY;>vs~^8`>vrNuTsyvmZ1T(gW@|ALmX(9%5=f1yNdG6J&&I6R&!_h+*7o_PVqb2 zrJhCW7Tp6?qAzTAtu>wcxu;WYEtB(pmIj8?^FTFILl&RfbkL^ZH~*i) zde%)XT-6mZ4(u#Nq5p4z2WwWvDao@G)^IG-&)m{RJoUO2C>uLsW5oLan@4qT4Km*b%;^$U?n$@Z6xei@ck!RVf#l`(u@jdJ6N3YeV zEmc0RRKZZHmCo{g|D!7+3gs*ezpnoNthAr0?7F=|I$L1PqU#JRK5M8m-7EdCyq_(w zrf$P4hRX`mnO|$K{_Y^p@>}ai_-BRlEL!z{Lq!zYnY8}?R=Vy~&h$TalL|YFR?xaV zmlgIiJqY`+u%E@CX8+p<>hDPYvM#%0wvs9+S!;j2t$v)v zpkx)p)g*Q1tggN5LF*mzyB;WjRw%_U`t|OMLOWBL!s`TirckE6DxgXIt*f*Y*jYrT zetnm(^qfs(YG}PzoQa}2%c{q5uS^u|Sr~R)e`lg>&&056zS4CT-Drki*A?tRBTDz{ z75O#9Ilul_cwhW^ik5wXahe=Z@0|F1x+{y8{SsXb@miGIPbPH{a?rWX?fS83?n*Fjuet5o-Mc6l*qF^jj54X<8?OjTfK;`+MCEuTdpqjXiMqCeA$)%TO%GcUUS zx50&TlJN}={Ofd*Q&U(xu6036}t8;g)IsU_2A743x0&F zh=Y2=U%6LJ(_m-P3g=L;SG>>p?;c0#+`i;j@l0v&S-STw=rU2tXL`4Hg?2n^VNEzk z7l#8oOXe;uh7g7COrhE<6x3NS_mp;DU+KWkw0`k_)pE8?EnSP&nS)mJEnWRcRb7Rj zQL{@ioaJ&))s8sj<1CX}{;zoM#Lir^X+^Z+eKvys&C*=O;yYyO2?V@uY07-uN=ddPbfB&q&&bkQxIL~HK z!%-jpcas7?%L4wT`#&p}Gk0mMy6>RR^ytND1#wn^l6S8dqMZ7f;#V;!pJx*&dAh3M z+hv9AO#4GpmF3wATi$c6TyLT{ouziyo8Mm)#aW(eeP}XK5NH0q>$;Y+JX8Je)ym?m zmwQ70>oYm=vy}e-r!Y-Fp6T!VRf_l7HuZ$B)=)6fu4h@Lup%NyJtp|F`wL;sR=W@@BR~H_DW|Ko>lU3?jL+7qq6%pokp08>Z14HOsp6IWu7#K|E zzLzf!f3;u*D9?v;f%en(C5Nu!;tHMXn;c)&u;BBQT=`_pwF`cLmX0$qRQ(0@k+r&3 zuH4ijGBt7$!zz)flek-caXnoP+IhQfMZ5w(Z()truj>y$?R2JJT-zPYxmJ8-SOw|= zuB!c@z|Iy}^Wy*7PnQ+grNh_%SarF_phlDF%6d?fn}H#|>2uHf>_rV%yBy4!xawCc z_=~;IZu+`t(dV9`7N(V}lt5i@?p0T>gZg+YR>l8!C}-NmuvLLwbP}l16CVN^Fjxd? z{A}vcShX(Jft`85qIGc&+hta8)PENN%{?)^ss}l32gCcXpb5GMtF*V8D2U51Th*Wi zT5R}T>lH)kT%G9h6{{JhE$z$R%f-M@HurK5&r$}4N1uC2=LTkmu9~XAFQcTj>Ne#J^I7>9X&$W4KnYT9;iqcSY!`RnwLhwlJ*% z&3YS@G^`43a+of1?@{dv&?NX@e(rG4q&O2pL+LaHer_#>irCV*1|Xo9rXkg8PtAD>JcaUdMsOZr8tf0=bW9_Oxphn<7ef_<{ zitWt5KCQ2IJkJ%e=fx^ecWS9Bw^F>=q?T7o4B4S`1xkJ$SW#s%w=bLNmfe371%Bpr zr&q01*w5M$_xi*CP(^d*+vR_|9FMcaKmENxMBzSHZP>Z4FH;O^UcE|E>SvqO!qt77 zNkqY)M`=~oK2UdGY457lp-R)4U;Nuu=P+I92g8@gn_7I67c9`42HH9N>(vJZ(5B5k zuqpex`qSo0azS71pToYHkND2Kl>M>uZ_fb?)*irq!S^>e{ahRyl~vuU)OhQM&Z= zl)tMOc28USWlHRCrB|RXTloKuRiKsVOl#kBDS?{h4Em}{(^)@HnX&5CItPBPFop$8 zWlIBVI2oD})S1?;xUck_?{ZJqs#V`Xnf%ng)z?E6_?e!)Z&I*l+tgD2pNq>xQJtBa ziy^{MpX*)0K5bChx_>K!LO9!`ma11=;N2d7S2ZkfNN1^S=z1Nh;Ld!7fkDY}JIk#V z92}ua?o6Cb2UI{VS^ej(0z2#Fp1u3Ee}PuL?{A0_QHp0?rQdPO;Xm_sE`}8j;!OWn zO;cLWv#Dk8|5Xa0^@eq|FBCzWkgBiOC45#q&l2DFcrj?o`#ML_UlFBzrd179iuV=R z8JWTr*g*rYFZMQp_Sdbd{iY($6Ik=>?=J?>_WjrYudC>@8q~b|`;NguoT>bJlS({m zUvk_kh6V+8*6gpV7BL8`TxSkl^_oe6pEWsDVHLw=m2{@HE8Z)xgSG?Rf6XDH!p@}? zzJ9^yo^{y_p-hVXEV;?6;#VkbXE~p};_50zeir_c`fx3U^{lzc-SG^o9Q+yo{dHhx z5h(e#zCi(03r}UxYARK@&(c&~9}eoHtoq8J^d8i%3FUBLXRcWlzCyvAEwCoz@2>bz z#bYG#Iby7>i>Zvi#&sn+}R)vcw$}@K~)W3F^&b(+rJ(u%w z7Oe%93c`x%Osls3SEyH<&lL0hA81ei_m?3e3gJ9=v{o&d^JgolxppMU~9a>u*)VX+9 zuR3Ki_kD3g!zLAdwn;6^jd$-gQR!#dwcu0SXT@~s7b_lo|2(DBiR(xCifwCslmCV8 zWhz}NP;;&KAD03{C)_?TMLJ`qxCko%z+PtxQhhED4WxWqek% zXL;T9qB>NmoLTq(-S-ai%=7wJuU8OfsZr=yRp*e-w7cTJlD+8p>{H?2|8MGf6Xej; zy*jYvbWrE2{fnH>v+Q2Wt+h${K92?$)Amg*1~paT>$ol}%;$-Zea{5i#PI!nJ;Npy zcHw{jOBWQj^dRCz zJ}Vt({;yRB8oy(@x9a_8Req+9>{luAEbF#E{nzcC@9Bb;s%_tz#js69p8NaXRb1ECicF3F|9^!GJJakP>y+eK zF85sTTcP})MP%x2jR(r&Y^8Ixlx8fOrl8Nf{(qI0i#hYvdh7e3+4I*6x}45)HLQqh z0BzA=`t?=0on>8i+;)B?(6rw|CI$wzewG@hRsX6S+nE}=v=sVT3R|iQl$6<70&6(e zYANk!4V{}hYtagae5Mtzo+^m5m`qJDtx=I@6Pc>7cXxlN0z1?F6)#iRnbs;TQkbrM zpOK*hJTwr$ph1D3wXh|8Rl_Q$?M$HzS_SFKeV zZP;gp{Y*0!?NXS}I;my#yG`{D z>@26X*6sbQ@Sb@USM>`Aeipl~ukS7^@H4%;xyI`gt$TKW#tng0G=rIao*sio-uDXq}C z?~CKtalJB`Yfz)RszMpm0It#7HPuAnJI~q`|MNi;4;2gy(;Xf0@t1jjDY@1s4x7zOq532ap{dQny z&RPE~-9enWe$lVp&i*V4D}Kd+M%1)dU41H|u%G48|G9ma71^17m;YA2&$cdGiDA2* zh^jo(|KD5Hp0gR0eBI0NLPYaE%ddSeqBbd2J8EVms@kme~KRyPdbQ z#J#B6b6G21`25?heVcmT7cZ!9VA$02p*Zi}gI^B(%-dJ|e(#XZ+_Zh|Rp;Z(%Drjn zj^HbwUakiR{1+k&m*DCM}{|XJ=w$`9V z;eY90@Z8m}`uI@g=`0Mdu7;K=Z)ahs4-Exv##8wJ|GtB}{EPorzklxGiDrna`n9=7 zCz@gD+7+8xR(Un7s{8f1C)0_WY5&*NpovGf?JV21 znwU(L!pjxl%?tP7Pmdic+zw0USvs~_B(t54@oo!P~k;1B7 zCW_mc!WmX6wX+7+#5Sy2;O@_SebuT(j@OyuyRiVpBpLx~yRT`jH!1Dc%G(aO(uU9?P;a6&Bs;WzQi4+PlAJ-PH2bj%%HRI#cGA~)Xn-lr7t@}Z=qP}Tu&?i zAM9%RtUS?c7cE$&IG?-bdi*+mlc^ty>;JD(Sk7ipbM>nhhlyf3%hlhYWxwG}U;n?? zif6gpv;Fy^1a{`D*8dV5%9+-6{ZP8jW>E6rSM~kRO6Qpttg6ybXVHn)TE(m2&J{-__!kmNQL%tl&`2wCYuYLOV-t^1b^^iv4VT+1mT2tP)W$ zXIb@sUe{$+bCw+(T6LEdpEHNu__5#lJ@`gfN54T~BkX{a-= zUAv;%`8$jK+ohqOb=p~$|JMI?Nx_^Y{`-o!%PQeK^_ zzmD$G3+n3P18ZIfacmD?A6Vm?tnvRZQ(=uxG=r8dlS4YwtMBhM>RCS&uV1y3LrI^t zW@~-5)@6lyrgf`VDy(M>tl7J6EtkW3uJ6?y8lVni{(25=dzKHye^;$g0*(KLztU36 zXA>xyzp814i84P|xDvx^)42jAv8y)d-Dfc<30<&4t)At4c2$&u+I)@uqLw-epy?wG zh6NR$dvv3_7??CK_q>-c&SGk40Ch~)u4iHbHJiVdcCQziI;o}d)vtulJ(E~l{x`K} zT~=ThX5`jX2km%Gc%ZNfw5wUOTSv)3U7l(6-oGYO3tJd=-M-z zXsJ3gQ^TrS2XP^$Rja>(7RxH^TlF_|?&m37|Mxnu%k(T-{p&4gW%xTKrmvv2vYsn0 z><0A}zyDtaDm1?SzpvrI&a`j$GX;OP%RO56`I6EG_G} zY8xEXS(p~-W`i~kujsg?4_eilR{nUGh{APdjsN$UL0fJ@Ywb)F^qH^!=i2Ac&%FAz z)M^KDmgIj88lejQ%!|X{{dSON`DMF)m5D+-bN8z9`wr|vQ7^8(1r21%*)gpEEuH@r zuceUB_C7oQ{VE0#1$OSQt5z|9dQDYV_pfkpXQ{4Z_z|j5&tH4>-2Tw1lWNKraj%#* zcT$UjI;T?E+)XX}udiz;RXEQ4wwr5}gSp7nrVsy0=L%0<9lnnlw6I-sRcL6bf;`Lp z|4lza71&w+?>lg-R6(9Q^!@pw(5WI*<9F>Zb%%<13$~$RcoJzD(q+8+OTSo z13zO=f%&`JU!o!9faH}#wjTEW!tZBmPFbd=s|#p!&n zgI@0AUQoL9d^Ts)u2+{8;(3<#Dlvg}jqZH3XpxCxI}7*T^@~Fl_Os}jYO|Lrurp`v z-qPXlp6Bo1Svx}KUT$e!nj%p~k7U+Dn+ItP(%a)o&D@uzUGiwh2X0i6qG^zv)3#B z>6R+-vo8I=S8Li*rSDAP48I)MdG23t0BQDsiL`TJrh%y$kb^|8MHzfrY-$E z<@$bx=i8Qk?)m$V;s3U!O5(ylYqUWNDykN|QwW_KShJtux>l%SIP))ttDuFlt2nkc zfG3`rzJE1UP-p(lpdaHP&b*#s(Nc$amhz@m-KC1*OxIsEDA==po)Y>bf&`3CK*`fCkN=MMnV+xQ{M~Un^YR9!RgUIN)maNv^w|Py zihps$Zc^fBX5xC$>A=s@wQH)@WySM6uYWD6zT8vP!d4|R0s zsrdgV6tp_SPW^7Eh*CLA*Q%}BCJOdUOm*SP$5|(}FvQiDkTp-Sdl|F3p8g-*TH^K0u@rTwg*d)95Q3v*y+X$y<%1$7=i z#C=b`&%+h|cHgw6!o8-oS4*cUwzKfWukW4)IBH??T(`fHm-GilF6%^-R?Z$`r(z>$}!lIm@$LUG!>2 znSwY|sX|wRIWsqCExS7Nh7W)DIfye=#qCnDXBC+m{{B;(gE*7?i`5DFOtY;RRN58K zGre2QhkO`q|VmQp-RVNHJJ zA_abt!kWMTyLN@nom3O9x2msn>86&c{+k^ASzEa3SLu{0inB9ekQ@nZJpDN5!{+xb5@^t0Su&%3}x`9II~-j4Uz*Iw=k{Tkm}rYz1} z8^1`wF`aqu|39l7)tSw?`W`rcXIWHrKM!<3$+AZ~R);F&GyMs#QBh~z)UxdKt`iQ& zgP&yNnAFr+0&8mbaVdrK8PwFSW9TYfTGUee zd%<ydzg3?Bw7u7S>psQ# zte1OMRsG{|U}yR_eYbNtOHcgwr-vQS^KAXQj=5~9$=uHF{XeFuTxb6E?|!obJ9qrA zMOTj3H+|ynRi>lPk zS>8l3F!3s|vx-c$fBja=!JO$oQ+}d5%XOxu|E4LGv%LPX_dRH3>YnxSP1983SynNv zURtJ5&ay(IBNUYK@;)%^PX5pMPf7hQ=(xUJYdS-e^_k!OI#lkso{2#tLc<=^Reg0` z)m^2Y@qf4iJG(&1+y7S=e4e5j&s4jb$?-n(zwlKJj_;ZFcPeOr>Y46`?|1&rydnPjdj)pZ8VB>x z|00UpSvs};?*fguuj<+#@4(K~)wND>K5Jpkf+nW#F78bKUOZ3-bpy1S_^Uz3$Tj_2 z748(z@k^I$?dP6pOS977vwZI9ShXtoKa0|@t$U}bwljZu(6GQkoMpz2x{6S>^Gw$} z7AVWJeD3*cud7(jYcloPxrTq!=7vsvxoA4K13y#2n+59ISwyBbFjT0Rvk6b#_u%?h z(C)Nat`*lEr?cGGdTlpNL7Ztp)hp%sEFx1sTn|@hXS>|9AZgeA5Jhzs&9z;-K)bX< zS6);7&tfvQHhZ4}JKN=+SFc_aTvqjG*;29P!e!_GOpndG9Lt%$vHnxLuDG8|J!lnZ z50*mvqD4;cSri`BDQ!|$m)dda`-aO?e4}4){hI(<)yMlne;25a+#mH`^*wuG4dd#& z_0yJW7&7yJ{kl!5oOw~z`~QyeEYnRFtS?h#XYP8nywjncB}#7-*E9urX1!N>Ne=8x zO$FhKpsm+8-hbV1qA1S1YWbpfuKvuW;p;h_{CTFo(zp;hx2R=>?t)nf{diQ?6&b z+*A8}A9JWmJj=e-FDgVdr!%d1HDAM>?|t#FtVO>AYjmO){JUXSsJ@0g$ILqH>&$UAp*E93;$yg|wvrbvj*tKGsaz68__3EI*S*2F3UVVLS z=+yUGv0JyT4V|kav47RJwWV`oZp6QwroNHoT~=ILse(RJL-!-lmiQKi2OreWE3h-Y zey!{9pDW|_sud=4bCbs?t8Cu$)z7>aV5y z`yKR|Rgx4G9Q2u2ZC$j;!JkP(Yk}f%*2_IwtG0c2kZ0;@y{&OvIg;`9BE|V^pL=5e zG5s=CF=vTqQm_tDT+URjwMyNeWmC&vrhlsDY@d5dwPN3eD%dl9f3R99U-3Wl^M$KS z6~vj=?tiPQ&L%Q7_Wj;RpmnVOm%sYuz|OMjK=?M$sB*a0dj(Kz$A9|$%S17qdG|W~ z>q_fcTUISvQ4czZafJqh)_>Ob#S9D!wmSW1S+L;myvr*3%=goG{!x=>E%_h6;1_6A zGk(>IuFneM+_4%9x`n3}wN$TK)ukBDT(fr7D$V(zR?2?R%AceXm(qK-O+62OeO*ziaGfc9{i=-POv@|YtM>B+*8EaeTD7UCbnc4O(9mfL?^#xt zb1{K7oxb|Yz%Wf=JInj#1$EODt~1@%SOq>va1{f?_c8^3=3j9OzB_JbzN-Cdy#qVb zsuf>#THOjB%U{vW^pfnq&t@2;5t&1FvYj8(7HK_zO#{Z*>*ypvkeulIEY z)`(19v1(P6!*!lVS`{z8Oew61JNoamh_<}2*{gq#LAzG&eZR$TGPf`J-aEY_@AE9W zKfZn4q{z>*b@iMJeFlXD;qLH=!orsb=i`A+Hw?q`vnO8`xdf`;gRNMVp z}-`OU$G%)Oc8LD`mc?Hw`?GD$O7Inq?iZf5q*fmv2o<(Hp z|26fh?yR4Cv>yLm?a0pZ>VD|iQbm52ru(n7%M{pIx#m}EOk1kp&%7%BPpR{B=2dIC zN)_1|6;?RJvwSG7XkbvcXL(<&y1qf-xS~08X4k1u-Tf>Kw-zii(Ol2Qz;Nwe=-fU9 zcAoeZp>qvtn3~phht3t@oyxHw|1M}n`>Rsvx1eQn%nB;)4*cBf7hV4a>dCzL|M!&x zKa19~+3!J9upC93+yJ$HIi>@-k!dRqqvlLNc_ ztNaI_K)rUY`>R)h=BSz0?tBgEPIr9^jlJ9>GL>iPjFnNKes%ZXe_1A=11{d)-)cJd zau3I<`0Wn%EUUQcSBEO_^Q>C&b{D93{#*NheW*e`Gq(cAR|j_Hj<~R^3gWCi;r~|c z03Bjd`v0F6XoL9I-@g#ULKjkn{sF&7Q6~6*BqkCw% z!BvO(%&(aKM?3HfthAicF2uuwO7u zft@-0!@sQ#{LJNt4!m~w&RqCshOUA+YtQ=aO*W+p-&y{y;(BDF7|)zl^Xi?$bDsR~ zyHx+|GtF;cPzVJ?~3|J5cfZBTG*eYJ|qA)nbc zLOsu>9i6MDEuGl%>OoZ>beE{ zrYZR|{WUq9RL}f$B@=@qKl7^>`<^R)XKCp=Wufj6&hq}cf}V-uewM0xpiSxSO!vDM zDS*z+S-W0qkwZJT)`^0DpqceM+rH{M$aDX_zdi{x#UHzFzqSKEQ~bJBitMriHT(_# z?tm6BJkpBaT?RU1yW#79(0cm6+S~R!*^RrB9S*80*iJ$HBlyHVsuRt?My$n2x?^!-idH3R$ zB0p%Si0Z0YWs3iKG#aALg4QZ8zWH_iHU)N;_44&~(?F|P7pz`7O{tz~RYwMRPvAd> zt%{%_=&#MI75iBYYq|<{L^#}M`F~w&RjIPNNa@Rp^{c!R=IyWd)i{VV zubSG$p}@{Mcl-C%-P07-GuN+reZj$i6)g7-!HUe`N5XIZpr_jMB$cIJMr zx2X#3EK}BdYxjc;nPbb4V9#^?Kd3Mgo;p2$b!n)AJJYH)ObY&NB2$;I+F=^1aGiNU z)piBYkxI;~zg{3}%uXI`b%5UwPyd|!eqZu{DE*{ir#ef_?6 zQpv^8t*7bwE(Q~2 zb|$VY2E}lNc*d3MqV&~j(7@1wwX0S+t!M5Ce>KU0U4&Dk|G?#* zb=eDkRsA!W+Lz4zzxF=Mc^Iu*{{~G)&0KJpydDmt4t;e_S{{M;@)jrsuTUa zd)0b}eC7>Z>tdbmGyl`x_t$}+Y3cU=s^P4cTV!{{cQ{OE-uL+Je}{IK?gv$WJ}av; zM`_(^bqHs9&6J~MqN2`Rze;<7gF4H~_X;mSLxiil9+*3+b1%|eHwU!uX#b;KRSxnj z0Xpl}f?C^)cC1j4XW7*A?bRv;eYVd%;h{~TWeV!dv5$WJbx>#d|NVc2h(b8?p^En} z9oV_T|K1h{jbi@Qx~_DcZ&QozzQ6BFLEAXG)_o6ElxJz$roY-m`8ms~q76+Z%G;Sk zb-9`x&U1azV5kEvrs-f}P-AD?)bjS%`d$&mc&WP2T2-LI(EnAtv@Z7)w*0=ipy|t$ zNiEBl_bZsQ6}5D)&e8{+=zQ|`Qf5VV)}HvOntG+6ZD{ND7lE2kNrzOwvs~`c`~O>Y zKB)1U^nXu+I8zlWa%i|_KADAe=BRNgNTnR=-w`rb=>5ruZ<{EQbr+_tl9OWVZ-;&O-GU**8g#4&TP zk~`byo~QTbuQyRJXWCWCpybc+Swo%Swn99s$ke@S-|{=Kv%D*Bx(C_}c`bI9XsCiX z^WV}3b&l7W7u3DzP-1>-?LjSGmGEscaRL`WLpw1Fl6Tf1C0y|4#P3(>?g?g4rEvgC)8tkgenQbGZx4HH+ zYi%vPuA#})^zXk$KWjkE*HwDGj`l3yAN`qHrXkMq{{B^6P-Xk?$B#P>@htn6t!@rc zIM4F$_TzORx_iVp4pJ{=1l%lzOVa>kon_Zx}lT}Ss z-$AQuSH+)yoSQ5%brsW!D3Pfw>$0aW(pM|zF(`Tc?^TfS)ZFAME-ejqw!Y+*kGPtq zsZ3|S{{6*&Cvhg-ml}$oRsXBrzDsXseiOHSfkQo0tX7lib(T#ndq3qX*|Q0hoS5`} z-)D_i3#X z=1lkQhpL0tAQ=3+%K_Seyy*VxzEFk#EWzCc)}gNY%nc0*pfPoZ2X~%cR=UozLhser z&nnxQcW^g#Dm-UxS!GbQYno;{)2e!Xt#;6E>A!EZ=Cge6>8|>%u$@(8YVK}xD+PY$ zDc>vptNdrX+;V?i#cUC!eD3nUrFNgE7}Wg#*R)*uIdjd%og8YpY=Je~o0`^qR({X& z%5JObXZ8Oq<{C{3BB0em_xCA;vu*CV-@j_ViQ;}{z5aLe9kw(6YI2#*^0`NQ)qXX5 z&?w8H1aOBW!MUcH*` zn9tI%O6%HZ#s4fas~8qsR{YOW^{QL*vuZoj_EoR6-m{+1PGZ`{;K0wkmSdHc6F(Ev zeJv$%hIMNB3|b2DEPcrhUzyZEHOZpC42wQ1vNLskXn+>s%q?nZTD7{=MDaX}Rucz!cfZ!^RqCM0+pbrO{({DiUoX%yXWi8EX4ijT z2X^Mw`@?NPjqFu>_pcC9R%cdVvbgM6&T{Y5eejA!z5oBJ9mH80xPN4T#=^K({oATw z&f3DTV!I`1e^1@Y{67x-%)3`y)c{rY_VKGU<=Hm1td9NHC9GJ_)NoZv;W+4|Q|-9@ zp$f~H_AjW_0=1zk;&OGSvlZ6dPu5@kS<#*8dhBZDaL`2vOPOAMR=Uqp#qq)_R9&5^ zbk%C@e3tXs-<7mfKzqyM8yZsfbN`a-I|XX+E6m>CcGvGsEuVWFG-pM8R{qaCZ)^8^*X!J?vQ{;NcC2!(T5!$zz0iVR<@JRv zzRA0IU&VrUymIYZsc@ccUG}25w+l8Ys57lnT&@OML4J>mj~jHxPt&9F-^%>VB@OZG z)%95mYwAVU?{Z8RYRJ&8&dmI1JHLZG_b=O3*`VWRxf-g%o%NYt#Q(2XNN267fBv5Pv(j>A z?f*>ooZMOB{{HO_QQXe_7j!gTJ~P*XhOLhIOuu%oR0JIj(sg|?m|kU?r3P9X`6|9! zWxb+3Hkqonow5GE8fe8+gT{+%Axh7g8~**j@4(Oe|33eJ z$9V4N94mH#2IA*3{J!q6oQbJ^uX;MGLCJ!*yWTmUXI7fHN?XC5x#zk0f92^)^O^YG ze+L}__b2ZCK4GPB=2co*8jjDI|8}ijq+rfmb8VNB!gQ8NEz@7EQUevE+*e;Iu4fV` zS)s(>5YMvd(cM*`tuw1mZB=(?-PALkC&}1hJyUJNQw4K@%RM_4c0UrCx~V7s^uJXm zQ#Z-C#Q(j&LuBftmet!|b%D0&wod!H1JvF9_2U0ak*S;Hd-lHArvsX2zFPl(N9f#5 zEfpLq7(hp#{g+#{EOhQBo}Tpw{(c2@zc{WlX*sa7EZEoOAfmv})3s{RTTr)Vd*7;G zA`0=$yFwT2bzm31UL3jtl<@0gpI-Xh6If&QcinmicKNRLaqB=0BPH$Y^`MpH3>>S= zLBq5ROnTQr-5ustU8}A-mqDxbRA@^}j$1r2qX?4i%ZY zsbzH@$A1TN<`wY^!1H=*8(xVh#IrE0;`%P4(9g{9{og!?=ghCKhUz7-Gr#?QKt#cu z=>=$$6lfIhIhTSz>!z04uP;I!%6V4VYk?0uUy!wHor!`w%da{ueb9=xuLmF12`jt@ zov-@VM1h~@^{Sds;oiWS2miwFges^r|Lgs^%b}cw>Bsj~!V3H>9l!3c2vJaH>3;iv zHR#N5^Zn42fB&mNBCX`ah6|IclAN*bzZ%$RRonSE4soOK>Pi6WZzHV zXW6&5g6p%Qy~w@p1s#u{B6eO3|{}oZV&a!KN zZUyKHq5tb2Z3i9q*4ccjRLPx3|NYuWpp)e5U(~Gz)$ZIHN@}5s;k;T8e#C)JL0|E& zcE8C~g?_HRP0K*bDONSzXmBj&+O54}sma{Jmi70T6#T^uY98HRr3E?=>-+vyU1du@ z_b^>w^&hk;`Ra{&MbL0m?8^Ig4(vSp|E;e94d1+;`Rt^L(skx|EslQ<>xI8BSfB^$ znJXN)#sF%UGt84;;jo?QbqtRJJIkaNtCcGf|FhWd�vIL{ok_hr7aJabQe&i2Ib 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 tITR|K&^t#_p{XgsFp8ean zdYt*0;^U_)x3hijdAV|XR;bE)=3QMu3d-SZJ<;J?xvsBOt7p2Z_s`j%`Q3_FUme7m zY**b^23<1J)wNJXo>gS({^|`o9N1a5SMNIo>fwCO&T0u&XlGun#m%dr&phSo+D|Is ztRhq6%{P5>P-lL%BP-H@o$vRGom)YxY*k+`bM8O=w+`mad;f2~>%h(&`)ki{2XWTgU2C|6rz*HJ zcduS4qQK6wbJ41Gpw9m4s#Tx>?7IH@mxzKm%cuLH;g=QiS+rK&FBfr;XX0L6tI*HW zvTl{uUC>y=^;ZhE4*V?Nf34^MO@92Ze%Is>&b;*h_frn%S;FtFVghZk|2{u&1?cE? zy;bJ>K-V3w=YIb+RN+0d_M-c%9NAe`Eh@hjs>sixv`Y7XsltDzEUhd>eYV1y1FODv zn<$)TsaUmlg{cC+uzl6`U7*p5scT=XGMQ>nQee--yk_LSM!I=U6;+Y`k%Vud^Urc^`RZB zK+WFsFYoVlsF&t`JgW_K{(8cLhIOG+1xj>R{`_}+ZD7sv|F7>jPG?zr=u+Heg>;c$ ztL}4|fTn=wHcbbO4e#fC6b`yCXvKo9ilCA*{_Db34%>OAzIw45lroy@XT1Z>Wc=FO z0GcMc|9*wSeb&!CJKhz?Ik5B8)U1vJHD>>RKfO9sL7ln(*Zdt0{Y(p9OjA^6+0?Qk zDNE@(%jTZdPqh?4E3e+~ z#4-IPXjulsf**T91yzAxq3*Dw0*pw8T%_4>VnJo6NF zEe6GQ*3UgFR;e9u$Y)8|#lTgj$j`KRUsj?$Q}s?QMSs@MJ<;V%pw-B~t6wOkvuett+4*D!sOi_K)6!=+om;diCRT1ZoxUO6!GPQK>vIUx94(80eSC>9eIL_R&pKGnc ze^!yH@0E_!%ncx3cL7sPts{Z@D*FmLoqe8+$K}!QyDebBUjj=3R5&6$Ko~3Ek z_64O1$63nvpWk1q^q=Xf*6IXtrmsI9DTDUjY3_dU+(Dfwb_P@OedhlaG2zPTtSzfn zXx$W1R+pK+s*7t=kIB@oRa`4U?eOnb{}zDu=l|wjC@7-5pK0a#aPU&Qd*z^Os9Dy> za&>_YN4Wk~TX8$<<(}{Ldwx0SGrxYdWtD?HvsT%(AI|q#H2(kkF02&JvTEJ`Y|sKY z%~$soL7mQybxXM&o->DEJzed<&dd~Yl)>RWb8YDK2nThRty-&^OjNEjFMYcCmV-X? z{rwND9MqZrzTA=IAkVVm)v9_Eg>dd4uYT2jo?=k5V3!$_!g1CX-KMTpBFg$KuU4(d z5>b$6y0Lbbay{FomhSt%caw51DHtqKFJZTVOC>VeaArq!IhO8Kmp zdz5x>*LF~6&aTe`t!4dmZ@WgR@^hxI`xhzavl*1!|MlaMh@v^u`n{Zr;qn3{r{3-P z3OYG((T_QxQ?`>={ZBI4)Y6xI=)SeR$yAo}*((>VQr^!tsU>^yj(wm_SzW7s+ym9U z_5ULmnJ7$WS-JeXj)_t{i_$mq^CBwCnYC8EictK^ntg9owm4`Ez;spj0uhCDo(8S8 z4Vzk~EnT%LVMVFpcjoP@cGNkrGe1~+>A#~mOU-xX`(+B^Ec&my>O&R6nOCe@6|Quj zxrcw%Gw{;Ai2eUKK}Y6Z-Ss{OH1D-~-Bu=0Qt@8Ao8Q5m>2KdF1yG&!_W$Znpu2Nd zovL$K4;o01SBz&Zk%-^fB%&~#dBMM>s}%0DB%gX!utMcIZ#LIl?RB50_(pHjXjo^W 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