Merged unit info into Node.
This commit is contained in:
@@ -7,7 +7,6 @@
|
|||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#define TERRAIN(x, y) (_terrain[(x) + (y) * _width])
|
#define TERRAIN(x, y) (_terrain[(x) + (y) * _width])
|
||||||
#define UNITS(x, y) (_units[(x) + (y) * _width])
|
|
||||||
#define NODES(x, y) (_nodes[(x) + (y) * _width])
|
#define NODES(x, y) (_nodes[(x) + (y) * _width])
|
||||||
|
|
||||||
using namespace godot;
|
using namespace godot;
|
||||||
@@ -15,14 +14,15 @@ using namespace godot;
|
|||||||
static const int STRAIGHT_DISTANCE = 10;
|
static const int STRAIGHT_DISTANCE = 10;
|
||||||
static const int DIAGONAL_DISTANCE = 14;
|
static const int DIAGONAL_DISTANCE = 14;
|
||||||
|
|
||||||
Node::Node()
|
Node::Node() { }
|
||||||
|
|
||||||
|
Node::Node(int x, int y)
|
||||||
{
|
{
|
||||||
|
this->hasUnit = false;
|
||||||
|
|
||||||
this->openPass = 0;
|
this->openPass = 0;
|
||||||
this->closedPass = 0;
|
this->closedPass = 0;
|
||||||
}
|
|
||||||
|
|
||||||
Node::Node(int x, int y) : Node()
|
|
||||||
{
|
|
||||||
this->x = x;
|
this->x = x;
|
||||||
this->y = y;
|
this->y = y;
|
||||||
}
|
}
|
||||||
@@ -153,7 +153,6 @@ void MultilevelAStarEx::init(const Rect2i ®ion)
|
|||||||
_trans = region.get_position();
|
_trans = region.get_position();
|
||||||
|
|
||||||
_terrain.resize(_width * _height, BLOCKED);
|
_terrain.resize(_width * _height, BLOCKED);
|
||||||
_units.resize(_width * _height, false);
|
|
||||||
_nodes.resize(_width * _height);
|
_nodes.resize(_width * _height);
|
||||||
|
|
||||||
std::vector<Node>::iterator iter = _nodes.begin();
|
std::vector<Node>::iterator iter = _nodes.begin();
|
||||||
@@ -199,7 +198,7 @@ void MultilevelAStarEx::set_unit(const Vector2i &cell, bool blocked)
|
|||||||
DEV_ASSERT(_region.has_point(cell));
|
DEV_ASSERT(_region.has_point(cell));
|
||||||
|
|
||||||
Vector2i cell2 = cell - _trans;
|
Vector2i cell2 = cell - _trans;
|
||||||
UNITS(cell2.x, cell2.y) = blocked;
|
NODES(cell2.x, cell2.y).hasUnit = blocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MultilevelAStarEx::get_unit(const Vector2i &cell) const
|
bool MultilevelAStarEx::get_unit(const Vector2i &cell) const
|
||||||
@@ -208,12 +207,12 @@ bool MultilevelAStarEx::get_unit(const Vector2i &cell) const
|
|||||||
DEV_ASSERT(_region.has_point(cell));
|
DEV_ASSERT(_region.has_point(cell));
|
||||||
|
|
||||||
Vector2i cell2 = cell - _trans;
|
Vector2i cell2 = cell - _trans;
|
||||||
return UNITS(cell2.x, cell2.y);
|
return NODES(cell2.x, cell2.y).hasUnit;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MultilevelAStarEx::can_move(const Node *current, int x, int y) const
|
bool MultilevelAStarEx::can_move(const Node *current, int x, int y) const
|
||||||
{
|
{
|
||||||
if (UNITS(x, y)) return false;
|
if (NODES(x, y).hasUnit) return false;
|
||||||
|
|
||||||
TerrainType tc = TERRAIN(current->x, current->y);
|
TerrainType tc = TERRAIN(current->x, current->y);
|
||||||
TerrainType td = TERRAIN(x, y);
|
TerrainType td = TERRAIN(x, y);
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool hasUnit;
|
||||||
|
|
||||||
int openPass, closedPass;
|
int openPass, closedPass;
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
@@ -57,7 +59,6 @@ private:
|
|||||||
bool _init;
|
bool _init;
|
||||||
int _pass;
|
int _pass;
|
||||||
std::vector<TerrainType> _terrain;
|
std::vector<TerrainType> _terrain;
|
||||||
std::vector<bool> _units;
|
|
||||||
std::vector<Node> _nodes;
|
std::vector<Node> _nodes;
|
||||||
|
|
||||||
Rect2i _region;
|
Rect2i _region;
|
||||||
|
|||||||
Reference in New Issue
Block a user