Advertisement
Guest User

Untitled

a guest
Mar 19th, 2012
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "precompiled.h"
  2. #include "PhysicsManager.h"
  3. #include "Player.h"
  4. #include "Scenery.h"
  5.  
  6. namespace PhysicsManager{
  7.    
  8.     Player *ref_player;
  9.     std::vector<Scenery> scenery;
  10.  
  11.     hkpWorld *world;
  12.    
  13.      void HK_CALL errorReport(const char* msg, void* userContext)
  14.     {
  15.         printf("%s", msg);
  16.     }
  17.      void HK_CALL PhysicsManager::Init_Havok(){
  18.  
  19.         hkMallocAllocator baseMalloc;
  20.         // Need to have memory allocated for the solver. Allocate 1mb for it.
  21.         hkMemoryRouter* memoryRouter = hkMemoryInitUtil::initDefault( &baseMalloc, hkMemorySystem::FrameInfo(1024 * 1024) );
  22.         hkBaseSystem::init( memoryRouter, errorReport );
  23.     }
  24.      void HK_CALL PhysicsManager::Cleanup_Havok(){
  25.  
  26.         hkBaseSystem::quit();
  27.         hkMemoryInitUtil::quit();
  28.     }
  29.  
  30.    
  31.      void HK_CALL PhysicsManager::createWorld(){
  32.  
  33.         // Set world properties.
  34.         hkpWorldCinfo info;
  35.  
  36.         world = new hkpWorld( hkpWorldCinfo() );
  37.  
  38.         // Register all collision agents
  39.         // It's important to register collision agents before adding any entities to the world.
  40.         hkpAgentRegisterUtil::registerAllAgents( world->getCollisionDispatcher() );
  41.     }
  42.      void HK_CALL PhysicsManager::cleanupWorld(){
  43.         // Release the reference on the world
  44.         world->removeReference();
  45.     }
  46.  
  47.      void HK_CALL PhysicsManager::add_RigidBody_Player( Player &p ){
  48.         hkpRigidBody* rigidBody;
  49.         {
  50.             // Create the box.
  51.             hkVector4 halfExtents;
  52.             //halfExtents.set(0.5f, 1.0f, 1.5f);
  53.             glm::vec3 ex = p.Get_Extents();
  54.             halfExtents.set( ex.x, ex.y, ex.z );
  55.  
  56.             hkpBoxShape* boxShape = new hkpBoxShape(halfExtents);
  57.  
  58.             hkpRigidBodyCinfo bodyCinfo;
  59.             bodyCinfo.m_shape = boxShape;
  60.  
  61.             //  Calculate the mass properties for the shape
  62.             const hkReal boxMass = 10.0f;
  63.             hkpMassProperties massProperties;
  64.             hkpInertiaTensorComputer::computeShapeVolumeMassProperties(boxShape, boxMass, massProperties);
  65.             bodyCinfo.setMassProperties(massProperties);
  66.  
  67.             // Elasticity (value between 0 and 1.99, default = 0.4)
  68.             bodyCinfo.m_restitution = (hkReal) 0.4;
  69.  
  70.             // Set our start position.
  71.             glm::vec3 pos = p.GetPosition();
  72.             bodyCinfo.m_position = hkVector4( pos.x, pos.y, pos.z, 1 );
  73.  
  74.             // Create the rigid body
  75.             rigidBody = new hkpRigidBody(bodyCinfo);
  76.             rigidBody->setName( "player" );
  77.  
  78.             // No longer need the reference on the boxShape, as the rigidBody now owns it
  79.             boxShape->removeReference();
  80.         }
  81.  
  82.         // Add the rigidBody to the world
  83.         world->addEntity(rigidBody);
  84.  
  85.         // No longer need the ref of rigidBody - as the world now owns it
  86.         rigidBody->removeReference();
  87.  
  88.     }
  89.      void HK_CALL PhysicsManager::add_RigidBody_Scenery( Scenery &s ){
  90.         hkpRigidBody* rigidBody;
  91.         {
  92.  
  93.             glm::vec3 ex = s.Get_Extents();
  94.             glm::vec4 pos = s.GetPosition();
  95.  
  96.             // Create the box.
  97.             hkpBoxShape* boxShape = new hkpBoxShape(hkVector4(ex.x, ex.y, ex.z));
  98.  
  99.        
  100.             // Create info.
  101.             hkpRigidBodyCinfo bodyCinfo;
  102.             bodyCinfo.m_shape = boxShape;
  103.  
  104.             //  Calculate the mass properties for the shape
  105.             const hkReal boxMass = 10.0f;
  106.             hkpMassProperties massProperties;
  107.             hkpInertiaTensorComputer::computeShapeVolumeMassProperties(boxShape, boxMass, massProperties);
  108.             bodyCinfo.setMassProperties(massProperties);
  109.  
  110.             // Elasticity (value between 0 and 1.99, default = 0.4)
  111.             bodyCinfo.m_restitution = (hkReal) 1.9;
  112.  
  113.             // Set our start position.
  114.             bodyCinfo.m_position = hkVector4( pos.x, pos.y, pos.z, pos.w );
  115.  
  116.             // Create the rigid body
  117.             rigidBody = new hkpRigidBody(bodyCinfo);
  118.             rigidBody->setName( s.GetName().c_str() );
  119.  
  120.             // No longer need the reference on the boxShape, as the rigidBody now owns it
  121.             boxShape->removeReference();
  122.         }
  123.  
  124.         // Add the rigidBody to the world
  125.         world->addEntity(rigidBody);
  126.  
  127.         // No longer need the ref of rigidBody - as the world now owns it
  128.         rigidBody->removeReference();
  129.     }
  130.      void HK_CALL PhysicsManager::add_Body(){
  131.  
  132.     }
  133.  
  134.      void HK_CALL PhysicsManager::Update( GLdouble time ){}
  135.  
  136.      void HK_CALL PhysicsManager::Update_Transforms( vector<Scenery*> &sv ){
  137.         for( int c = 0; c < sv.size(); c++ ){
  138.  
  139.         }
  140.     }
  141.    
  142. }
  143.  
  144. // [id=keycode]
  145. #include <Common/Base/keycode.cxx>
  146.  
  147. // [id=productfeatures]
  148. // We're using only physics - we undef products even if the keycode is present so
  149. // that we don't get the usual initialization for these products.
  150.  
  151. #undef HK_FEATURE_PRODUCT_AI
  152. #undef HK_FEATURE_PRODUCT_ANIMATION
  153. #undef HK_FEATURE_PRODUCT_CLOTH
  154. #undef HK_FEATURE_PRODUCT_DESTRUCTION
  155. #undef HK_FEATURE_PRODUCT_BEHAVIOR
  156. #define HK_EXCLUDE_FEATURE_SerializeDeprecatedPre700
  157. #define HK_EXCLUDE_FEATURE_RegisterVersionPatches
  158.  
  159. // Vdb needs the reflected classes
  160. #define HK_EXCLUDE_FEATURE_MemoryTracker
  161. #define HK_EXCLUDE_FEATURE_hkpAccurateInertiaTensorComputer
  162. #define HK_EXCLUDE_FEATURE_CompoundShape
  163.  
  164. #define HK_EXCLUDE_FEATURE_hkpAabbTreeWorldManager
  165. #define HK_EXCLUDE_FEATURE_hkpContinuousSimulation
  166. #define HK_EXCLUDE_FEATURE_hkpKdTreeWorldManager
  167.  
  168. #include <Common/Base/Config/hkProductFeatures.cxx>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement