BsCmdDeleteSO.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "UndoRedo/BsCmdDeleteSO.h"
  4. #include "UndoRedo/BsUndoRedo.h"
  5. #include "Scene/BsSceneObject.h"
  6. #include "Scene/BsSerializedSceneObject.h"
  7. #include "Scene/BsSelection.h"
  8. namespace bs
  9. {
  10. CmdDeleteSO::CmdDeleteSO(const String& description, const HSceneObject& sceneObject)
  11. : EditorCommand(description), mSceneObject(sceneObject)
  12. { }
  13. void CmdDeleteSO::execute(const HSceneObject& sceneObject, const String& description)
  14. {
  15. // Register command and commit it
  16. CmdDeleteSO* command = new (bs_alloc<CmdDeleteSO>()) CmdDeleteSO(description, sceneObject);
  17. SPtr<CmdDeleteSO> commandPtr = bs_shared_ptr(command);
  18. UndoRedo::instance().registerCommand(commandPtr);
  19. commandPtr->commit();
  20. }
  21. void CmdDeleteSO::commit()
  22. {
  23. if (mSceneObject == nullptr || mSceneObject.isDestroyed())
  24. return;
  25. mSerialized = bs_shared_ptr_new<SerializedSceneObject>(mSceneObject, true);
  26. mSceneObject->destroy();
  27. }
  28. void CmdDeleteSO::revert()
  29. {
  30. mSerialized->restore();
  31. if(!mSceneObject.isDestroyed(true))
  32. Selection::instance().setSceneObjects({ mSceneObject });
  33. }
  34. }