#include "SynEngine.hpp" class Grid : public Drawable { private: sf::Vector2i offset; sf::Vector2i gridSize; Cell *cellArray; unsigned int cellCount; Cell *CreateCellArray(sf::Vector2i); public: Grid(); bool SetGrid(); void UpdateCell(unsigned int, unsigned int, unsigned int, int = -1); void Draw(sf::RenderWindow *); ~Grid(); }; Grid::Grid() { cellArray = NULL; } Cell *Grid::CreateCellArray(sf::Vector2i) { cellCount = gridSize.x *gridSize.y; Cell *array = new Cell[cellCount]; if(!array) return NULL; GameConfiguration *config = GameManager::GetConfig(); sf::Vector2i cellSize = config -> GetSpriteCellSize(); float sizeMultiplier = config -> GetSpriteSizeMultiplier(); int xPos; int yPos; int i; for (i = 0; i < cellCount; i++) { xPos = (i % gridSize.x) * cellSize.x * sizeMultiplier + offset.x; yPos = (i / gridSize.x) * cellSize.y * sizeMultiplier + offset.y; (array + i) -> Set(xPos, yPos); } return array; } bool Grid::SetGrid() { GameConfiguration *config = GameManager::GetConfig(); if(!config) return false; sf::Vector2i screenDimensions = config -> GetScreenDimensions(); gridSize = config -> GetGridSize(); offset = config -> GetGridOffset(); cellArray = CreateCellArray(gridSize); return true; } void Grid::UpdateCell(unsigned int x, unsigned int y, unsigned int spriteIndex, int direction) { int index = x + gridSize.x * y; Cell *cell = cellArray + index; cell -> UpdateSprite(spriteIndex); if(direction >= 0) cell -> UpdateRotation(direction); } void Grid::Draw(sf::RenderWindow *window) { int i; for (i = 0; i < cellCount; i++) (cellArray + i) -> Draw(window); } Grid::~Grid() { delete[] cellArray; }