summaryrefslogtreecommitdiff
path: root/src/math.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/math.c')
-rw-r--r--src/math.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/math.c b/src/math.c
new file mode 100644
index 0000000..ecba107
--- /dev/null
+++ b/src/math.c
@@ -0,0 +1,77 @@
+#include "voxel.h"
+
+void face_to_vec(Face face, ivec3 out)
+{
+ glm_ivec3_zero(out);
+
+ switch (face) {
+ case POS_X:
+ out[0] = 1;
+ break;
+ case NEG_X:
+ out[0] = -1;
+ break;
+ case POS_Y:
+ out[1] = 1;
+ break;
+ case NEG_Y:
+ out[1] = -1;
+ break;
+ case POS_Z:
+ out[2] = 1;
+ break;
+ case NEG_Z:
+ out[2] = -1;
+ break;
+ }
+}
+
+Face face_opposite(Face face)
+{
+ switch (face) {
+ case POS_X:
+ return NEG_X;
+ case NEG_X:
+ return POS_X;
+ case POS_Y:
+ return NEG_Y;
+ case NEG_Y:
+ return POS_Y;
+ case POS_Z:
+ return NEG_Z;
+ case NEG_Z:
+ return POS_Z;
+ }
+
+ return 0;
+}
+
+void face_perpendicular(Face face, Face out[2])
+{
+ switch (face) {
+ case POS_X:
+ out[0] = NEG_Z;
+ out[1] = NEG_Y;
+ break;
+ case NEG_X:
+ out[0] = POS_Y;
+ out[1] = POS_Z;
+ break;
+ case POS_Y:
+ out[0] = NEG_X;
+ out[1] = NEG_Z;
+ break;
+ case NEG_Y:
+ out[0] = POS_Z;
+ out[1] = POS_X;
+ break;
+ case POS_Z:
+ out[0] = NEG_Y;
+ out[1] = NEG_X;
+ break;
+ case NEG_Z:
+ out[0] = POS_X;
+ out[1] = POS_Y;
+ break;
+ }
+}