/* Starshatter: The Open Source Project Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. AUTHOR: John DiCamillo */ #ifndef Game_h #define Game_h #include "Types.h" #include "Screen.h" #include "Video.h" #include "VideoSettings.h" // +--------------------------------------------------------------------+ class Universe; class Sound; class SoundCard; class Video; class VideoFactory; class Text; // +--------------------------------------------------------------------+ class Game { public: static const char* TYPENAME() { return "Game"; } enum STATUS { OK, RUN, EXIT, INIT_FAILED, TOO_MANY }; Game(); virtual ~Game(); // // MAIN GAME FUNCTIONALITY: // virtual bool Init(HINSTANCE hi, HINSTANCE hpi, LPSTR cmdline, int nCmdShow); virtual int Run(); virtual void Exit(); virtual bool OnPaint() { return false; } virtual bool OnHelp() { return false; } virtual void Activate(bool f); virtual void Pause(bool f); int Status() const { return status; } // // GENERAL GAME CLASS UTILITY METHODS: // static Game* GetInstance(); DWORD Frame(); void SetMaxFrameLength(double seconds) { max_frame_length = seconds; } double GetMaxFrameLength() { return max_frame_length; } bool Active() { return active; } bool Paused() { return paused; } bool Server() { return server; } bool ShowMouse() { return show_mouse; } virtual bool GameLoop(); virtual void UpdateWorld(); virtual void GameState(); virtual void UpdateScreen(); virtual bool InitGame(); protected: Universe* world; VideoFactory* video_factory; Video* video; VideoSettings* video_settings; SoundCard* soundcard; Screen* screen; int status; int exit_code; bool active; bool paused; bool server; bool show_mouse; DWORD frame_number; double max_frame_length; }; // +--------------------------------------------------------------------+ #endif // Game_h