#ifndef __GAME_H__ #define __GAME_H__ #include #include "SpriteStrip.h" #include "Animation.h" #include "Actor.h" #include "Display.h" #include "MenuDisplay.h" #include struct Collision { Actor *actor1; Actor *actor2; }; struct PlayingSound { int channel; Mix_Chunk *sound; }; typedef std::vector PlayingSoundList; // TODO : Take parts of the Game class and break them out into a Window class. // the way that the Game class lets you specify a render window tells me that // it should really be its own class, w/ a separate class for game logic typedef std::vector DisplayList; class Game : public SharedCanvas2D { protected: Mix_Music *bgmusic; // format is [ idx = [{filename, sound}, {filename, sound}] ] // .. where idx is a channel number, which gives you a vector of SoundPairs. PlayingSoundList playingSounds; int musicVolume; int soundVolume; int lastNumKeys; int fpslock; Uint8 *lastKeyState; std::map spriteMap; std::map actorMap; std::map animationMap; std::map displayMap; Game(); virtual ~Game(); public: // easier this way DisplayList windows; int realfps; static Game &NewSingleton() { static Game theGame; return theGame; } SDL_Surface *getCanvas(); int initVideo(int w, int h, int depth, int flags); int initSDL(int audio_rate = 44100, Uint16 audio_format = AUDIO_S16SYS, int audio_channels = 2, int audio_buffers = 4096); // this stuff is removed for now because the control event mapping isn't implemented // at all and it was causing problems /* int handleEvents(); int handleControlEvent(SDL_Event *event); */ void setMusicVolume(int volume = 128); void setSoundVolume(int volume = 128); int playMusic(std::string filename); void haltMusic(); int playSound(std::string filename, int loops = 0); void cleanSounds(int force = 0); // --------------- class factory stuff ----------------- SpriteStrip *newSpriteStrip(std::string key = ""); Animation *newAnimation(std::string key = ""); Actor *newActor(std::string key = ""); Display2D *newDisplay2D(std::string key = ""); MenuDisplay *newMenuDisplay(std::string key = ""); int freeSpriteStrip(std::string key = "", SpriteStrip *obj = NULL); int freeAnimation(std::string key = "", Animation *obj = NULL); int freeActor(std::string key = "", Actor *obj = NULL); int freeDisplay2D(std::string key = "", Display2D *obj = NULL); int freeMenuDisplay(std::string key = "", MenuDisplay *obj = NULL); // --------------- object tracking ------------------ int addSpriteStrip(SpriteStrip *strip, std::string key); SpriteStrip *getSpriteStrip(std::string stripName); int removeSpriteStrip(std::string stripName); int addActor(Actor *ptr, std::string key); Actor *getActor(std::string key); int removeActor(std::string key); int addAnimation(Animation *ptr, std::string key); Animation *getAnimation(std::string key); int removeAnimation(std::string key); int addDisplay(Display *ptr, std::string key); Display *getDisplay(std::string key); int removeDisplay(std::string key); // ----------------- updating crap void update(int logicOnly = 0); void finishFrame(); void lockFPS(int fps); // ----------------- input helpers int keyHeldDown(int keysym); }; #endif // __GAME_H__