Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class GNode : public enable_shared_from_this<GNode>
- {
- public:
- Vec2f mLocalPosition { 0, 0 };
- Vec2f mGlobalPosition { 0, 0 };
- Vec2f mLocalScale { 1, 1 };
- Vec2f mGlobalScale { 1, 1 };
- float mLocalRotation { 0 };
- float mGlobalRotation { 0 };
- weak_ptr<GNode> mParent;
- vector<shared_ptr<GNode>> mChildren;
- void CalculateTransforms()
- {
- if ( auto parent = mParent.lock() )
- {
- mGlobalRotation = parent->mGlobalRotation + mLocalRotation;
- mGlobalScale = parent->mGlobalScale * mLocalScale;
- mGlobalPosition = parent->mGlobalPosition + Math::RotateVector( mLocalPosition * parent->mGlobalScale, parent->mGlobalRotation );
- }
- else
- {
- mGlobalPosition = mLocalPosition;
- mGlobalRotation = mLocalRotation;
- mGlobalScale = mLocalScale;
- }
- for ( auto & child : mChildren )
- {
- child->CalculateTransforms();
- }
- }
- void AttachTo( const shared_ptr<GNode> & parent )
- {
- mParent = parent;
- parent->mChildren.push_back( shared_from_this() );
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment