////////////////////////////////////////////////// //Created by Erik and Linda of the GameLogic team ////////////////////////////////////////////////// #ifndef OBJECT_H #define OBJECT_H #include "GameLogicStates.h" #include "GameAPI.h" #include namespace GameLogic { class Game; class Object :public IObjectData { public: typedef Oyster::Physics::ICustomBody::SubscriptMessage (*OnCollisionCallback)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss); public: Object(); Object(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID); Object(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID); ~Object(void); inline ObjectSpecialType GetObjectType() const override { return this->type; } inline int GetID() const override { return this->objectID; } inline Oyster::Math::Float3 GetScale() override { return this->scale; } inline Oyster::Math::Float3 GetPosition() override; inline Oyster::Math::Quaternion GetRotation() override; inline Oyster::Math::Float4x4 GetOrientation() override; inline Oyster::Physics::ICustomBody* GetRigidBody() { return this->rigidBody; } inline Oyster::Math::Float GetExtraDamageOnCollision() { return this->extraDamageOnCollision; } virtual void BeginFrame() { }; virtual void EndFrame() { }; void SetOnCollision(OnCollisionCallback func); static Oyster::Physics::ICustomBody::SubscriptMessage DefaultOnCollision(Oyster::Physics::ICustomBody *rigidBodyObject, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss); protected: Oyster::Physics::ICustomBody *rigidBody; static const Game* gameInstance; Oyster::Math::Float3 lookDirection; //The look direction for the camera Oyster::Math::Float3 forwardDirection; //The forward direction of the rigid body Oyster::Math::Float3 scale; //The scale of both rigid body and the mesh ObjectSpecialType type; int objectID; Oyster::Math::Float extraDamageOnCollision; }; } #endif