mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-04-06 15:33:32 +00:00
135 lines
2.1 KiB
C++
Executable File
135 lines
2.1 KiB
C++
Executable File
#include "Path.h"
|
|
|
|
int Path::p = 0;
|
|
|
|
Path::Path()
|
|
: nodes(NULL),
|
|
length(0),
|
|
index(0),
|
|
id(++p)
|
|
{
|
|
}
|
|
|
|
Path::~Path()
|
|
{
|
|
destroy();
|
|
}
|
|
|
|
bool Path::isEmpty() const
|
|
{
|
|
return length == 0 || nodes == NULL;
|
|
}
|
|
|
|
void Path::copyNodes( Node** nodes, int length )
|
|
{
|
|
destroy();
|
|
|
|
this->length = length;
|
|
this->nodes = new Node*[length];
|
|
|
|
for (int i = 0; i < length; ++i)
|
|
this->nodes[i] = new Node(*nodes[i]);
|
|
}
|
|
|
|
void Path::destroy()
|
|
{
|
|
if (nodes) {
|
|
for (int i = 0; i < length; ++i)
|
|
delete nodes[i];
|
|
delete[] nodes;
|
|
|
|
nodes = NULL;
|
|
index = length = 0;
|
|
}
|
|
}
|
|
|
|
Node* Path::currentPos()
|
|
{
|
|
return nodes[index];
|
|
}
|
|
|
|
Vec3 Path::currentPos( Entity* e ) const
|
|
{
|
|
return getPos(e, index);
|
|
}
|
|
|
|
void Path::next()
|
|
{
|
|
index++;
|
|
}
|
|
|
|
void Path::setSize( int size )
|
|
{
|
|
length = size;
|
|
}
|
|
|
|
int Path::getSize() const
|
|
{
|
|
return length;
|
|
}
|
|
|
|
bool Path::isDone() const
|
|
{
|
|
return index >= length;
|
|
}
|
|
|
|
Node* Path::last() const
|
|
{
|
|
if (length > 0) {
|
|
return nodes[length - 1];
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
Node* Path::get( int i ) const
|
|
{
|
|
return nodes[i];
|
|
}
|
|
|
|
int Path::getIndex() const
|
|
{
|
|
return index;
|
|
}
|
|
|
|
void Path::setIndex( int index )
|
|
{
|
|
this->index = index;
|
|
}
|
|
|
|
Vec3 Path::getPos( Entity* e, int index ) const
|
|
{
|
|
float x = nodes[index]->x + (int) (e->bbWidth + 1) * 0.5f;
|
|
float z = nodes[index]->z + (int) (e->bbWidth + 1) * 0.5f;
|
|
float y = nodes[index]->y;
|
|
return Vec3(x, y, z);
|
|
}
|
|
|
|
bool Path::sameAs( const Path* path ) const
|
|
{
|
|
if (!path) return false;
|
|
if (path->length != length) return false;
|
|
for (int i = 0; i < length; ++i) {
|
|
Node& node = *path->nodes[i];
|
|
if (nodes[i]->x != node.x || nodes[i]->y != node.y || nodes[i]->z != node.z)
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool Path::endsIn( const Vec3& pos ) const
|
|
{
|
|
const Node* end = last();
|
|
if (end == NULL) return false;
|
|
return end->x == Mth::floor(pos.x)
|
|
&& end->y == Mth::floor(pos.y)
|
|
&& end->z == Mth::floor(pos.z);
|
|
}
|
|
|
|
bool Path::endsInXZ( const Vec3& pos ) const
|
|
{
|
|
const Node* end = last();
|
|
if (end == NULL) return false;
|
|
return end->x == Mth::floor(pos.x)
|
|
&& end->z == Mth::floor(pos.z);
|
|
}
|