cirno-puzzle/src/level.h

48 lines
1.0 KiB
C
Raw Normal View History

2020-02-19 12:50:09 -05:00
#ifndef LEVEL_H
#define LEVEL_H
#include <array>
2020-03-14 21:33:39 -04:00
#include "cell.h"
2020-02-19 12:50:09 -05:00
2020-03-15 17:57:39 -04:00
const std::string default_file_name = "test_map";
2020-02-19 12:50:09 -05:00
2020-03-15 17:57:39 -04:00
using Row = std::vector<Cell *>;
using Map = std::vector<Row>;
2020-02-19 12:50:09 -05:00
/// Abstraction over 2D array to quickly get access to level cells
2020-02-19 12:50:09 -05:00
class Level
{
private:
Map map;
2020-03-15 11:02:37 -04:00
sf::Color color_ground;
2020-03-15 17:57:39 -04:00
size_t level_width, level_height;
std::array<Cell *, N_CELLS> default_cells;
void prepareCellInstances();
void readMap(std::ifstream &file);
2020-02-19 12:50:09 -05:00
public:
2020-03-15 17:57:39 -04:00
Level(const std::string &map_file = default_file_name);
~Level();
size_t width() const;
size_t height() const;
2020-02-20 13:34:41 -05:00
/// Place a bridge cell
2020-02-21 09:13:12 -05:00
void placeBridge(coordinate x, coordinate y);
2020-02-20 13:34:41 -05:00
/// Get the 2D array of level map
2020-02-21 16:55:13 -05:00
Map& mapArray();
2020-02-20 13:34:41 -05:00
/// Replace a charge cell with a ground cell
2020-02-21 09:13:12 -05:00
void removeCharge(coordinate x, coordinate y);
2020-03-15 11:02:37 -04:00
/// Get default color for passable cells
sf::Color defaultGroundColor();
/// Set default color for passable cells
void setDefaultGroundColor(const sf::Color &color);
2020-02-19 12:50:09 -05:00
};
#endif // LEVEL_H