X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Ftransform.h;h=fc63f29d4dbfa0d082bfa014269c78e20797a0bb;hb=239cd38de0ddbb5931151523530a5e7272e16f7f;hp=d6984993653d78f78c4d67f6ad31bbbc0dc5e359;hpb=c809f54b802727926bae40e9fe67d0e3c94fd2c0;p=libs%2Fgame.git diff --git a/source/game/transform.h b/source/game/transform.h index d698499..fc63f29 100644 --- a/source/game/transform.h +++ b/source/game/transform.h @@ -5,6 +5,7 @@ #include #include #include "component.h" +#include "mspgame_api.h" namespace Msp::Game { @@ -13,24 +14,36 @@ struct TransformValues LinAl::Vector position; Geometry::Quaternion rotation = Geometry::Quaternion::one(); LinAl::Vector scale = { 1.0f, 1.0f, 1.0f }; + + TransformValues() = default; + TransformValues(const LinAl::Vector &p): position(p) { } + TransformValues(const LinAl::Vector &p, const Geometry::Quaternion &r, + const LinAl::Vector &s = LinAl::Vector(1.0f, 1.0f, 1.0f)): + position(p), rotation(r), scale(s) + { } }; -class Transform: public Component +struct TransformData { -private: TransformValues values; - LinAl::Matrix local_matrix; - LinAl::Matrix world_matrix; + LinAl::Matrix local_matrix = LinAl::Matrix::identity(); + LinAl::Matrix world_matrix = LinAl::Matrix::identity(); +}; +class MSPGAME_API Transform: public BufferedComponent +{ public: Transform(Handle); void set_values(const TransformValues &); - const TransformValues &get_values() const { return values; } - const LinAl::Vector &get_position() const { return values.position; } - const Geometry::Quaternion &get_rotation() const { return values.rotation; } - const LinAl::Vector &get_scale() const { return values.scale; } - const LinAl::Matrix &get_world_matrix() const { return world_matrix; } + void set_position(const LinAl::Vector &); + void set_rotation(const Geometry::Quaternion &); + void set_scale(const LinAl::Vector &); + const TransformValues &get_values() const { return read().values; } + const LinAl::Vector &get_position() const { return read().values.position; } + const Geometry::Quaternion &get_rotation() const { return read().values.rotation; } + const LinAl::Vector &get_scale() const { return read().values.scale; } + const LinAl::Matrix &get_world_matrix() const { return read().world_matrix; } void update_world_matrix(const Transform *); };