mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-04-06 15:33:32 +00:00
the whole game
This commit is contained in:
134
src/world/level/pathfinder/Path.cpp
Executable file
134
src/world/level/pathfinder/Path.cpp
Executable file
@@ -0,0 +1,134 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user