SceneObject.cs 12 KB

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