mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-24 07:13:36 +00:00
63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
|
|
#include "minecraft/world/level/ChunkPos.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include "util/StringHelpers.h"
|
|
#include "minecraft/world/entity/Entity.h"
|
|
#include "minecraft/world/level/TilePos.h"
|
|
|
|
ChunkPos::ChunkPos(int x, int z) : x(x), z(z) {}
|
|
|
|
int64_t ChunkPos::hashCode(int x, int z) {
|
|
int64_t xx = x;
|
|
int64_t zz = z;
|
|
return (xx & 0xffffffffl) | ((zz & 0xffffffffl) << 32l);
|
|
}
|
|
|
|
int ChunkPos::hashCode() {
|
|
int64_t hash = hashCode(x, z);
|
|
int h1 = (int)(hash);
|
|
int h2 = (int)(hash >> 32l);
|
|
return h1 ^ h2;
|
|
}
|
|
|
|
double ChunkPos::distanceToSqr(std::shared_ptr<Entity> e) {
|
|
double xPos = x * 16 + 8;
|
|
double zPos = z * 16 + 8;
|
|
|
|
double xd = xPos - e->x;
|
|
double zd = zPos - e->z;
|
|
|
|
return xd * xd + zd * zd;
|
|
}
|
|
|
|
double ChunkPos::distanceToSqr(double px, double pz) {
|
|
double xPos = x * 16 + 8;
|
|
double zPos = z * 16 + 8;
|
|
|
|
double xd = xPos - px;
|
|
double zd = zPos - pz;
|
|
|
|
return xd * xd + zd * zd;
|
|
}
|
|
|
|
int ChunkPos::getMiddleBlockX() { return (x << 4) + 8; }
|
|
|
|
int ChunkPos::getMiddleBlockZ() { return (z << 4) + 8; }
|
|
|
|
TilePos ChunkPos::getMiddleBlockPosition(int y) {
|
|
return TilePos(getMiddleBlockX(), y, getMiddleBlockZ());
|
|
}
|
|
|
|
std::string ChunkPos::toString() {
|
|
return "[" + toWString<int>(x) + ", " + toWString<int>(z) + "]";
|
|
}
|
|
|
|
int64_t ChunkPos::hash_fnct(const ChunkPos& k) { return k.hashCode(k.x, k.z); }
|
|
|
|
bool ChunkPos::eq_test(const ChunkPos& x, const ChunkPos& y) {
|
|
return x.x == y.x && x.z == y.z;
|
|
}
|