#ifndef GAME_H_7D2B65AE #define GAME_H_7D2B65AE #include #include #include #include #include "map.h" const int GAME_WIDTH = 640*2; const int GAME_HEIGHT = 480*2; const int TILE_WIDTH = 8*2; const int TILE_HEIGHT = TILE_WIDTH; const int INIT_ZOOM = 10; const int ZOOM_X_FACTOR = 8; const int ZOOM_Y_FACTOR = 6; const int RADIUS = 8; enum class Tile { Floor, Wall, Dust, Lamp }; enum class Source { None, Dust, Lamp, Player }; enum class LoseState { None, PoppingLamps, PoppingPlayer, Outro }; struct Input { bool left = false; bool right = false; bool up = false; bool down = false; }; using coord = std::tuple; struct Kickup { int x; int y; size_t cur; size_t radius; size_t chain; std::set done; std::set front; }; struct MapData { Tile tile = Tile::Floor; bool lit = false; bool wasLit = false; size_t dustLife = 0; Source lightType = Source::None; int lightRadius = 0; std::set litTiles; }; class Game { public: Game(std::mt19937& rng) : rng(rng), map( -INIT_ZOOM * ZOOM_X_FACTOR / 2, -INIT_ZOOM * ZOOM_Y_FACTOR / 2, INIT_ZOOM * ZOOM_X_FACTOR, INIT_ZOOM * ZOOM_Y_FACTOR) { } std::mt19937& rng; Map map; std::list kickups; int litSpots = 0; bool dirtyLighting = true; size_t numLamps = 0; size_t numDust = 0; int player_x = 0; int player_y = 0; bool renderPlayer = true; int maxZoom = INIT_ZOOM; int curZoom = INIT_ZOOM; int curBoundX = map.getLeft(); int curBoundY = map.getTop(); bool zooming = false; int zoomProgress = 0; int zoomLength; int lastZoomTop; int lastZoomLeft; int lastZoomWidth; int lastZoomHeight; bool firstInput = false; Input lastInput; }; #endif /* end of include guard: GAME_H_7D2B65AE */