the whole game

This commit is contained in:
Kolyah35
2026-03-02 22:04:18 +03:00
parent 816e9060b4
commit f0617a5d22
2069 changed files with 581500 additions and 0 deletions

View 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);
}