SceneObject.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. namespace BansheeEngine
  4. {
  5. public sealed class SceneObject : GameObject
  6. {
  7. public SceneObject Parent
  8. {
  9. set { Internal_SetParent(mCachedPtr, value); }
  10. get { return Internal_GetParent(mCachedPtr); }
  11. }
  12. public Vector3 Position
  13. {
  14. get
  15. {
  16. Vector3 value;
  17. Internal_GetPosition(mCachedPtr, out value);
  18. return value;
  19. }
  20. set
  21. {
  22. Internal_SetPosition(mCachedPtr, value);
  23. }
  24. }
  25. public Vector3 LocalPosition
  26. {
  27. get
  28. {
  29. Vector3 value;
  30. Internal_GetLocalPosition(mCachedPtr, out value);
  31. return value;
  32. }
  33. set
  34. {
  35. Internal_SetLocalPosition(mCachedPtr, value);
  36. }
  37. }
  38. public Quaternion Rotation
  39. {
  40. get
  41. {
  42. Quaternion value;
  43. Internal_GetRotation(mCachedPtr, out value);
  44. return value;
  45. }
  46. set
  47. {
  48. Internal_SetRotation(mCachedPtr, value);
  49. }
  50. }
  51. public Quaternion LocalRotation
  52. {
  53. get
  54. {
  55. Quaternion value;
  56. Internal_GetLocalRotation(mCachedPtr, out value);
  57. return value;
  58. }
  59. set
  60. {
  61. Internal_SetLocalRotation(mCachedPtr, value);
  62. }
  63. }
  64. public Vector3 Scale
  65. {
  66. get
  67. {
  68. Vector3 value;
  69. Internal_GetScale(mCachedPtr, out value);
  70. return value;
  71. }
  72. }
  73. public Vector3 LocalScale
  74. {
  75. get
  76. {
  77. Vector3 value;
  78. Internal_GetLocalScale(mCachedPtr, out value);
  79. return value;
  80. }
  81. set
  82. {
  83. Internal_SetLocalScale(mCachedPtr, value);
  84. }
  85. }
  86. public Matrix4 WorldTransform
  87. {
  88. get
  89. {
  90. Matrix4 value;
  91. Internal_GetWorldTransform(mCachedPtr, out value);
  92. return value;
  93. }
  94. }
  95. public Matrix4 LocalTransform
  96. {
  97. get
  98. {
  99. Matrix4 value;
  100. Internal_GetLocalTransform(mCachedPtr, out value);
  101. return value;
  102. }
  103. }
  104. public Vector3 Forward
  105. {
  106. get
  107. {
  108. Vector3 value;
  109. Internal_GetForward(mCachedPtr, out value);
  110. return value;
  111. }
  112. set
  113. {
  114. Internal_SetForward(mCachedPtr, value);
  115. }
  116. }
  117. public Vector3 Right
  118. {
  119. get
  120. {
  121. Vector3 value;
  122. Internal_GetRight(mCachedPtr, out value);
  123. return value;
  124. }
  125. }
  126. public Vector3 Up
  127. {
  128. get
  129. {
  130. Vector3 value;
  131. Internal_GetUp(mCachedPtr, out value);
  132. return value;
  133. }
  134. }
  135. // For internal use by the runtime
  136. private SceneObject()
  137. {
  138. }
  139. public SceneObject(string name)
  140. {
  141. Internal_CreateInstance(this, name, 0);
  142. }
  143. internal SceneObject(string name, bool isInternal)
  144. {
  145. if(isInternal)
  146. Internal_CreateInstance(this, name, (int)(SceneObjectEditorFlags.DontSave | SceneObjectEditorFlags.Internal | SceneObjectEditorFlags.Persistent));
  147. else
  148. Internal_CreateInstance(this, name, 0);
  149. }
  150. public T AddComponent<T>() where T : Component
  151. {
  152. return (T)Component.Internal_AddComponent(this, typeof (T));
  153. }
  154. public T GetComponent<T>() where T : Component
  155. {
  156. return (T)Component.Internal_GetComponent(this, typeof(T));
  157. }
  158. public Component[] GetComponents()
  159. {
  160. return Component.Internal_GetComponents(this);
  161. }
  162. public void RemoveComponent<T>() where T : Component
  163. {
  164. Component.Internal_RemoveComponent(this, typeof(T));
  165. }
  166. public int GetNumChildren()
  167. {
  168. int value;
  169. Internal_GetNumChildren(mCachedPtr, out value);
  170. return value;
  171. }
  172. public SceneObject GetChild(int idx)
  173. {
  174. return Internal_GetChild(mCachedPtr, idx);
  175. }
  176. public void LookAt(Vector3 direction)
  177. {
  178. Internal_LookAt(mCachedPtr, direction, Vector3.yAxis);
  179. }
  180. public void LookAt(Vector3 direction, Vector3 up)
  181. {
  182. Internal_LookAt(mCachedPtr, direction, up);
  183. }
  184. public void Move(Vector3 amount)
  185. {
  186. Internal_Move(mCachedPtr, amount);
  187. }
  188. public void MoveLocal(Vector3 amount)
  189. {
  190. Internal_MoveLocal(mCachedPtr, amount);
  191. }
  192. public void Rotate(Quaternion amount)
  193. {
  194. Internal_Rotate(mCachedPtr, amount);
  195. }
  196. public void Roll(Degree angle)
  197. {
  198. Internal_Roll(mCachedPtr, angle);
  199. }
  200. public void Yaw(Degree angle)
  201. {
  202. Internal_Yaw(mCachedPtr, angle);
  203. }
  204. public void Pitch(Degree angle)
  205. {
  206. Internal_Pitch(mCachedPtr, angle);
  207. }
  208. public void Destroy(bool immediate = false)
  209. {
  210. Internal_Destroy(mCachedPtr, immediate);
  211. }
  212. [MethodImpl(MethodImplOptions.InternalCall)]
  213. private static extern void Internal_CreateInstance(SceneObject instance, string name, int flags);
  214. [MethodImpl(MethodImplOptions.InternalCall)]
  215. private static extern void Internal_SetParent(IntPtr nativeInstance, SceneObject parent);
  216. [MethodImpl(MethodImplOptions.InternalCall)]
  217. private static extern SceneObject Internal_GetParent(IntPtr nativeInstance);
  218. [MethodImpl(MethodImplOptions.InternalCall)]
  219. private static extern void Internal_GetNumChildren(IntPtr nativeInstance, out int value);
  220. [MethodImpl(MethodImplOptions.InternalCall)]
  221. private static extern SceneObject Internal_GetChild(IntPtr nativeInstance, int idx);
  222. [MethodImpl(MethodImplOptions.InternalCall)]
  223. private static extern Prefab Internal_GetPrefab(IntPtr nativeInstance);
  224. [MethodImpl(MethodImplOptions.InternalCall)]
  225. private static extern void Internal_GetPosition(IntPtr nativeInstance, out Vector3 value);
  226. [MethodImpl(MethodImplOptions.InternalCall)]
  227. private static extern void Internal_GetLocalPosition(IntPtr nativeInstance, out Vector3 value);
  228. [MethodImpl(MethodImplOptions.InternalCall)]
  229. private static extern void Internal_GetRotation(IntPtr nativeInstance, out Quaternion value);
  230. [MethodImpl(MethodImplOptions.InternalCall)]
  231. private static extern void Internal_GetLocalRotation(IntPtr nativeInstance, out Quaternion value);
  232. [MethodImpl(MethodImplOptions.InternalCall)]
  233. private static extern void Internal_GetScale(IntPtr nativeInstance, out Vector3 value);
  234. [MethodImpl(MethodImplOptions.InternalCall)]
  235. private static extern void Internal_GetLocalScale(IntPtr nativeInstance, out Vector3 value);
  236. [MethodImpl(MethodImplOptions.InternalCall)]
  237. private static extern void Internal_SetPosition(IntPtr nativeInstance, Vector3 value);
  238. [MethodImpl(MethodImplOptions.InternalCall)]
  239. private static extern void Internal_SetLocalPosition(IntPtr nativeInstance, Vector3 value);
  240. [MethodImpl(MethodImplOptions.InternalCall)]
  241. private static extern void Internal_SetRotation(IntPtr nativeInstance, Quaternion value);
  242. [MethodImpl(MethodImplOptions.InternalCall)]
  243. private static extern void Internal_SetLocalRotation(IntPtr nativeInstance, Quaternion value);
  244. [MethodImpl(MethodImplOptions.InternalCall)]
  245. private static extern void Internal_SetLocalScale(IntPtr nativeInstance, Vector3 value);
  246. [MethodImpl(MethodImplOptions.InternalCall)]
  247. private static extern void Internal_GetLocalTransform(IntPtr nativeInstance, out Matrix4 value);
  248. [MethodImpl(MethodImplOptions.InternalCall)]
  249. private static extern void Internal_GetWorldTransform(IntPtr nativeInstance, out Matrix4 value);
  250. [MethodImpl(MethodImplOptions.InternalCall)]
  251. private static extern void Internal_LookAt(IntPtr nativeInstance, Vector3 direction, Vector3 up);
  252. [MethodImpl(MethodImplOptions.InternalCall)]
  253. private static extern void Internal_Move(IntPtr nativeInstance, Vector3 value);
  254. [MethodImpl(MethodImplOptions.InternalCall)]
  255. private static extern void Internal_MoveLocal(IntPtr nativeInstance, Vector3 value);
  256. [MethodImpl(MethodImplOptions.InternalCall)]
  257. private static extern void Internal_Rotate(IntPtr nativeInstance, Quaternion value);
  258. [MethodImpl(MethodImplOptions.InternalCall)]
  259. private static extern void Internal_Roll(IntPtr nativeInstance, Radian value);
  260. [MethodImpl(MethodImplOptions.InternalCall)]
  261. private static extern void Internal_Yaw(IntPtr nativeInstance, Radian value);
  262. [MethodImpl(MethodImplOptions.InternalCall)]
  263. private static extern void Internal_Pitch(IntPtr nativeInstance, Radian value);
  264. [MethodImpl(MethodImplOptions.InternalCall)]
  265. private static extern void Internal_SetForward(IntPtr nativeInstance, Vector3 value);
  266. [MethodImpl(MethodImplOptions.InternalCall)]
  267. private static extern void Internal_GetForward(IntPtr nativeInstance, out Vector3 value);
  268. [MethodImpl(MethodImplOptions.InternalCall)]
  269. private static extern void Internal_GetUp(IntPtr nativeInstance, out Vector3 value);
  270. [MethodImpl(MethodImplOptions.InternalCall)]
  271. private static extern void Internal_GetRight(IntPtr nativeInstance, out Vector3 value);
  272. [MethodImpl(MethodImplOptions.InternalCall)]
  273. private static extern void Internal_Destroy(IntPtr nativeInstance, bool immediate);
  274. }
  275. // Note: Must be equal to C++ enum SceneObjectFlags
  276. internal enum SceneObjectEditorFlags
  277. {
  278. DontInstantiate = 0x01, /**< Object wont be in the main scene and its components won't receive updates. */
  279. DontSave = 0x02, /**< Object will be skipped when saving the scene hierarchy or a prefab. */
  280. Persistent = 0x04, /**< Object will remain in the scene even after scene clear, unless destroyed directly.
  281. This only works with top-level objects. */
  282. Internal = 0x08 /**< Provides a hint to external systems that his object is used by engine internals.
  283. For example, those systems might not want to display those objects together with the
  284. user created ones. */
  285. }
  286. }