Some PhysicsAPI implementations

Nothing related to the oct tree though. That will have be done next
This commit is contained in:
Dander7BD 2013-11-25 16:57:38 +01:00
parent a869771ffa
commit 26e5fde8b0
3 changed files with 36 additions and 25 deletions

View File

@ -3,36 +3,44 @@
#include "OysterPhysics3D.h" #include "OysterPhysics3D.h"
using namespace ::Oyster::Physics; using namespace ::Oyster::Physics;
using namespace ::Oyster::Physics3D;
using namespace ::Oyster::Math; using namespace ::Oyster::Math;
using namespace ::Oyster::Collision3D; using namespace ::Oyster::Collision3D;
using namespace ::Utility::DynamicMemory; using namespace ::Utility::DynamicMemory;
API_Impl API_instance; API_Impl API_instance;
Float updateFrameLength = 1.0f / 120.0f;
::Oyster::Math::Float4x4 & MomentOfInertia::CreateSphereMatrix( const ::Oyster::Math::Float mass, const ::Oyster::Math::Float radius) // default API::EventAction_Collision
void defaultCollisionAction( const ICustomBody *proto, const ICustomBody *deuter )
{ /* do nothing */ }
// default API::EventAction_Destruction
void defaultDestructionAction( UniquePointer<ICustomBody> proto )
{ /* do nothing besides proto auto deleting itself. */ }
Float4x4 & MomentOfInertia::CreateSphereMatrix( const Float mass, const Float radius)
{ {
return ::Oyster::Physics3D::Formula::MomentOfInertia::Sphere(mass, radius); return Formula::MomentOfInertia::Sphere(mass, radius);
} }
::Oyster::Math::Float4x4 & MomentOfInertia::CreateHollowSphereMatrix( const ::Oyster::Math::Float mass, const ::Oyster::Math::Float radius) Float4x4 & MomentOfInertia::CreateHollowSphereMatrix( const Float mass, const Float radius)
{ {
return ::Oyster::Physics3D::Formula::MomentOfInertia::HollowSphere(mass, radius); return Formula::MomentOfInertia::HollowSphere(mass, radius);
} }
::Oyster::Math::Float4x4 & MomentOfInertia::CreateCuboidMatrix( const ::Oyster::Math::Float mass, const ::Oyster::Math::Float height, const ::Oyster::Math::Float width, const ::Oyster::Math::Float depth ) Float4x4 & MomentOfInertia::CreateCuboidMatrix( const Float mass, const Float height, const Float width, const Float depth )
{ {
return ::Oyster::Physics3D::Formula::MomentOfInertia::Cuboid(mass, height, width, depth); return Formula::MomentOfInertia::Cuboid(mass, height, width, depth);
} }
::Oyster::Math::Float4x4 & MomentOfInertia::CreateCylinderMatrix( const ::Oyster::Math::Float mass, const ::Oyster::Math::Float height, const ::Oyster::Math::Float radius ) Float4x4 & MomentOfInertia::CreateCylinderMatrix( const Float mass, const Float height, const Float radius )
{ {
return ::Oyster::Physics3D::Formula::MomentOfInertia::Cylinder(mass, height, radius); return Formula::MomentOfInertia::Cylinder(mass, height, radius);
} }
::Oyster::Math::Float4x4 & MomentOfInertia::CreateRodMatrix( const ::Oyster::Math::Float mass, const ::Oyster::Math::Float length ) Float4x4 & MomentOfInertia::CreateRodMatrix( const Float mass, const Float length )
{ {
return ::Oyster::Physics3D::Formula::MomentOfInertia::RodCenter(mass, length); return Formula::MomentOfInertia::RodCenter(mass, length);
} }
API & API::Instance() API & API::Instance()
@ -41,14 +49,13 @@ API & API::Instance()
} }
API_Impl::API_Impl() API_Impl::API_Impl()
{ : gravityConstant( Constant::gravity_constant ),
/** @todo TODO: Fix this constructor.*/ updateFrameLength( 1.0f / 120.0f ),
} collisionAction( defaultCollisionAction ),
destructionAction( defaultDestructionAction )
{}
API_Impl::~API_Impl() API_Impl::~API_Impl() {}
{
/** @todo TODO: Fix this destructor.*/
}
void API_Impl::SetDeltaTime( float deltaTime ) void API_Impl::SetDeltaTime( float deltaTime )
{ {
@ -56,15 +63,15 @@ void API_Impl::SetDeltaTime( float deltaTime )
} }
void API_Impl::SetGravityConstant( float g ) void API_Impl::SetGravityConstant( float g )
{ {
/** @todo TODO: Fix this function.*/ this->gravityConstant = g;
} }
void API_Impl::SetAction( EventAction_Collision functionPointer ) void API_Impl::SetAction( API::EventAction_Collision functionPointer )
{ {
/** @todo TODO: Fix this function.*/ this->collisionAction = functionPointer;
} }
void API_Impl::SetAction( EventAction_Destruction functionPointer ) void API_Impl::SetAction( API::EventAction_Destruction functionPointer )
{ {
/** @todo TODO: Fix this function.*/ this->destructionAction = functionPointer;
} }
void API_Impl::Update() void API_Impl::Update()

View File

@ -40,6 +40,10 @@ namespace Oyster
void SetOrientation( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &orientation ); void SetOrientation( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &orientation );
::Utility::DynamicMemory::UniquePointer<ICustomBody> CreateSimpleRigidBody() const; ::Utility::DynamicMemory::UniquePointer<ICustomBody> CreateSimpleRigidBody() const;
private:
::Oyster::Math::Float gravityConstant, updateFrameLength;
EventAction_Collision collisionAction;
EventAction_Destruction destructionAction;
}; };
} }

View File

@ -45,8 +45,8 @@ namespace Oyster
class PHYSICS_DLL_USAGE API class PHYSICS_DLL_USAGE API
{ {
public: public:
typedef void (*EventAction_Collision)( unsigned int, unsigned int ); typedef void (*EventAction_Collision)( const ICustomBody *proto, const ICustomBody *deuter );
typedef void (*EventAction_Destruction)( unsigned int, ::Utility::DynamicMemory::UniquePointer<ICustomBody> ); typedef void (*EventAction_Destruction)( ::Utility::DynamicMemory::UniquePointer<ICustomBody> proto );
/** Gets the Physics instance. */ /** Gets the Physics instance. */
static API & Instance(); static API & Instance();