mrDIMAS

2D scene graph

Nov 1st, 2017
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. class GNode : public enable_shared_from_this<GNode>
  2. {
  3. public:
  4.     Vec2f mLocalPosition { 0, 0 };
  5.     Vec2f mGlobalPosition { 0, 0 };
  6.     Vec2f mLocalScale { 1, 1 };
  7.     Vec2f mGlobalScale { 1, 1 };
  8.     float mLocalRotation { 0 };
  9.     float mGlobalRotation { 0 };
  10.     weak_ptr<GNode> mParent;
  11.     vector<shared_ptr<GNode>> mChildren;
  12.     void CalculateTransforms()
  13.     {
  14.         if ( auto parent = mParent.lock() )
  15.         {
  16.             mGlobalRotation = parent->mGlobalRotation + mLocalRotation;            
  17.             mGlobalScale = parent->mGlobalScale * mLocalScale;
  18.             mGlobalPosition = parent->mGlobalPosition + Math::RotateVector( mLocalPosition * parent->mGlobalScale, parent->mGlobalRotation );
  19.         }
  20.         else
  21.         {
  22.             mGlobalPosition = mLocalPosition;
  23.             mGlobalRotation = mLocalRotation;
  24.             mGlobalScale = mLocalScale;
  25.         }
  26.  
  27.         for ( auto & child : mChildren )
  28.         {
  29.             child->CalculateTransforms();
  30.         }
  31.     }
  32.     void AttachTo( const shared_ptr<GNode> & parent )
  33.     {
  34.         mParent = parent;
  35.         parent->mChildren.push_back( shared_from_this() );
  36.     }
  37. };
Advertisement
Add Comment
Please, Sign In to add comment