Changeset 1834 for trunk/test/Physics/Include
- Timestamp:
- Aug 29, 2012, 11:20:20 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/Physics/Include/BulletCharacterController.h
r1819 r1834 35 35 #ifdef USE_LOL_CTRLR_CHARAC 36 36 #ifdef HAVE_PHYS_USE_BULLET 37 38 //SweepCallback used for Swweep Tests. 39 class ClosestNotMeConvexResultCallback : public btCollisionWorld::ClosestConvexResultCallback 40 { 41 public: 42 ClosestNotMeConvexResultCallback(btCollisionObject* NewMe, const vec3& NewUp, float MinSlopeDot) : 43 btCollisionWorld::ClosestConvexResultCallback(LOL2BTU_VEC3(vec3(.0f)), LOL2BTU_VEC3(vec3(.0f))), 44 m_me(NewMe), 45 m_up(NewUp), 46 m_min_slope_dot(MinSlopeDot) { } 47 48 virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& ConvexResult, bool NormalInWorld) 49 { 50 //We hit ourselves, FAIL 51 if (ConvexResult.m_hitCollisionObject == m_me) 52 return btScalar(1.f); 53 54 vec3 WorldHitNomal(.0f); 55 if (NormalInWorld) 56 WorldHitNomal = BT2LOL_VEC3(ConvexResult.m_hitNormalLocal); 57 else //need to transform Normal into worldspace 58 { 59 btVector3 TmpWorldHitNormal = ConvexResult.m_hitCollisionObject->getWorldTransform().getBasis() * ConvexResult.m_hitNormalLocal; 60 WorldHitNomal = BT2LOL_VEC3(TmpWorldHitNormal); 61 } 62 63 float DotUp = dot(m_up, WorldHitNomal); 64 //We hit below the accepted slope_dot, FAIL 65 if (DotUp < m_min_slope_dot) 66 return btScalar(1.f); 67 68 //Continue to next. 69 return ClosestConvexResultCallback::addSingleResult(ConvexResult, NormalInWorld); 70 } 71 protected: 72 btCollisionObject* m_me; 73 const vec3 m_up; 74 float m_min_slope_dot; 75 }; 37 76 38 77 ///BulletKinematicCharacterController is an object that supports a sliding motion in a world. … … 45 84 { 46 85 m_convex_shape = NewConvexShape; 47 m_ up_axis = NewUpAxis;86 m_i_up_axis = NewUpAxis; 48 87 m_ghost_object = NewGhostObject; 49 88 m_step_height = NewStepHeight; … … 57 96 m_vertical_velocity = .0f; 58 97 m_vertical_offset = .0f; 59 m_ gravity = 9.8f * 3.f; // 3G acceleration.98 m_f_gravity = 9.8f * 3.f; // 3G acceleration. 60 99 m_fall_speed = 55.f; // Terminal velocity of a sky diver in m/s. 61 100 m_jump_speed = 10.f; // ? … … 103 142 bool RecoverFromPenetration(btCollisionWorld* CollisionWorld); 104 143 void UpdateTargetOnHit(const vec3& hit_normal, float TangentMag = .0f, float NormalMag = 1.f); 105 void StepUp(btCollisionWorld* CollisionWorld); 106 void StepForwardAndStrafe(btCollisionWorld* CollisionWorld, const vec3& MoveStep); 107 void StepDown(btCollisionWorld* CollisionWorld, float DeltaTime); 144 void DoMove(btCollisionWorld* CollisionWorld, const vec3& MoveStep, float DeltaTime); 108 145 109 146 public: … … 128 165 if (NewAxis > 2) 129 166 NewAxis = 2; 130 m_ up_axis = NewAxis;167 m_i_up_axis = NewAxis; 131 168 } 132 169 … … 179 216 180 217 //NewGravity functions 181 void SetGravity(float NewGravity) { m_ gravity = NewGravity; }182 float GetGravity() const { return m_ gravity; }218 void SetGravity(float NewGravity) { m_f_gravity = NewGravity; } 219 float GetGravity() const { return m_f_gravity; } 183 220 184 221 //The max slope determines the maximum angle that the controller can walk up. … … 208 245 float m_max_slope_radians; // Slope angle that is set (used for returning the exact value) 209 246 float m_max_slope_cosine; // Cosine equivalent of m_max_slope_radians (calculated once when set, for optimization) 210 float m_ gravity;247 float m_f_gravity; 211 248 float m_turn_angle; 212 249 float m_step_height; … … 229 266 bool m_do_gobject_sweep_test; 230 267 bool m_use_walk_direction; 231 int m_up_axis; 268 int m_i_up_axis; 269 270 //--------------------------------------------------------------------- 271 //NEW INTERNAL VARS 272 //--------------------------------------------------------------------- 273 274 //Gravity in vec3 275 vec3 m_gravity; 276 277 //Current Velocity 278 vec3 m_velocity; 232 279 }; 233 280
Note: See TracChangeset
for help on using the changeset viewer.