2
0

SceneObject.cs 12 KB

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