X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Ftransform.h;h=1239546be803dec1c89f23a63e4f19bb6a252cf1;hb=c71b8c2151e097f435c8f76ffa123cc71f9d12ec;hp=d6984993653d78f78c4d67f6ad31bbbc0dc5e359;hpb=c809f54b802727926bae40e9fe67d0e3c94fd2c0;p=libs%2Fgame.git diff --git a/source/game/transform.h b/source/game/transform.h index d698499..1239546 100644 --- a/source/game/transform.h +++ b/source/game/transform.h @@ -13,24 +13,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 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 *); };