diff options
Diffstat (limited to 'Minecraft.World/Pos.cpp')
| -rw-r--r-- | Minecraft.World/Pos.cpp | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/Minecraft.World/Pos.cpp b/Minecraft.World/Pos.cpp new file mode 100644 index 00000000..3fad76e8 --- /dev/null +++ b/Minecraft.World/Pos.cpp @@ -0,0 +1,248 @@ +#include "stdafx.h" + +#include "Pos.h" + + + +Pos::Pos() +{ + x = y = z = 0; +} + +Pos::Pos(int x, int y, int z) +{ + this->x = x; + this->y = y; + this->z = z; +} + +Pos::Pos(Pos *position) +{ + this->x = position->x; + this->y = position->y; + this->z = position->z; +} + +//@Override +//public boolean equals(Object other) +bool Pos::equals(void *other) +{ + // TODO 4J Stu I cannot do a dynamic_cast from a void pointer + // If I cast it to a Pos then do a dynamic_cast will it still return NULL if it wasn't originally a Pos? + if (!( dynamic_cast<Pos *>( (Pos *)other ) != NULL )) + { + return false; + } + + Pos *p = (Pos *) other; + return x == p->x && y == p->y && z == p->z; +} + +//@Override +int Pos::hashCode() +{ + return x + (z << 8) + (y << 16); +} + +int Pos::compareTo(Pos *pos) +{ + if (y == pos->y) + { + if (z == pos->z) + { + return x - pos->x; + } + return z - pos->z; + } + return y - pos->y; +} + +Pos *Pos::offset(int x, int y, int z) +{ + return new Pos(this->x + x, this->y + y, this->z + z); +} + +void Pos::set(int x, int y, int z) +{ + this->x = x; + this->y = y; + this->z = z; +} + +void Pos::set(Pos *pos) +{ + this->x = pos->x; + this->y = pos->y; + this->z = pos->z; +} + +Pos *Pos::above() +{ + return new Pos(x, y + 1, z); +} + +Pos *Pos::above(int steps) +{ + return new Pos(x, y + steps, z); +} + +Pos *Pos::below() +{ + return new Pos(x, y - 1, z); +} + +Pos *Pos::below(int steps) +{ + return new Pos(x, y - steps, z); +} + +Pos *Pos::north() +{ + return new Pos(x, y, z - 1); +} + +Pos *Pos::north(int steps) +{ + return new Pos(x, y, z - steps); +} + +Pos *Pos::south() +{ + return new Pos(x, y, z + 1); +} + +Pos *Pos::south(int steps) +{ + return new Pos(x, y, z + steps); +} + +Pos *Pos::west() +{ + return new Pos(x - 1, y, z); +} + +Pos *Pos::west(int steps) +{ + return new Pos(x - 1, y, z); +} + +Pos *Pos::east() +{ + return new Pos(x + 1, y, z); +} + +Pos *Pos::east(int steps) +{ + return new Pos(x + steps, y, z); +} + +void Pos::move(int x, int y, int z) +{ + this->x += x; + this->y += y; + this->z += z; +} + +void Pos::move(Pos pos) +{ + this->x += pos.x; + this->y += pos.y; + this->z += pos.z; +} + +void Pos::moveX(int steps) +{ + this->x += steps; +} + +void Pos::moveY(int steps) +{ + this->y += steps; +} + +void Pos::moveZ(int steps) +{ + this->z += steps; +} + +void Pos::moveUp(int steps) +{ + this->y += steps; +} + +void Pos::moveUp() +{ + this->y++; +} + +void Pos::moveDown(int steps) +{ + this->y -= steps; +} + +void Pos::moveDown() +{ + this->y--; +} + +void Pos::moveEast(int steps) +{ + this->x += steps; +} + +void Pos::moveEast() +{ + this->x++; +} + +void Pos::moveWest(int steps) +{ + this->x -= steps; +} + +void Pos::moveWest() +{ + this->x--; +} + +void Pos::moveNorth(int steps) +{ + this->z -= steps; +} + +void Pos::moveNorth() +{ + this->z--; +} + +void Pos::moveSouth(int steps) +{ + this->z += steps; +} + +void Pos::moveSouth() +{ + this->z++; +} + +double Pos::dist(int x, int y, int z) +{ + int dx = this->x - x; + int dy = this->y - y; + int dz = this->z - z; + + return sqrt( (double) dx * dx + dy * dy + dz * dz); +} + +double Pos::dist(Pos *pos) +{ + return dist(pos->x, pos->y, pos->z); +} + +float Pos::distSqr(int x, int y, int z) +{ + int dx = this->x - x; + int dy = this->y - y; + int dz = this->z - z; + return dx * dx + dy * dy + dz * dz; +}
\ No newline at end of file |
