aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/AABB.h
blob: 4f7a3531af8fb7be6108392651acab5354579b06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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);
	AABB *minmax(AABB *other);
	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();
};