X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgame%2Ftransform.cpp;h=5b55ab2dc4f05c0833196d549f77405e7f43d26b;hb=bfbcfa2678c70d661cb9104b2ef677d7d7b5a637;hp=e5655f929765554f87be052a9d23647051e1b617;hpb=a99b57a74252fd3de649d544d070b747f91fcf4d;p=libs%2Fgame.git diff --git a/source/game/transform.cpp b/source/game/transform.cpp index e5655f9..5b55ab2 100644 --- a/source/game/transform.cpp +++ b/source/game/transform.cpp @@ -4,39 +4,40 @@ namespace Msp::Game { Transform::Transform(Handle e): - Component(e) + BufferedComponent(e) { } void Transform::set_values(const TransformValues &v) { - values = v; + write().values = v; } void Transform::set_position(const LinAl::Vector &p) { - values.position = p; + write().values.position = p; } void Transform::set_rotation(const Geometry::Quaternion &r) { - values.rotation = normalize(r); + write().values.rotation = normalize(r); } void Transform::set_scale(const LinAl::Vector &s) { - values.scale = s; + write().values.scale = s; } void Transform::update_world_matrix(const Transform *parent) { using Affine = Geometry::AffineTransform; - local_matrix = Affine::translation(values.position)* - Affine::rotation(values.rotation)*Affine::scaling(values.scale); + Data &d = write(); + d.local_matrix = Affine::translation(d.values.position)* + Affine::rotation(d.values.rotation)*Affine::scaling(d.values.scale); if(parent) - world_matrix = parent->get_world_matrix()*local_matrix; + d.world_matrix = parent->get_world_matrix()*d.local_matrix; else - world_matrix = local_matrix; + d.world_matrix = d.local_matrix; } } // namespace Msp::Game