BsCmdDeleteSO.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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 "Serialization/BsMemorySerializer.h"
  8. #include "Scene/BsSelection.h"
  9. namespace bs
  10. {
  11. CmdDeleteSO::CmdDeleteSO(const String& description, const HSceneObject& sceneObject)
  12. : EditorCommand(description), mSceneObject(sceneObject)
  13. { }
  14. void CmdDeleteSO::execute(const HSceneObject& sceneObject, const String& description)
  15. {
  16. // Register command and commit it
  17. CmdDeleteSO* command = new (bs_alloc<CmdDeleteSO>()) CmdDeleteSO(description, sceneObject);
  18. SPtr<CmdDeleteSO> commandPtr = bs_shared_ptr(command);
  19. UndoRedo::instance().registerCommand(commandPtr);
  20. commandPtr->commit();
  21. }
  22. void CmdDeleteSO::commit()
  23. {
  24. if (mSceneObject == nullptr || mSceneObject.isDestroyed())
  25. return;
  26. mSerialized = bs_shared_ptr_new<SerializedSceneObject>(mSceneObject, true);
  27. mSceneObject->destroy();
  28. }
  29. void CmdDeleteSO::revert()
  30. {
  31. mSerialized->restore();
  32. if(!mSceneObject.isDestroyed(true))
  33. Selection::instance().setSceneObjects({ mSceneObject });
  34. }
  35. }