22 #ifndef FIFE_MODEL_GRIDS_CELLGRID_H
23 #define FIFE_MODEL_GRIDS_CELLGRID_H
34 #include "model/metamodel/modelcoords.h"
35 #include "util/math/matrix.h"
36 #include "util/base/fifeclass.h"
37 #include "util/base/fife_stdint.h"
40 class CellGrid:
public FifeClass {
45 CellGrid(
bool allow_diagonals=
false);
56 void getAccessibleCoordinates(
const ModelCoordinate& curpos, std::vector<ModelCoordinate>& coordinates);
60 virtual const std::string& getType()
const = 0;
64 virtual const std::string& getName()
const = 0;
72 virtual bool isAccessible(
const ModelCoordinate& curpos,
const ModelCoordinate& target) = 0;
80 virtual double getAdjacentCost(
const ModelCoordinate& curpos,
const ModelCoordinate& target) = 0;
85 virtual uint32_t getCellSideCount()
const = 0;
90 ExactModelCoordinate toMapCoordinates(
const ModelCoordinate& layer_coords);
95 virtual ExactModelCoordinate toMapCoordinates(
const ExactModelCoordinate& layer_coords) = 0;
100 virtual ModelCoordinate toLayerCoordinates(
const ExactModelCoordinate& map_coord) = 0;
105 virtual ExactModelCoordinate toExactLayerCoordinates(
const ExactModelCoordinate& map_coord) = 0;
111 virtual void getVertices(std::vector<ExactModelCoordinate>& vtx,
const ModelCoordinate& cell) = 0;
116 void setXShift(
const double& xshift) {
124 const double getXShift()
const {
return m_xshift; }
129 void setYShift(
const double yshift) {
137 const double getYShift()
const {
return m_yshift; }
142 void setZShift(
const double zshift) {
150 const double getZShift()
const {
return m_zshift; }
155 void setXScale(
const double scale) {
163 void setYScale(
const double scale) {
171 const double getXScale()
const {
return m_xscale; }
176 const double getYScale()
const {
return m_yscale; }
181 void setRotation(
const double rotation) {
182 m_rotation = rotation;
189 const double getRotation()
const {
return m_rotation; }
193 virtual CellGrid* clone() = 0;
196 void updateMatrices();
197 bool ptInTriangle(
const ExactModelCoordinate& pt,
const ExactModelCoordinate& pt1,
const ExactModelCoordinate& pt2,
const ExactModelCoordinate& pt3);
199 DoubleMatrix m_matrix;
200 DoubleMatrix m_inverse_matrix;
207 bool m_allow_diagonals;
210 int32_t orientation(
const ExactModelCoordinate& pt,
const ExactModelCoordinate& pt1,
const ExactModelCoordinate& pt2);