30#ifndef HORIZON_ZONE_GAME_MAP_HPP
31#define HORIZON_ZONE_GAME_MAP_HPP
50 class GameLogicProcess;
61class Map :
public std::enable_shared_from_this<Map>
64 Map(std::weak_ptr<GameLogicProcess>, std::string
const &, uint16_t, uint16_t, std::vector<uint8_t>
const &);
83 template<
class T,
class CONTAINER>
86 template<
class T,
class CONTAINER>
89 template<
class T,
class CONTAINER>
113 int d = r % (max - min + 1) + min;
117 a = r % (d * 2 + 1) - d;
118 b = r / (d * 2 + 1) % (d * 2 + 1) - d;
132 std::vector<MapCoords> available_cells;
137 for (
int i = std::max(x - xs, 0); i < std::min(x + xs, (
int)
_width); i++) {
138 for (
int j = std::max(y - ys, 0); j < std::min(y + ys,(
int)
_height); j++) {
139 if (i == x && j == y)
142 available_cells.push_back(
MapCoords(i, j));
146 if (available_cells.size() == 0)
149 int rnd = rand() % available_cells.size();
151 return available_cells.at(rnd);
178 std::string
const &new_map_name = unit->map()->get_name();
181 if (new_map_name.compare(
get_name()) == 0 && unit->grid_coords() == new_gcoords)
184 if (unit->has_valid_grid_reference())
185 unit->remove_grid_reference();
187 unit->set_grid_coords(new_gcoords);
194template<
class T,
class CONTAINER>
201template<
class T,
class CONTAINER>
210template<
class T,
class CONTAINER>
220 for (
int y = lower_bound.
y(); y <= upper_bound.
y(); y++) {
221 for (
int x = lower_bound.
x(); x <= upper_bound.
x(); x++) {
222 visit(x, y, visitor);
#define MAX_GRIDS_PER_MAP
Definition: GridDefinitions.hpp:66
Coordinates< MAX_CELLS_PER_MAP > MapCoords
Definition: GridDefinitions.hpp:83
#define MAX_CELLS_PER_GRID
Definition: GridDefinitions.hpp:65
#define MAX_CELLS_PER_MAP
Definition: GridDefinitions.hpp:67
#define MAX_VIEW_RANGE
Definition: Horizon.hpp:59
map_cell_types
Definition: MapDefinitions.hpp:34
int16_t y() const
Definition: Coordinates.hpp:120
Coordinates< BLOCK_COUNT > scale() const
Definition: Coordinates.hpp:108
Coordinates< BOUNDS > at_range(int range) const
Definition: Coordinates.hpp:91
int16_t x() const
Definition: Coordinates.hpp:119
GridType & get_grid(int x, int y)
Definition: GridHolder.hpp:57
Definition: GridReferenceContainerVisitor.hpp:70
void visit(GridReferenceContainerVisitor< VISITOR, GridReferenceContainer< GRID_OBJECT_TYPES > > &visitor)
Definition: Grid.hpp:61
The class Map is the representation of a map in the game. It contains all the cells and the grid hold...
Definition: Map.hpp:62
uint16_t _height
Definition: Map.hpp:165
void add_item_drop(int item_id, MapCoords map_coords, int amount, int identified)
Definition: Map.cpp:95
map_cell_types get_cell_type(MapCoords coords)
Definition: Map.hpp:76
GridHolderType _gridholder
Definition: Map.hpp:168
std::string _name
Definition: Map.hpp:164
AStar::Generator _pathfinder
Definition: Map.hpp:169
std::string const & get_name()
Definition: Map.hpp:69
uint16_t get_width()
Definition: Map.hpp:73
bool has_obstruction_at(int16_t x, int16_t y)
Definition: Map.cpp:67
GridCoords _max_grids
Definition: Map.hpp:166
bool ensure_grid_for_unit(T *unit, MapCoords coords)
Definition: Map.hpp:176
void visit(int grid_x, int grid_y, GridReferenceContainerVisitor< T, CONTAINER > &visitor)
Definition: Map.hpp:195
std::shared_ptr< GameLogicProcess > container()
Definition: Map.hpp:67
Cell _cells[MAX_CELLS_PER_MAP][MAX_CELLS_PER_MAP]
Definition: Map.hpp:167
GridHolderType & getGridHolder()
Definition: Map.hpp:78
MapCoords get_random_coordinates_in_walkable_area(uint16_t x, uint16_t y, int16_t xs, int16_t ys)
Definition: Map.hpp:130
uint16_t get_height()
Definition: Map.hpp:74
MapCoords get_random_accessible_coordinates()
Definition: Map.hpp:96
AStar::Generator & get_pathfinder()
Definition: Map.hpp:92
void set_user_count(int32_t count)
Definition: Map.hpp:154
~Map()
Definition: Map.cpp:58
std::weak_ptr< GameLogicProcess > _container
Definition: Map.hpp:163
int get_area()
Definition: Map.hpp:71
void add_user_count()
Definition: Map.cpp:80
int32_t _user_count
Definition: Map.hpp:170
uint16_t _width
Definition: Map.hpp:165
Map(std::weak_ptr< GameLogicProcess >, std::string const &, uint16_t, uint16_t, std::vector< uint8_t > const &)
Definition: Map.cpp:45
MapCoords get_random_coordinates_in_walkable_range(uint16_t x, uint16_t y, int16_t min, int16_t max)
Definition: Map.hpp:109
int32_t get_user_count()
Definition: Map.hpp:155
void sub_user_count()
Definition: Map.cpp:87
void visit_in_range(MapCoords const &map_coords, GridReferenceContainerVisitor< T, CONTAINER > &visitor, uint16_t range=MAX_VIEW_RANGE)
Definition: Map.hpp:202
size_t count(GridTypeListContainer< SPECIFIC_TYPE > const &elements, SPECIFIC_TYPE *)
Definition: GridReferenceContainer.hpp:100
Definition: Element.hpp:7
map_cell_types get_type()
Definition: Cell.hpp:61