blob: ea7f9b3ad243d991503f0fa274b865f0d0741ad4 (
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
|
#pragma once
#include "Math/Rotation.hpp"
#include "World/Position.hpp"
namespace MC {
class Transform {
public:
Transform() : m_scale(1) {}
explicit Transform(Position::World position) : m_position(position), m_scale(1) {}
Transform(Position::World position, Rotation rotation, Vector<3> scale)
: m_position(position),
m_rotation(rotation),
m_scale(scale) {}
Vector<3> forward() const;
Vector<3> right() const;
Vector<3> up() const;
Position::World& position() { return m_position; }
const Position::World& position() const { return m_position; }
Rotation& rotation() { return m_rotation; }
const Rotation& rotation() const { return m_rotation; }
Vector<3>& scale() { return m_scale; }
const Vector<3>& scale() const { return m_scale; }
private:
Vector<3> unit_vector(Vector<3> axis) const;
// TODO: Use a non-MC::World position class.
// I don't want coupling between the game implementation
// and what is essentially engine code.
Position::World m_position;
Rotation m_rotation;
Vector<3> m_scale;
};
}
|