aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/AABB.h
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/AABB.h
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.World/AABB.h')
-rw-r--r--Minecraft.World/AABB.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/Minecraft.World/AABB.h b/Minecraft.World/AABB.h
new file mode 100644
index 00000000..81405ea1
--- /dev/null
+++ b/Minecraft.World/AABB.h
@@ -0,0 +1,65 @@
+#pragma once
+
+#include "Vec3.h"
+#include "Definitions.h"
+
+class HitResult;
+using namespace std;
+
+class AABB
+{
+ // 4J added so we can have separate pools for different threads
+ class ThreadStorage
+ {
+ public:
+ static const int POOL_SIZE = 1024;
+ AABB *pool;
+ unsigned int poolPointer;
+ ThreadStorage();
+ ~ThreadStorage();
+ };
+ static DWORD tlsIdx;
+ static ThreadStorage *tlsDefault;
+public:
+ // Each new thread that needs to use Vec3 pools will need to call one of the following 2 functions, to either create its own
+ // local storage, or share the default storage already allocated by the main thread
+ static void CreateNewThreadStorage();
+ static void UseDefaultThreadStorage();
+ static void ReleaseThreadStorage();
+
+ static AABB *newPermanent(double x0, double y0, double z0, double x1, double y1, double z1);
+ static void clearPool();
+ static void resetPool();
+ static AABB *newTemp(double x0, double y0, double z0, double x1, double y1, double z1);
+
+ double x0, y0, z0;
+ double x1, y1, z1;
+
+private:
+ AABB(double x0, double y0, double z0, double x1, double y1, double z1);
+ AABB() {}
+public:
+ AABB *set(double x0, double y0, double z0, double x1, double y1, double z1);
+ AABB *expand(double xa, double ya, double za);
+ AABB *grow(double xa, double ya, double za);
+public:
+ AABB *cloneMove(double xa, double ya, double za);
+ double clipXCollide(AABB *c, double xa);
+ double clipYCollide(AABB *c, double ya);
+ double clipZCollide(AABB *c, double za);
+ bool intersects(AABB *c);
+ bool intersectsInner(AABB *c);
+ AABB *move(double xa, double ya, double za);
+ bool intersects(double x02, double y02, double z02, double x12, double y12, double z12);
+ bool contains(Vec3 *p);
+ bool containsIncludingLowerBound(Vec3 *p); // 4J Added
+ double getSize();
+ AABB *shrink(double xa, double ya, double za);
+ AABB *copy();
+ HitResult *clip(Vec3 *a, Vec3 *b);
+ bool containsX(Vec3 *v);
+ bool containsY(Vec3 *v);
+ bool containsZ(Vec3 *v);
+ void set(AABB *b);
+ wstring toString();
+};