Changeset 1768 for trunk/test/Physics/Src/EasyCharacterController.cpp
- Timestamp:
- Aug 17, 2012, 7:41:36 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/Physics/Src/EasyCharacterController.cpp
r1749 r1768 37 37 38 38 //Return correct Ghost Object 39 btGhostObject* EasyCharacterController::GetGhostObject ()39 btGhostObject* EasyCharacterController::GetGhostObjectInstance() 40 40 { 41 41 return new btPairCachingGhostObject(); … … 64 64 m_character = new btKinematicCharacterController(m_pair_caching_object, m_convex_shape, m_step_height, m_up_axis); 65 65 dynamics_world->addAction(m_character); 66 Ticker::Ref(this); 66 67 } 67 68 } … … 76 77 { 77 78 if (m_character) 79 { 78 80 dynamics_world->removeAction(m_character); 81 Ticker::Unref(this); 82 } 79 83 } 80 84 } … … 83 87 void EasyCharacterController::SetMovementForFrame(vec3 const &MoveQuantity) 84 88 { 85 m_character->setWalkDirection(LOL2BT_VEC3(MoveQuantity)); 89 m_frame_cached_movement = MoveQuantity; 90 } 91 92 //------------------------------------------------------------------------- 93 //Base Location/Rotation setup 94 //-- 95 void EasyCharacterController::SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation) 96 { 97 if (m_base_is_updating) 98 { 99 m_base_cached_movement = base_location - m_local_to_world.v3.xyz; 100 m_local_to_world = lol::mat4::translate(m_local_to_world.v3.xyz) * lol::mat4(base_rotation); 101 if (m_ghost_object) 102 m_ghost_object->setWorldTransform(btTransform(LOL2BT_QUAT(base_rotation), LOL2BT_VEC3(LOL2BT_UNIT * m_local_to_world.v3.xyz))); 103 } 104 else 105 EasyPhysic::SetTransform(base_location, base_rotation); 106 } 107 108 //Internal callback when Base transform has changed. 109 void EasyCharacterController::BaseTransformChanged(const lol::mat4& PreviousMatrix, const lol::mat4& NewMatrix) 110 { 111 m_base_is_updating = true; 112 EasyPhysic::BaseTransformChanged(PreviousMatrix, NewMatrix); 113 m_base_is_updating = false; 114 } 115 116 //Physic Tick 117 void EasyCharacterController::TickGame(float seconds) 118 { 119 Entity::TickGame(seconds); 120 121 m_character->setVelocityForTimeInterval(LOL2BT_VEC3(LOL2BT_UNIT * /*0.1f **/ (m_base_cached_movement + m_frame_cached_movement)) / seconds, seconds); 122 //m_character->setWalkDirection(); 86 123 } 87 124
Note: See TracChangeset
for help on using the changeset viewer.