///////////////////////////////////////////////////////////////////// // Created by [Erik Persson] [2013] ///////////////////////////////////////////////////////////////////// #ifndef GAME_H #define GAME_H //Includes windows so we need to undef minmax #define NOMINMAX #include #include "GameAPI.h" #include "Player.h" #include "Level.h" #include #include #include #include namespace GameLogic { class Game :public GameAPI { public: class PlayerData :public IPlayerData { public: PlayerData(); PlayerData(int playerID,int teamID); ~PlayerData(); void Move(const PLAYER_MOVEMENT &movement) override; void Rotate(const Oyster::Math3D::Float3 lookDir) override; void UseWeapon(const WEAPON_FIRE &usage) override; int GetTeamID() const override; PLAYER_STATE GetState() const override; Oyster::Math::Float3 GetPosition() override; Oyster::Math::Float4x4 GetOrientation() override; int GetID() const override; OBJECT_TYPE GetType() const override; Player *player; }; class LevelData :public ILevelData { public: LevelData(); ~LevelData(); Oyster::Math::Float3 GetPosition() override; Oyster::Math::Float4x4 GetOrientation() override; int GetID() const override; OBJECT_TYPE GetType() const override; IObjectData* GetObjectAt( int ID ) const override; Level *level; }; public: Game(); ~Game(); void GetAllPlayerPositions() const override; PlayerData* CreatePlayer() override; LevelData* CreateLevel() override; void CreateTeam() override; bool NewFrame() override; void SetFPS( int FPS ) override; void SetFrameTimeLength( float seconds ) override; void SetSubscription(GameEvent::ObjectEventFunctionType type, GameEvent::ObjectEventFunction functionPointer) override; bool Initiate() override; float GetFrameTime() const; private: static void PhysicsOnMove(const Oyster::Physics::ICustomBody *object); static void PhysicsOnDestroy(::Utility::DynamicMemory::UniquePointer proto); private: Utility::DynamicMemory::DynamicArray players; LevelData* level; float frameTime; bool initiated; GameEvent::ObjectEventFunction onDeadFnc; GameEvent::ObjectEventFunction onMoveFnc; }; } #endif