diff options
Diffstat (limited to 'Minecraft.World/AABB.h')
| -rw-r--r-- | Minecraft.World/AABB.h | 65 |
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(); +}; |
