BsCmdReparentSO.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "BsCmdReparentSO.h"
  2. #include "BsSceneObject.h"
  3. namespace BansheeEngine
  4. {
  5. CmdReparentSO::CmdReparentSO(const WString& description, const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent)
  6. :EditorCommand(description), mSceneObjects(sceneObjects), mNewParent(newParent)
  7. {
  8. for(auto& sceneObject : mSceneObjects)
  9. {
  10. mOldParents.push_back(sceneObject->getParent());
  11. }
  12. }
  13. void CmdReparentSO::execute(const Vector<HSceneObject>& sceneObjects, const HSceneObject& newParent,
  14. const WString& description)
  15. {
  16. // Register command and commit it
  17. CmdReparentSO* command = new (bs_alloc<CmdReparentSO>()) CmdReparentSO(description, sceneObjects, newParent);
  18. UndoRedo::instance().registerCommand(command);
  19. command->commit();
  20. }
  21. void CmdReparentSO::commit()
  22. {
  23. if(mNewParent.isDestroyed())
  24. return;
  25. UINT32 cnt = 0;
  26. for(auto& sceneObject : mSceneObjects)
  27. {
  28. if(!sceneObject.isDestroyed())
  29. sceneObject->setParent(mNewParent);
  30. cnt++;
  31. }
  32. }
  33. void CmdReparentSO::revert()
  34. {
  35. UINT32 cnt = 0;
  36. for(auto& sceneObject : mSceneObjects)
  37. {
  38. if(!sceneObject.isDestroyed() && !mOldParents[cnt].isDestroyed())
  39. sceneObject->setParent(mOldParents[cnt]);
  40. cnt++;
  41. }
  42. }
  43. }