| @@ -37,8 +37,8 @@ using namespace lol; | |||||
| #define HAVE_PHYS_USE_BULLET | #define HAVE_PHYS_USE_BULLET | ||||
| #endif /* HAVE_PHYS_USE_BULLET */ | #endif /* HAVE_PHYS_USE_BULLET */ | ||||
| #include "Physics/LolPhysics.h" | |||||
| #include "Physics/EasyPhysics.h" | |||||
| #include "Physics/Include/LolPhysics.h" | |||||
| #include "Physics/Include/EasyPhysics.h" | |||||
| #include "PhysicObject.h" | #include "PhysicObject.h" | ||||
| #include "BtPhysTest.h" | #include "BtPhysTest.h" | ||||
| @@ -37,21 +37,23 @@ | |||||
| <ItemGroup> | <ItemGroup> | ||||
| <ClInclude Include="BtPhysTest.h" /> | <ClInclude Include="BtPhysTest.h" /> | ||||
| <ClInclude Include="PhysicObject.h" /> | <ClInclude Include="PhysicObject.h" /> | ||||
| <ClInclude Include="Physics\EasyPhysics.h" /> | |||||
| <ClInclude Include="Physics\LolBtPhysicsIntegration.h" /> | |||||
| <ClInclude Include="Physics\LolPhysics.h" /> | |||||
| <ClInclude Include="Physics\Include\EasyCharacterController.h" /> | |||||
| <ClInclude Include="Physics\Include\EasyConstraint.h" /> | |||||
| <ClInclude Include="Physics\Include\EasyPhysics.h" /> | |||||
| <ClInclude Include="Physics\Include\LolBtPhysicsIntegration.h" /> | |||||
| <ClInclude Include="Physics\Include\LolPhysics.h" /> | |||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <ClCompile Include="BtPhysTest.cpp" /> | <ClCompile Include="BtPhysTest.cpp" /> | ||||
| <ClCompile Include="Physics\EasyPhysics.cpp" /> | |||||
| <ClCompile Include="Physics\Src\EasyCharacterController.cpp" /> | |||||
| <ClCompile Include="Physics\Src\EasyConstraint.cpp" /> | |||||
| <ClCompile Include="Physics\Src\EasyPhysics.cpp" /> | |||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <ProjectReference Include="$(SolutionDir)\..\..\src\lolcore.vcxproj"> | <ProjectReference Include="$(SolutionDir)\..\..\src\lolcore.vcxproj"> | ||||
| <Project>{9e62f2fe-3408-4eae-8238-fd84238ceeda}</Project> | <Project>{9e62f2fe-3408-4eae-8238-fd84238ceeda}</Project> | ||||
| </ProjectReference> | </ProjectReference> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | |||||
| </ItemGroup> | |||||
| <PropertyGroup Label="Globals"> | <PropertyGroup Label="Globals"> | ||||
| <ProjectGuid>{ee203b88-44cf-4859-9d42-7a1f43fecb52}</ProjectGuid> | <ProjectGuid>{ee203b88-44cf-4859-9d42-7a1f43fecb52}</ProjectGuid> | ||||
| <ConfigurationType>Application</ConfigurationType> | <ConfigurationType>Application</ConfigurationType> | ||||
| @@ -72,4 +74,4 @@ | |||||
| <ImportGroup Label="ExtensionTargets"> | <ImportGroup Label="ExtensionTargets"> | ||||
| <Import Project="$(SolutionDir)\Lol.Fx.targets" /> | <Import Project="$(SolutionDir)\Lol.Fx.targets" /> | ||||
| </ImportGroup> | </ImportGroup> | ||||
| </Project> | |||||
| </Project> | |||||
| @@ -2,21 +2,33 @@ | |||||
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <ClInclude Include="BtPhysTest.h" /> | <ClInclude Include="BtPhysTest.h" /> | ||||
| <ClInclude Include="Physics\EasyPhysics.h"> | |||||
| <Filter>Physics</Filter> | |||||
| <ClInclude Include="PhysicObject.h" /> | |||||
| <ClInclude Include="Physics\Include\EasyCharacterController.h"> | |||||
| <Filter>Physics\Include</Filter> | |||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="Physics\LolPhysics.h"> | |||||
| <Filter>Physics</Filter> | |||||
| <ClInclude Include="Physics\Include\LolPhysics.h"> | |||||
| <Filter>Physics\Include</Filter> | |||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="Physics\LolBtPhysicsIntegration.h"> | |||||
| <Filter>Physics</Filter> | |||||
| <ClInclude Include="Physics\Include\EasyConstraint.h"> | |||||
| <Filter>Physics\Include</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="Physics\Include\EasyPhysics.h"> | |||||
| <Filter>Physics\Include</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="Physics\Include\LolBtPhysicsIntegration.h"> | |||||
| <Filter>Physics\Include</Filter> | |||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="PhysicObject.h" /> | |||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <ClCompile Include="BtPhysTest.cpp" /> | <ClCompile Include="BtPhysTest.cpp" /> | ||||
| <ClCompile Include="Physics\EasyPhysics.cpp"> | |||||
| <Filter>Physics</Filter> | |||||
| <ClCompile Include="Physics\Src\EasyCharacterController.cpp"> | |||||
| <Filter>Physics\Src</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="Physics\Src\EasyConstraint.cpp"> | |||||
| <Filter>Physics\Src</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="Physics\Src\EasyPhysics.cpp"> | |||||
| <Filter>Physics\Src</Filter> | |||||
| </ClCompile> | </ClCompile> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| @@ -26,5 +38,11 @@ | |||||
| <Filter Include="Physics"> | <Filter Include="Physics"> | ||||
| <UniqueIdentifier>{ccecd634-9321-4c49-9471-e9da50dda6d3}</UniqueIdentifier> | <UniqueIdentifier>{ccecd634-9321-4c49-9471-e9da50dda6d3}</UniqueIdentifier> | ||||
| </Filter> | </Filter> | ||||
| <Filter Include="Physics\Include"> | |||||
| <UniqueIdentifier>{ef37a177-b550-435b-bfb1-a09ca8059137}</UniqueIdentifier> | |||||
| </Filter> | |||||
| <Filter Include="Physics\Src"> | |||||
| <UniqueIdentifier>{7e5d19e0-b2be-46cc-8fa4-f582ecb4318d}</UniqueIdentifier> | |||||
| </Filter> | |||||
| </ItemGroup> | </ItemGroup> | ||||
| </Project> | </Project> | ||||
| @@ -13,7 +13,9 @@ | |||||
| #include "core.h" | #include "core.h" | ||||
| #include "easymesh/easymesh.h" | #include "easymesh/easymesh.h" | ||||
| #include "Physics/EasyPhysics.h" | |||||
| #include "Physics/Include/EasyPhysics.h" | |||||
| #include "Physics/Include/EasyCharacterController.h" | |||||
| #include "Physics/Include/EasyConstraint.h" | |||||
| using namespace lol; | using namespace lol; | ||||
| using namespace lol::phys; | using namespace lol::phys; | ||||
| @@ -0,0 +1,82 @@ | |||||
| // | |||||
| // Lol Engine | |||||
| // | |||||
| // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net> | |||||
| // (c) 2009-2012 Benjamin Huet <huet.benjamin@gmail.com> | |||||
| // This program is free software; you can redistribute it and/or | |||||
| // modify it under the terms of the Do What The Fuck You Want To | |||||
| // Public License, Version 2, as published by Sam Hocevar. See | |||||
| // http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
| // | |||||
| // | |||||
| // The EasyPhysic class | |||||
| // ------------------ | |||||
| // | |||||
| #if !defined __EASYCHARACTERCONTROLLER_EASYCHARACTERCONTROLLER_H__ | |||||
| #define __EASYCHARACTERCONTROLLER_EASYCHARACTERCONTROLLER_H__ | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| #include "core.h" | |||||
| #include "EasyPhysics.h" | |||||
| #include <BulletDynamics/Character/btKinematicCharacterController.h> | |||||
| #endif | |||||
| namespace lol | |||||
| { | |||||
| namespace phys | |||||
| { | |||||
| class EasyCharacterController : public EasyPhysic | |||||
| { | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| public: | |||||
| EasyCharacterController() : | |||||
| EasyPhysic(), | |||||
| m_character(NULL) | |||||
| { | |||||
| m_up_axis = 1; | |||||
| } | |||||
| ~EasyCharacterController() | |||||
| { | |||||
| delete m_character; | |||||
| } | |||||
| virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false); | |||||
| virtual void InitBodyToGhost(); | |||||
| virtual void AddToSimulation(class Simulation* current_simulation); | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation); | |||||
| virtual void SetMovementForFrame(vec3 const &MoveQuantity); | |||||
| protected: | |||||
| virtual btGhostObject* GetGhostObject(); | |||||
| btPairCachingGhostObject* m_pair_caching_object; | |||||
| btKinematicCharacterController* m_character; | |||||
| float m_step_height; | |||||
| int m_up_axis; | |||||
| #else // NO PHYSIC IMPLEMENTATION | |||||
| virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false) { } | |||||
| virtual void InitBodyToGhost() { } | |||||
| virtual void AddToSimulation(class Simulation* current_simulation) { } | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation) { } | |||||
| virtual void SetMovementForFrame(vec3 const &MoveQuantity) { } | |||||
| #endif // PHYSIC IMPLEMENTATION | |||||
| }; | |||||
| } /* namespace phys */ | |||||
| } /* namespace lol */ | |||||
| #endif /* __EASYCHARACTERCONTROLLER_EASYCHARACTERCONTROLLER_H__ */ | |||||
| @@ -14,15 +14,12 @@ | |||||
| // ------------------ | // ------------------ | ||||
| // | // | ||||
| #if !defined __EASYPHYSICS_EASYPHYSICS_H__ | |||||
| #define __EASYPHYSICS_EASYPHYSICS_H__ | |||||
| #if !defined __EASYCONSTRAINT_EASYCONSTRAINT_H__ | |||||
| #define __EASYCONSTRAINT_EASYCONSTRAINT_H__ | |||||
| #ifdef HAVE_PHYS_USE_BULLET | #ifdef HAVE_PHYS_USE_BULLET | ||||
| #include "core.h" | #include "core.h" | ||||
| #include <bullet/btBulletDynamicsCommon.h> | |||||
| #include <bullet/btBulletCollisionCommon.h> | |||||
| #include <bullet/BulletCollision/CollisionDispatch/btGhostObject.h> | |||||
| #include <BulletDynamics/Character/btKinematicCharacterController.h> | |||||
| #include "EasyPhysics.h" | |||||
| #endif | #endif | ||||
| namespace lol | namespace lol | ||||
| @@ -31,141 +28,6 @@ namespace lol | |||||
| namespace phys | namespace phys | ||||
| { | { | ||||
| class EasyPhysic | |||||
| { | |||||
| friend class EasyConstraint; | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| public: | |||||
| EasyPhysic(); | |||||
| ~EasyPhysic(); | |||||
| virtual void SetShapeToBox(lol::vec3& box_size); | |||||
| virtual void SetShapeToSphere(float radius); | |||||
| virtual void SetShapeToCone(float radius, float height); | |||||
| virtual void SetShapeToCylinder(lol::vec3& cyl_size); | |||||
| virtual void SetShapeToCapsule(float radius, float height); | |||||
| virtual bool CanChangeCollisionChannel() { return (m_rigid_body == NULL); } | |||||
| virtual void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))); | |||||
| virtual void SetMass(float mass); | |||||
| virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false); | |||||
| virtual void InitBodyToGhost(); | |||||
| virtual void AddToSimulation(class Simulation* current_simulation); | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation); | |||||
| virtual mat4 GetTransform(); | |||||
| protected: | |||||
| virtual void SetLocalInertia(float mass); | |||||
| virtual void SetShapeTo(btCollisionShape* collision_shape); | |||||
| virtual btGhostObject* GetGhostObject(); | |||||
| btCollisionObject* m_collision_object; | |||||
| btGhostObject* m_ghost_object; | |||||
| btRigidBody* m_rigid_body; | |||||
| btVector3 m_local_inertia; | |||||
| btCollisionShape* m_collision_shape; | |||||
| btConvexShape* m_convex_shape; | |||||
| btMotionState* m_motion_state; | |||||
| #else // NO PHYSIC IMPLEMENTATION | |||||
| public: | |||||
| EasyPhysic() { } | |||||
| virtual void SetShapeToBox(lol::vec3& BoxSize) { } | |||||
| virtual void SetShapeToSphere(float radius) { } | |||||
| virtual void SetShapeToCone(float radius, float height) { } | |||||
| virtual void SetShapeToCylinder(lol::vec3& cyl_size) { } | |||||
| virtual void SetShapeToCapsule(float radius, float height) { } | |||||
| virtual bool CanChangeCollisionChannel() { return true; } | |||||
| virtual void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))) { } | |||||
| virtual void SetMass(float mass) { } | |||||
| virtual void InitBodyToRigid() { } | |||||
| virtual void InitBodyToGhost() { } | |||||
| virtual void AddToSimulation(class Simulation* current_simulation) { } | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation) { } | |||||
| virtual mat4 GetTransform() { return mat4(1.0f); } | |||||
| virtual void InitBodyToGhost() { } | |||||
| #endif // PHYSIC IMPLEMENTATION | |||||
| public: | |||||
| //Sets the collision Group & Mask. | |||||
| //Mask can change at runtime, not group ! | |||||
| virtual bool SetCollisionChannel(int NewGroup, int NewMask) | |||||
| { | |||||
| if (CanChangeCollisionChannel()) | |||||
| { | |||||
| m_collision_group = (1<<NewGroup); | |||||
| m_collision_mask = NewMask; | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| int GetCollisionGroup() { return m_collision_group; } | |||||
| int GetCollisionMask() { return m_collision_mask; } | |||||
| protected: | |||||
| lol::mat4 m_local_to_world; | |||||
| float m_mass; | |||||
| int m_collision_group; | |||||
| int m_collision_mask; | |||||
| }; | |||||
| class EasyCharacterController : public EasyPhysic | |||||
| { | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| public: | |||||
| EasyCharacterController() : | |||||
| EasyPhysic(), | |||||
| m_character(NULL) | |||||
| { | |||||
| m_up_axis = 1; | |||||
| } | |||||
| ~EasyCharacterController() | |||||
| { | |||||
| delete m_character; | |||||
| } | |||||
| virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false); | |||||
| virtual void InitBodyToGhost(); | |||||
| virtual void AddToSimulation(class Simulation* current_simulation); | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation); | |||||
| virtual void SetMovementForFrame(vec3 const &MoveQuantity); | |||||
| protected: | |||||
| virtual btGhostObject* GetGhostObject(); | |||||
| btPairCachingGhostObject* m_pair_caching_object; | |||||
| btKinematicCharacterController* m_character; | |||||
| float m_step_height; | |||||
| int m_up_axis; | |||||
| #else // NO PHYSIC IMPLEMENTATION | |||||
| virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false) { } | |||||
| virtual void InitBodyToGhost() { } | |||||
| virtual void AddToSimulation(class Simulation* current_simulation) { } | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation) { } | |||||
| virtual void SetMovementForFrame(vec3 const &MoveQuantity) { } | |||||
| #endif // PHYSIC IMPLEMENTATION | |||||
| }; | |||||
| class EasyConstraint | class EasyConstraint | ||||
| { | { | ||||
| #ifdef HAVE_PHYS_USE_BULLET | #ifdef HAVE_PHYS_USE_BULLET | ||||
| @@ -344,5 +206,5 @@ private: | |||||
| } /* namespace lol */ | } /* namespace lol */ | ||||
| #endif /* __EASYPHYSICS_EASYPHYSICS_H__ */ | |||||
| #endif /* __EASYCONSTRAINT_EASYCONSTRAINT_H__ */ | |||||
| @@ -0,0 +1,128 @@ | |||||
| // | |||||
| // Lol Engine | |||||
| // | |||||
| // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net> | |||||
| // (c) 2009-2012 Benjamin Huet <huet.benjamin@gmail.com> | |||||
| // This program is free software; you can redistribute it and/or | |||||
| // modify it under the terms of the Do What The Fuck You Want To | |||||
| // Public License, Version 2, as published by Sam Hocevar. See | |||||
| // http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
| // | |||||
| // | |||||
| // The EasyPhysic class | |||||
| // ------------------ | |||||
| // | |||||
| #if !defined __EASYPHYSICS_EASYPHYSICS_H__ | |||||
| #define __EASYPHYSICS_EASYPHYSICS_H__ | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| #include "core.h" | |||||
| #include <bullet/btBulletDynamicsCommon.h> | |||||
| #include <bullet/btBulletCollisionCommon.h> | |||||
| #include <bullet/BulletCollision/CollisionDispatch/btGhostObject.h> | |||||
| #endif | |||||
| namespace lol | |||||
| { | |||||
| namespace phys | |||||
| { | |||||
| class EasyPhysic | |||||
| { | |||||
| friend class EasyConstraint; | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| public: | |||||
| EasyPhysic(); | |||||
| ~EasyPhysic(); | |||||
| virtual void SetShapeToBox(lol::vec3& box_size); | |||||
| virtual void SetShapeToSphere(float radius); | |||||
| virtual void SetShapeToCone(float radius, float height); | |||||
| virtual void SetShapeToCylinder(lol::vec3& cyl_size); | |||||
| virtual void SetShapeToCapsule(float radius, float height); | |||||
| virtual bool CanChangeCollisionChannel() { return (m_rigid_body == NULL); } | |||||
| virtual void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))); | |||||
| virtual void SetMass(float mass); | |||||
| virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false); | |||||
| virtual void InitBodyToGhost(); | |||||
| virtual void AddToSimulation(class Simulation* current_simulation); | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation); | |||||
| virtual mat4 GetTransform(); | |||||
| protected: | |||||
| virtual void SetLocalInertia(float mass); | |||||
| virtual void SetShapeTo(btCollisionShape* collision_shape); | |||||
| virtual btGhostObject* GetGhostObject(); | |||||
| btCollisionObject* m_collision_object; | |||||
| btGhostObject* m_ghost_object; | |||||
| btRigidBody* m_rigid_body; | |||||
| btVector3 m_local_inertia; | |||||
| btCollisionShape* m_collision_shape; | |||||
| btConvexShape* m_convex_shape; | |||||
| btMotionState* m_motion_state; | |||||
| #else // NO PHYSIC IMPLEMENTATION | |||||
| public: | |||||
| EasyPhysic() { } | |||||
| virtual void SetShapeToBox(lol::vec3& BoxSize) { } | |||||
| virtual void SetShapeToSphere(float radius) { } | |||||
| virtual void SetShapeToCone(float radius, float height) { } | |||||
| virtual void SetShapeToCylinder(lol::vec3& cyl_size) { } | |||||
| virtual void SetShapeToCapsule(float radius, float height) { } | |||||
| virtual bool CanChangeCollisionChannel() { return true; } | |||||
| virtual void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))) { } | |||||
| virtual void SetMass(float mass) { } | |||||
| virtual void InitBodyToRigid() { } | |||||
| virtual void InitBodyToGhost() { } | |||||
| virtual void AddToSimulation(class Simulation* current_simulation) { } | |||||
| virtual void RemoveFromSimulation(class Simulation* current_simulation) { } | |||||
| virtual mat4 GetTransform() { return mat4(1.0f); } | |||||
| virtual void InitBodyToGhost() { } | |||||
| #endif // PHYSIC IMPLEMENTATION | |||||
| public: | |||||
| //Sets the collision Group & Mask. | |||||
| //Mask can change at runtime, not group ! | |||||
| virtual bool SetCollisionChannel(int NewGroup, int NewMask) | |||||
| { | |||||
| if (CanChangeCollisionChannel()) | |||||
| { | |||||
| m_collision_group = (1<<NewGroup); | |||||
| m_collision_mask = NewMask; | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| int GetCollisionGroup() { return m_collision_group; } | |||||
| int GetCollisionMask() { return m_collision_mask; } | |||||
| protected: | |||||
| lol::mat4 m_local_to_world; | |||||
| float m_mass; | |||||
| int m_collision_group; | |||||
| int m_collision_mask; | |||||
| }; | |||||
| } /* namespace phys */ | |||||
| } /* namespace lol */ | |||||
| #endif /* __EASYPHYSICS_EASYPHYSICS_H__ */ | |||||
| @@ -13,6 +13,7 @@ | |||||
| #include <bullet/btBulletCollisionCommon.h> | #include <bullet/btBulletCollisionCommon.h> | ||||
| #include "LolBtPhysicsIntegration.h" | #include "LolBtPhysicsIntegration.h" | ||||
| #include "EasyPhysics.h" | #include "EasyPhysics.h" | ||||
| #include "EasyConstraint.h" | |||||
| #endif | #endif | ||||
| namespace lol | namespace lol | ||||
| @@ -0,0 +1,92 @@ | |||||
| // | |||||
| // Lol Engine | |||||
| // | |||||
| // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net> | |||||
| // (c) 2009-2012 Cédric Lecacheur <jordx@free.fr> | |||||
| // (c) 2009-2012 Benjamin Huet <huet.benjamin@gmail.com> | |||||
| // This program is free software; you can redistribute it and/or | |||||
| // modify it under the terms of the Do What The Fuck You Want To | |||||
| // Public License, Version 2, as published by Sam Hocevar. See | |||||
| // http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
| // | |||||
| #if defined HAVE_CONFIG_H | |||||
| # include "config.h" | |||||
| #endif | |||||
| #include "../Include/LolBtPhysicsIntegration.h" | |||||
| #include "../Include/LolPhysics.h" | |||||
| #include "../Include/EasyCharacterController.h" | |||||
| namespace lol | |||||
| { | |||||
| namespace phys | |||||
| { | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| //------------------------------------------------------------------------- | |||||
| //EASY_CHARACTER_CONTROLLER | |||||
| //-- | |||||
| //Deactivated for Character controller | |||||
| void EasyCharacterController::InitBodyToRigid(bool ZeroMassIsKinematic) | |||||
| { | |||||
| } | |||||
| //Return correct Ghost Object | |||||
| btGhostObject* EasyCharacterController::GetGhostObject() | |||||
| { | |||||
| return new btPairCachingGhostObject(); | |||||
| } | |||||
| //Init to Pair caching ghost object, since Character uses that one. | |||||
| void EasyCharacterController::InitBodyToGhost() | |||||
| { | |||||
| EasyPhysic::InitBodyToGhost(); | |||||
| m_pair_caching_object = (btPairCachingGhostObject*)m_ghost_object; | |||||
| m_ghost_object->setCollisionFlags(btCollisionObject::CF_CHARACTER_OBJECT | m_ghost_object->getCollisionFlags()); | |||||
| } | |||||
| //Add Physic object to the simulation | |||||
| void EasyCharacterController::AddToSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| EasyPhysic::AddToSimulation(current_simulation); | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world) | |||||
| { | |||||
| if (m_character) | |||||
| delete m_character; | |||||
| m_character = new btKinematicCharacterController(m_pair_caching_object, m_convex_shape, m_step_height, m_up_axis); | |||||
| dynamics_world->addAction(m_character); | |||||
| } | |||||
| } | |||||
| //Remove Physic object to the simulation | |||||
| void EasyCharacterController::RemoveFromSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| EasyPhysic::RemoveFromSimulation(current_simulation); | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world) | |||||
| { | |||||
| if (m_character) | |||||
| dynamics_world->removeAction(m_character); | |||||
| } | |||||
| } | |||||
| //Set movement for this frame | |||||
| void EasyCharacterController::SetMovementForFrame(vec3 const &MoveQuantity) | |||||
| { | |||||
| m_character->setWalkDirection(LOL2BT_VEC3(MoveQuantity)); | |||||
| } | |||||
| #endif // HAVE_PHYS_USE_BULLET | |||||
| } /* namespace phys */ | |||||
| } /* namespace lol */ | |||||
| @@ -0,0 +1,38 @@ | |||||
| #include "../Include/LolBtPhysicsIntegration.h" | |||||
| #include "../Include/LolPhysics.h" | |||||
| #include "../Include/EasyConstraint.h" | |||||
| namespace lol | |||||
| { | |||||
| namespace phys | |||||
| { | |||||
| #ifdef HAVE_PHYS_USE_BULLET | |||||
| //------------------------------------------------------------------------- | |||||
| //EASY_CONSTRAINT | |||||
| //-- | |||||
| void EasyConstraint::AddToSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world && m_typed_constraint) | |||||
| { | |||||
| dynamics_world->addConstraint(m_typed_constraint, m_disable_a2b_collision); | |||||
| current_simulation->AddToConstraint(this); | |||||
| } | |||||
| } | |||||
| void EasyConstraint::RemoveFromSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world, m_typed_constraint) | |||||
| dynamics_world->removeConstraint(m_typed_constraint); | |||||
| } | |||||
| #endif // HAVE_PHYS_USE_BULLET | |||||
| } /* namespace phys */ | |||||
| } /* namespace lol */ | |||||
| @@ -14,8 +14,8 @@ | |||||
| # include "config.h" | # include "config.h" | ||||
| #endif | #endif | ||||
| #include "LolBtPhysicsIntegration.h" | |||||
| #include "LolPhysics.h" | |||||
| #include "../Include/LolBtPhysicsIntegration.h" | |||||
| #include "../Include/LolPhysics.h" | |||||
| namespace lol | namespace lol | ||||
| { | { | ||||
| @@ -254,87 +254,6 @@ void EasyPhysic::SetLocalInertia(float mass) | |||||
| m_local_inertia = btVector3(.0f, .0f, .0f); | m_local_inertia = btVector3(.0f, .0f, .0f); | ||||
| } | } | ||||
| //------------------------------------------------------------------------- | |||||
| //EASY_CHARACTER_CONTROLLER | |||||
| //-- | |||||
| //Deactivated for Character controller | |||||
| void EasyCharacterController::InitBodyToRigid(bool ZeroMassIsKinematic) | |||||
| { | |||||
| } | |||||
| //Return correct Ghost Object | |||||
| btGhostObject* EasyCharacterController::GetGhostObject() | |||||
| { | |||||
| return new btPairCachingGhostObject(); | |||||
| } | |||||
| //Init to Pair caching ghost object, since Character uses that one. | |||||
| void EasyCharacterController::InitBodyToGhost() | |||||
| { | |||||
| EasyPhysic::InitBodyToGhost(); | |||||
| m_pair_caching_object = (btPairCachingGhostObject*)m_ghost_object; | |||||
| m_ghost_object->setCollisionFlags(btCollisionObject::CF_CHARACTER_OBJECT | m_ghost_object->getCollisionFlags()); | |||||
| } | |||||
| //Add Physic object to the simulation | |||||
| void EasyCharacterController::AddToSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| EasyPhysic::AddToSimulation(current_simulation); | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world) | |||||
| { | |||||
| if (m_character) | |||||
| delete m_character; | |||||
| m_character = new btKinematicCharacterController(m_pair_caching_object, m_convex_shape, m_step_height, m_up_axis); | |||||
| dynamics_world->addAction(m_character); | |||||
| } | |||||
| } | |||||
| //Remove Physic object to the simulation | |||||
| void EasyCharacterController::RemoveFromSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| EasyPhysic::RemoveFromSimulation(current_simulation); | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world) | |||||
| { | |||||
| if (m_character) | |||||
| dynamics_world->removeAction(m_character); | |||||
| } | |||||
| } | |||||
| //Set movement for this frame | |||||
| void EasyCharacterController::SetMovementForFrame(vec3 const &MoveQuantity) | |||||
| { | |||||
| m_character->setWalkDirection(LOL2BT_VEC3(MoveQuantity)); | |||||
| } | |||||
| //------------------------------------------------------------------------- | |||||
| //EASY_CONSTRAINT | |||||
| //-- | |||||
| void EasyConstraint::AddToSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world && m_typed_constraint) | |||||
| { | |||||
| dynamics_world->addConstraint(m_typed_constraint, m_disable_a2b_collision); | |||||
| current_simulation->AddToConstraint(this); | |||||
| } | |||||
| } | |||||
| void EasyConstraint::RemoveFromSimulation(class Simulation* current_simulation) | |||||
| { | |||||
| btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); | |||||
| if (dynamics_world, m_typed_constraint) | |||||
| dynamics_world->removeConstraint(m_typed_constraint); | |||||
| } | |||||
| #endif // HAVE_PHYS_USE_BULLET | #endif // HAVE_PHYS_USE_BULLET | ||||
| } /* namespace phys */ | } /* namespace phys */ | ||||