diff --git a/src/MultilevelAStarEx.cpp b/src/MultilevelAStarEx.cpp index a5a3b73..7eb34fa 100644 --- a/src/MultilevelAStarEx.cpp +++ b/src/MultilevelAStarEx.cpp @@ -6,7 +6,6 @@ #include -#define TERRAIN(x, y) (_terrain[(x) + (y) * _width]) #define NODES(x, y) (_nodes[(x) + (y) * _width]) using namespace godot; @@ -19,6 +18,7 @@ Node::Node() { } Node::Node(int x, int y) { this->hasUnit = false; + this->terrainType = BLOCKED; this->openPass = 0; this->closedPass = 0; @@ -152,7 +152,6 @@ void MultilevelAStarEx::init(const Rect2i ®ion) _height = region.get_size().height; _trans = region.get_position(); - _terrain.resize(_width * _height, BLOCKED); _nodes.resize(_width * _height); std::vector::iterator iter = _nodes.begin(); @@ -180,16 +179,16 @@ void MultilevelAStarEx::set_terrain(const Vector2i &cell, TerrainType type) DEV_ASSERT(_region.has_point(cell)); Vector2i cell2 = cell - _trans; - TERRAIN(cell2.x, cell2.y) = type; + NODES(cell2.x, cell2.y).terrainType = type; } -MultilevelAStarEx::TerrainType MultilevelAStarEx::get_terrain(const Vector2i &cell) const +TerrainType MultilevelAStarEx::get_terrain(const Vector2i &cell) const { DEV_ASSERT(_init); DEV_ASSERT(_region.has_point(cell)); Vector2i cell2 = cell - _trans; - return TERRAIN(cell2.x, cell2.y); + return NODES(cell2.x, cell2.y).terrainType; } void MultilevelAStarEx::set_unit(const Vector2i &cell, bool blocked) @@ -214,8 +213,8 @@ bool MultilevelAStarEx::can_move(const Node *current, int x, int y) const { if (NODES(x, y).hasUnit) return false; - TerrainType tc = TERRAIN(current->x, current->y); - TerrainType td = TERRAIN(x, y); + TerrainType tc = NODES(current->x, current->y).terrainType; + TerrainType td = NODES(x, y).terrainType; if (td == BLOCKED) { diff --git a/src/MultilevelAStarEx.h b/src/MultilevelAStarEx.h index 6da2eba..a91d5f0 100644 --- a/src/MultilevelAStarEx.h +++ b/src/MultilevelAStarEx.h @@ -10,6 +10,13 @@ namespace godot { +enum TerrainType : int +{ + STAIRS = -1, + BLOCKED = 0, + GROUND = 1, +}; + class Node { friend class MultilevelAStarEx; @@ -21,6 +28,7 @@ public: private: bool hasUnit; + TerrainType terrainType; int openPass, closedPass; int x, y; @@ -47,18 +55,9 @@ class MultilevelAStarEx : public RefCounted { GDCLASS(MultilevelAStarEx, RefCounted) -public: - enum TerrainType - { - STAIRS = -1, - BLOCKED = 0, - GROUND = 1, - }; - private: bool _init; int _pass; - std::vector _terrain; std::vector _nodes; Rect2i _region; @@ -86,6 +85,6 @@ public: } -VARIANT_ENUM_CAST(MultilevelAStarEx::TerrainType); +VARIANT_ENUM_CAST(TerrainType); #endif \ No newline at end of file