the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "FrustumData.h"
3
4float** m_Frustum;
5
6
7FrustumData::FrustumData()
8{
9 m_Frustum = new float *[16];
10 for( int i = 0; i < 16; i++ ) m_Frustum[i] = new float[16];
11 proj = floatArray( 16 );
12 modl = floatArray( 16 );
13 clip = floatArray( 16 );
14}
15
16FrustumData::~FrustumData()
17{
18 delete[] proj.data;
19 delete[] modl.data;
20 delete[] clip.data;
21 for( int i = 0; i < 16; i++ ) delete[] m_Frustum[i];
22 delete[] m_Frustum;
23}
24
25bool FrustumData::pointInFrustum(float x, float y, float z)
26{
27 for (int i = 0; i < 6; i++)
28 {
29 if (m_Frustum[i][A] * x + m_Frustum[i][B] * y + m_Frustum[i][C] * z + m_Frustum[i][D] <= 0)
30 {
31 return false;
32 }
33 }
34
35 return true;
36}
37
38bool FrustumData::sphereInFrustum(float x, float y, float z, float radius)
39{
40 for (int i = 0; i < 6; i++)
41 {
42 if (m_Frustum[i][A] * x + m_Frustum[i][B] * y + m_Frustum[i][C] * z + m_Frustum[i][D] <= -radius)
43 {
44 return false;
45 }
46 }
47
48 return true;
49}
50
51bool FrustumData::cubeFullyInFrustum(double x1, double y1, double z1, double x2, double y2, double z2)
52{
53 for (int i = 0; i < 6; i++)
54 {
55 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false;
56 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false;
57 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false;
58 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0)) return false;
59 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false;
60 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false;
61 if (!(m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false;
62 if (!(m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0)) return false;
63 }
64
65 return true;
66}
67
68bool FrustumData::cubeInFrustum(double x1, double y1, double z1, double x2, double y2, double z2)
69{
70 for (int i = 0; i < 6; i++)
71 {
72 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue;
73 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue;
74 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue;
75 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z1) + m_Frustum[i][D] > 0) continue;
76 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue;
77 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y1) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue;
78 if (m_Frustum[i][A] * (x1) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue;
79 if (m_Frustum[i][A] * (x2) + m_Frustum[i][B] * (y2) + m_Frustum[i][C] * (z2) + m_Frustum[i][D] > 0) continue;
80
81 return false;
82 }
83
84 return true;
85}
86
87bool FrustumData::isVisible(AABB *aabb)
88{
89 return cubeInFrustum(aabb->x0, aabb->y0, aabb->z0, aabb->x1, aabb->y1, aabb->z1);
90}