UndoRedo.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.CompilerServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using BansheeEngine;
  8. namespace BansheeEditor
  9. {
  10. public static class UndoRedo
  11. {
  12. public static void Undo()
  13. {
  14. Internal_Undo();
  15. }
  16. public static void Redo()
  17. {
  18. Internal_Redo();
  19. }
  20. public static void RecordSO(SceneObject so, string description = "")
  21. {
  22. if (so != null)
  23. Internal_RecordSO(so.GetCachedPtr(), description);
  24. }
  25. public static SceneObject[] CloneSO(SceneObject[] so, string description = "")
  26. {
  27. if (so != null)
  28. {
  29. List<IntPtr> soPtrs = new List<IntPtr>();
  30. for (int i = 0; i < so.Length; i++)
  31. {
  32. if(so[i] != null)
  33. soPtrs.Add(so[i].GetCachedPtr());
  34. }
  35. return Internal_CloneSOMulti(soPtrs.ToArray(), description);
  36. }
  37. return new SceneObject[0];
  38. }
  39. public static SceneObject CloneSO(SceneObject so, string description = "")
  40. {
  41. if (so != null)
  42. return Internal_CloneSO(so.GetCachedPtr(), description);
  43. return null;
  44. }
  45. public static SceneObject Instantiate(Prefab prefab, string description = "")
  46. {
  47. if (prefab != null)
  48. return Internal_Instantiate(prefab.GetCachedPtr(), description);
  49. return null;
  50. }
  51. public static SceneObject CreateSO(string name, string description = "")
  52. {
  53. return Internal_CreateSO(name, description);
  54. }
  55. public static void DeleteSO(SceneObject so, string description = "")
  56. {
  57. if (so != null)
  58. Internal_DeleteSO(so.GetCachedPtr(), description);
  59. }
  60. public static void ReparentSO(SceneObject so, SceneObject parent, string description = "")
  61. {
  62. if (so != null)
  63. {
  64. IntPtr parentPtr = IntPtr.Zero;
  65. if (parent != null)
  66. parentPtr = parent.GetCachedPtr();
  67. Internal_ReparentSO(so.GetCachedPtr(), parentPtr, description);
  68. }
  69. }
  70. public static void ReparentSO(SceneObject[] so, SceneObject parent, string description = "")
  71. {
  72. if (so != null)
  73. {
  74. List<IntPtr> soPtrs = new List<IntPtr>();
  75. for (int i = 0; i < so.Length; i++)
  76. {
  77. if (so[i] != null)
  78. soPtrs.Add(so[i].GetCachedPtr());
  79. }
  80. if (soPtrs.Count > 0)
  81. {
  82. IntPtr parentPtr = IntPtr.Zero;
  83. if (parent != null)
  84. parentPtr = parent.GetCachedPtr();
  85. Internal_ReparentSOMulti(soPtrs.ToArray(), parentPtr, description);
  86. }
  87. }
  88. }
  89. public static void PushGroup(string name)
  90. {
  91. Internal_PushGroup(name);
  92. }
  93. public static void PopGroup(string name)
  94. {
  95. Internal_PopGroup(name);
  96. }
  97. [MethodImpl(MethodImplOptions.InternalCall)]
  98. internal static extern void Internal_Undo();
  99. [MethodImpl(MethodImplOptions.InternalCall)]
  100. internal static extern void Internal_Redo();
  101. [MethodImpl(MethodImplOptions.InternalCall)]
  102. internal static extern void Internal_PushGroup(string name);
  103. [MethodImpl(MethodImplOptions.InternalCall)]
  104. internal static extern void Internal_PopGroup(string name);
  105. [MethodImpl(MethodImplOptions.InternalCall)]
  106. internal static extern void Internal_RecordSO(IntPtr soPtr, string description);
  107. [MethodImpl(MethodImplOptions.InternalCall)]
  108. internal static extern SceneObject Internal_CloneSO(IntPtr soPtr, string description);
  109. [MethodImpl(MethodImplOptions.InternalCall)]
  110. internal static extern SceneObject[] Internal_CloneSOMulti(IntPtr[] soPtr, string description);
  111. [MethodImpl(MethodImplOptions.InternalCall)]
  112. internal static extern SceneObject Internal_Instantiate(IntPtr prefabPtr, string description);
  113. [MethodImpl(MethodImplOptions.InternalCall)]
  114. internal static extern SceneObject Internal_CreateSO(string name, string description);
  115. [MethodImpl(MethodImplOptions.InternalCall)]
  116. internal static extern void Internal_DeleteSO(IntPtr soPtr, string description);
  117. [MethodImpl(MethodImplOptions.InternalCall)]
  118. internal static extern void Internal_ReparentSO(IntPtr soPtr, IntPtr parentSOPtr, string description);
  119. [MethodImpl(MethodImplOptions.InternalCall)]
  120. internal static extern void Internal_ReparentSOMulti(IntPtr[] soPtr, IntPtr parentSOPtr, string description);
  121. }
  122. }