4jcraft/Minecraft.World/Util/Vec3.h

44 lines
1.2 KiB
C++

#pragma once
#include <optional>
#include <string>
class AABB;
class Vec3 {
public:
double x, y, z;
Vec3() {}
Vec3(double x, double y, double z);
Vec3 vectorTo(const Vec3& p) const;
Vec3 normalize() const;
double dot(const Vec3& p) const;
Vec3 cross(const Vec3& p) const;
Vec3 add(double x, double y, double z) const;
double distanceTo(const Vec3& p) const;
double distanceToSqr(const Vec3& p) const;
double distanceToSqr(double x2, double y2, double z2) const;
Vec3 scale(double l) const;
double length() const;
std::optional<Vec3> clipX(const Vec3& b, double xt) const;
std::optional<Vec3> clipY(const Vec3& b, double yt) const;
std::optional<Vec3> clipZ(const Vec3& b, double zt) const;
std::wstring toString() const;
Vec3 lerp(const Vec3& v, double a) const;
void xRot(float degs);
void yRot(float degs);
void zRot(float degs);
// 4J Added
double distanceTo(AABB* box);
Vec3 closestPointOnLine(const Vec3& p1, const Vec3& p2) const;
double distanceFromLine(const Vec3& p1, const Vec3& p2) const;
constexpr bool operator==(const Vec3& rhs) const {
return x == rhs.x and y == rhs.y and z == rhs.z;
}
};