Danbias/Code/Game/GameLogic/Object.cpp

133 lines
3.9 KiB
C++
Raw Normal View History

2013-11-19 18:35:35 +01:00
#include "Object.h"
2013-11-21 12:05:39 +01:00
#include "OysterMath.h"
#include "CollisionManager.h"
2013-12-18 13:01:13 +01:00
#include "GID.h"
#include "PhysicsAPI.h"
2014-01-20 15:47:52 +01:00
#include "Game.h"
2013-11-21 12:05:39 +01:00
2013-11-19 18:35:35 +01:00
using namespace GameLogic;
2013-11-21 12:05:39 +01:00
using namespace Oyster::Math;
using namespace Oyster::Physics;
2013-11-19 18:35:35 +01:00
2014-01-20 15:47:52 +01:00
const Game *Object::gameInstance = (Game*)(&Game::Instance());
Object::Object()
{
2014-01-16 12:26:14 +01:00
2014-02-09 21:24:09 +01:00
this->rigidBody = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.0f, 0.0f, 0.0f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0);
2014-01-16 12:26:14 +01:00
2013-12-20 09:42:02 +01:00
this->type = OBJECT_TYPE::OBJECT_TYPE_UNKNOWN;
this->objectID = GID();
this->currPhysicsState = this->rigidBody->GetState();
this->newPhysicsState = this->currPhysicsState;
}
2013-11-19 18:35:35 +01:00
Object::Object(OBJECT_TYPE type)
2013-11-19 18:35:35 +01:00
{
2014-02-09 21:24:09 +01:00
this->rigidBody = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.0f, 0.0f, 0.0f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0);
this->type = type;
2013-12-18 13:01:13 +01:00
this->objectID = GID();
this->currPhysicsState = this->rigidBody->GetState();
this->newPhysicsState = this->currPhysicsState;
}
2014-01-23 09:14:04 +01:00
Object::Object(Oyster::Physics::ICustomBody *rigidBody, OBJECT_TYPE type)
{
this->rigidBody = rigidBody;
2014-01-23 09:14:04 +01:00
this->type = type;
this->objectID = GID();
this->currPhysicsState = this->rigidBody->GetState();
this->newPhysicsState = this->currPhysicsState;
2014-01-23 09:14:04 +01:00
}
Object::Object(void* collisionFuncBefore, void* collisionFuncAfter, OBJECT_TYPE type)
2014-01-23 09:14:04 +01:00
{
2014-02-09 21:24:09 +01:00
this->rigidBody = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.0f, 0.0f, 0.0f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0);
this->type = type;
this->objectID = GID();
this->currPhysicsState = this->rigidBody->GetState();
this->newPhysicsState = this->currPhysicsState;
}
2014-01-23 09:14:04 +01:00
Object::Object(Oyster::Physics::ICustomBody *rigidBody ,void* collisionFuncBefore, void* collisionFuncAfter, OBJECT_TYPE type)
{
this->rigidBody = rigidBody;
2013-12-18 13:01:13 +01:00
this->type = type;
this->objectID = GID();
this->currPhysicsState = this->rigidBody->GetState();
this->newPhysicsState = this->currPhysicsState;
2013-11-21 12:05:39 +01:00
}
2013-11-28 08:33:29 +01:00
Object::Object(Oyster::Physics::ICustomBody *rigidBody ,Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncBefore)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter), Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), OBJECT_TYPE type)
2014-01-27 08:54:25 +01:00
{
this->rigidBody = rigidBody;
this->type = type;
this->objectID = GID();
this->currPhysicsState = this->rigidBody->GetState();
this->newPhysicsState = this->currPhysicsState;
2014-01-27 08:54:25 +01:00
}
void Object::ApplyLinearImpulse(Oyster::Math::Float3 force)
{
2014-02-09 21:24:09 +01:00
}
Object::~Object(void)
{
2013-11-19 18:35:35 +01:00
}
2013-11-26 11:30:49 +01:00
2014-01-30 09:40:58 +01:00
OBJECT_TYPE Object::GetObjectType() const
2013-11-26 11:30:49 +01:00
{
return this->type;
}
int Object::GetID() const
2013-12-18 13:01:13 +01:00
{
return this->objectID;
}
Oyster::Physics::ICustomBody* Object::GetRigidBody()
{
return this->rigidBody;
}
2014-01-20 15:47:52 +01:00
void Object::BeginFrame()
{
this->rigidBody->SetState(this->newPhysicsState);
2014-01-20 15:47:52 +01:00
}
2014-01-23 08:24:35 +01:00
// update physic
2014-01-20 15:47:52 +01:00
void Object::EndFrame()
{
this->newPhysicsState = this->currPhysicsState;
}
2014-01-29 16:01:56 +01:00
void Object::setBeforeCollisonFunc(Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncBefore)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter))
{
2014-02-09 21:24:09 +01:00
//this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_BeforeCollisionResponse)(collisionFuncBefore));
2014-01-29 16:01:56 +01:00
}
void Object::setAfterCollisonFunc(Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss))
{
this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter));
}
Oyster::Math::Float3 Object::GetPosition()
{
Oyster::Physics::ICustomBody::State state;
state = this->rigidBody->GetState();
2014-02-09 21:24:09 +01:00
return state.centerPos;
}
Oyster::Math::Float4x4 Object::GetOrientation()
{
Oyster::Physics::ICustomBody::State state;
state = this->rigidBody->GetState();
return state.GetOrientation();
2014-01-20 15:47:52 +01:00
}