#pragma once #include "Transform.h" #include "CollisionVolume.h" #include "PhysicsObject.h" #include "RenderObject.h" #include "Layer.h" #include <vector> using std::vector; namespace NCL { namespace CSC8503 { class GameObject { public: GameObject(string name = ""); ~GameObject(); void SetBoundingVolume(CollisionVolume* vol) { boundingVolume = vol; } const CollisionVolume* GetBoundingVolume() const { return boundingVolume; } bool IsActive() const { return isActive; } bool IsSleeping() const { return physicsObject->IsSleeping(); } void MakeActive() { isActive = true; } void MakeInactive() { isActive = false; } void SetSleep(bool sleepState) { physicsObject->SetSleep(sleepState); } const Layer& GetConstLayer() const { return layer; } Layer& GetLayer() { return layer; } Transform& GetTransform() { return transform; } RenderObject* GetRenderObject() const { return renderObject; } PhysicsObject* GetPhysicsObject() const { return physicsObject; } void SetRenderObject(RenderObject* newObject) { renderObject = newObject; } void SetPhysicsObject(PhysicsObject* newObject) { physicsObject = newObject; } const string& GetName() const { return name; } virtual void OnCollisionBegin(GameObject* otherObject) { //std::cout << "OnCollisionBegin event occured!\n"; } virtual void OnCollisionEnd(GameObject* otherObject) { //std::cout << "OnCollisionEnd event occured!\n"; } bool GetBroadphaseAABB(Vector3&outsize) const; void UpdateBroadphaseAABB(); void SetWorldID(int newID) { worldID = newID; } int GetWorldID() const { return worldID; } protected: Transform transform; CollisionVolume* boundingVolume; PhysicsObject* physicsObject; RenderObject* renderObject; bool isActive; int worldID; string name; Layer layer; Vector3 broadphaseAABB; }; } }