summaryrefslogtreecommitdiff
path: root/src/core/Placeable.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/Placeable.h')
-rw-r--r--src/core/Placeable.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/core/Placeable.h b/src/core/Placeable.h
new file mode 100644
index 0000000..b0f9a15
--- /dev/null
+++ b/src/core/Placeable.h
@@ -0,0 +1,34 @@
+#pragma once
+
+class CPlaceable
+{
+public:
+ // disable allocation
+ static void *operator new(size_t);
+
+ CMatrix m_matrix;
+
+ CPlaceable(void);
+ const CVector &GetPosition(void) { return m_matrix.GetPosition(); }
+ void SetPosition(float x, float y, float z) {
+ m_matrix.GetPosition().x = x;
+ m_matrix.GetPosition().y = y;
+ m_matrix.GetPosition().z = z;
+ }
+ void SetPosition(const CVector &pos) { m_matrix.GetPosition() = pos; }
+ CVector &GetRight(void) { return m_matrix.GetRight(); }
+ CVector &GetForward(void) { return m_matrix.GetForward(); }
+ CVector &GetUp(void) { return m_matrix.GetUp(); }
+ CMatrix &GetMatrix(void) { return m_matrix; }
+ void SetTransform(RwMatrix *m) { m_matrix = CMatrix(m, false); }
+ void SetHeading(float angle);
+ void SetOrientation(float x, float y, float z){
+ CVector pos = m_matrix.GetPosition();
+ m_matrix.SetRotate(x, y, z);
+ m_matrix.Translate(pos);
+ }
+ bool IsWithinArea(float x1, float y1, float x2, float y2);
+ bool IsWithinArea(float x1, float y1, float z1, float x2, float y2, float z2);
+};
+
+VALIDATE_SIZE(CPlaceable, 0x4C);