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"
39 class CellGrid:
public FifeClass {
44 CellGrid(
bool allow_diagonals=
false);
55 void getAccessibleCoordinates(
const ModelCoordinate& curpos, std::vector<ModelCoordinate>& coordinates);
59 virtual const std::string& getType()
const = 0;
63 virtual const std::string& getName()
const = 0;
71 virtual bool isAccessible(
const ModelCoordinate& curpos,
const ModelCoordinate& target) = 0;
79 virtual float getAdjacentCost(
const ModelCoordinate& curpos,
const ModelCoordinate& target) = 0;
84 virtual unsigned int getCellSideCount()
const = 0;
89 ExactModelCoordinate toMapCoordinates(
const ModelCoordinate& layer_coords);
94 virtual ExactModelCoordinate toMapCoordinates(
const ExactModelCoordinate& layer_coords) = 0;
99 virtual ModelCoordinate toLayerCoordinates(
const ExactModelCoordinate& map_coord) = 0;
104 virtual ExactModelCoordinate toExactLayerCoordinates(
const ExactModelCoordinate& map_coord) = 0;
110 virtual void getVertices(std::vector<ExactModelCoordinate>& vtx,
const ModelCoordinate& cell) = 0;
115 void setXShift(
const double& xshift) {
123 const double getXShift()
const {
return m_xshift; }
128 void setYShift(
const double yshift) {
136 const double getYShift()
const {
return m_yshift; }
141 void setXScale(
const double scale) {
149 void setYScale(
const double scale) {
157 const double getXScale()
const {
return m_xscale; }
162 const double getYScale()
const {
return m_yscale; }
167 void setRotation(
const double rotation) {
168 m_rotation = rotation;
175 const double getRotation()
const {
return m_rotation; }
179 virtual CellGrid* clone() = 0;
182 void updateMatrices();
183 bool ptInTriangle(
const ExactModelCoordinate& pt,
const ExactModelCoordinate& pt1,
const ExactModelCoordinate& pt2,
const ExactModelCoordinate& pt3);
185 DoubleMatrix m_matrix;
186 DoubleMatrix m_inverse_matrix;
192 bool m_allow_diagonals;
195 int orientation(
const ExactModelCoordinate& pt,
const ExactModelCoordinate& pt1,
const ExactModelCoordinate& pt2);