heuristic.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "util/math/fife_math.h"
00024
00025
00026
00027
00028
00029
00030
00031 #include "heuristic.h"
00032
00033 namespace FIFE {
00034
00035 Heuristic* Heuristic::getHeuristic(const std::string& cellgridType) {
00036 if(cellgridType == "square") {
00037 return SquareGridHeuristic::instance();
00038 }
00039
00040 if(cellgridType == "hexagonal") {
00041 return HexGridHeuristic::instance();
00042 }
00043
00044 return 0;
00045 }
00046
00047 SquareGridHeuristic::SquareGridHeuristic(void) {
00048 }
00049
00050 SquareGridHeuristic::~SquareGridHeuristic(void) {
00051 }
00052
00053 float SquareGridHeuristic::calculate(const ModelCoordinate& current, const ModelCoordinate& dest) {
00054 return (float)(ABS(dest.x - current.x) + ABS(dest.y - current.y));
00055 }
00056
00057 HexGridHeuristic::HexGridHeuristic(void) {
00058 }
00059
00060 HexGridHeuristic::~HexGridHeuristic(void) {
00061 }
00062
00063 float HexGridHeuristic::calculate(const ModelCoordinate& current, const ModelCoordinate& dest) {
00064 float cost = (float)(((dest.x - current.x) * (dest.x - current.x)) +
00065 ((dest.y - current.y) * (dest.y - current.y)) +
00066 ((dest.x - current.x) * (dest.y - current.y)));
00067 return cost;
00068 }
00069 }