BsScriptGizmos.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptGizmos.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoClass.h"
  6. #include "Scene/BsGizmoManager.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsScriptRendererMeshData.generated.h"
  9. #include "BsScriptSpriteTexture.generated.h"
  10. #include "BsScriptFont.generated.h"
  11. namespace bs
  12. {
  13. ScriptGizmos::ScriptGizmos(MonoObject* instance)
  14. :ScriptObject(instance)
  15. { }
  16. void ScriptGizmos::initRuntimeData()
  17. {
  18. metaData.scriptClass->addInternalCall("Internal_SetColor", (void*)&ScriptGizmos::internal_SetColor);
  19. metaData.scriptClass->addInternalCall("Internal_GetColor", (void*)&ScriptGizmos::internal_GetColor);
  20. metaData.scriptClass->addInternalCall("Internal_SetTransform", (void*)&ScriptGizmos::internal_SetTransform);
  21. metaData.scriptClass->addInternalCall("Internal_GetTransform", (void*)&ScriptGizmos::internal_GetTransform);
  22. metaData.scriptClass->addInternalCall("Internal_DrawCube", (void*)&ScriptGizmos::internal_DrawCube);
  23. metaData.scriptClass->addInternalCall("Internal_DrawSphere", (void*)&ScriptGizmos::internal_DrawSphere);
  24. metaData.scriptClass->addInternalCall("Internal_DrawCone", (void*)&ScriptGizmos::internal_DrawCone);
  25. metaData.scriptClass->addInternalCall("Internal_DrawDisc", (void*)&ScriptGizmos::internal_DrawDisc);
  26. metaData.scriptClass->addInternalCall("Internal_DrawWireCube", (void*)&ScriptGizmos::internal_DrawWireCube);
  27. metaData.scriptClass->addInternalCall("Internal_DrawWireSphere", (void*)&ScriptGizmos::internal_DrawWireSphere);
  28. metaData.scriptClass->addInternalCall("Internal_DrawWireCapsule", (void*)&ScriptGizmos::internal_DrawWireCapsule);
  29. metaData.scriptClass->addInternalCall("Internal_DrawWireCone", (void*)&ScriptGizmos::internal_DrawWireCone);
  30. metaData.scriptClass->addInternalCall("Internal_DrawWireDisc", (void*)&ScriptGizmos::internal_DrawWireDisc);
  31. metaData.scriptClass->addInternalCall("Internal_DrawWireArc", (void*)&ScriptGizmos::internal_DrawWireArc);
  32. metaData.scriptClass->addInternalCall("Internal_DrawWireMesh", (void*)&ScriptGizmos::internal_DrawWireMesh);
  33. metaData.scriptClass->addInternalCall("Internal_DrawLine", (void*)&ScriptGizmos::internal_DrawLine);
  34. metaData.scriptClass->addInternalCall("Internal_DrawLineList", (void*)&ScriptGizmos::internal_DrawLineList);
  35. metaData.scriptClass->addInternalCall("Internal_DrawFrustum", (void*)&ScriptGizmos::internal_DrawFrustum);
  36. metaData.scriptClass->addInternalCall("Internal_DrawIcon", (void*)&ScriptGizmos::internal_DrawIcon);
  37. metaData.scriptClass->addInternalCall("Internal_DrawText", (void*)&ScriptGizmos::internal_DrawText);
  38. }
  39. void ScriptGizmos::internal_SetColor(Color* color)
  40. {
  41. GizmoManager::instance().setColor(*color);
  42. }
  43. void ScriptGizmos::internal_GetColor(Color* color)
  44. {
  45. *color = GizmoManager::instance().getColor();
  46. }
  47. void ScriptGizmos::internal_SetTransform(Matrix4* transform)
  48. {
  49. GizmoManager::instance().setTransform(*transform);
  50. }
  51. void ScriptGizmos::internal_GetTransform(Matrix4* transform)
  52. {
  53. *transform = GizmoManager::instance().getTransform();
  54. }
  55. void ScriptGizmos::internal_DrawCube(Vector3* position, Vector3* extents)
  56. {
  57. GizmoManager::instance().drawCube(*position, *extents);
  58. }
  59. void ScriptGizmos::internal_DrawSphere(Vector3* position, float radius)
  60. {
  61. GizmoManager::instance().drawSphere(*position, radius);
  62. }
  63. void ScriptGizmos::internal_DrawCone(Vector3* base, Vector3* normal, float height, float radius, Vector2* scale)
  64. {
  65. GizmoManager::instance().drawCone(*base, *normal, height, radius, *scale);
  66. }
  67. void ScriptGizmos::internal_DrawDisc(Vector3* position, Vector3* normal, float radius)
  68. {
  69. GizmoManager::instance().drawDisc(*position, *normal, radius);
  70. }
  71. void ScriptGizmos::internal_DrawWireCube(Vector3* position, Vector3* extents)
  72. {
  73. GizmoManager::instance().drawWireCube(*position, *extents);
  74. }
  75. void ScriptGizmos::internal_DrawWireSphere(Vector3* position, float radius)
  76. {
  77. GizmoManager::instance().drawWireSphere(*position, radius);
  78. }
  79. void ScriptGizmos::internal_DrawWireCapsule(Vector3* position, float height, float radius)
  80. {
  81. GizmoManager::instance().drawWireCapsule(*position, height, radius);
  82. }
  83. void ScriptGizmos::internal_DrawWireCone(Vector3* base, Vector3* normal, float height, float radius, Vector2* scale)
  84. {
  85. GizmoManager::instance().drawWireCone(*base, *normal, height, radius, *scale);
  86. }
  87. void ScriptGizmos::internal_DrawLine(Vector3* start, Vector3* end)
  88. {
  89. GizmoManager::instance().drawLine(*start, *end);
  90. }
  91. void ScriptGizmos::internal_DrawLineList(MonoArray* linePoints)
  92. {
  93. ScriptArray lineArray(linePoints);
  94. UINT32 numElements = lineArray.size();
  95. Vector<Vector3> points(numElements);
  96. for (UINT32 i = 0; i < numElements; i++)
  97. points[i] = lineArray.get<Vector3>(i);
  98. GizmoManager::instance().drawLineList(points);
  99. }
  100. void ScriptGizmos::internal_DrawWireDisc(Vector3* position, Vector3* normal, float radius)
  101. {
  102. GizmoManager::instance().drawWireDisc(*position, *normal, radius);
  103. }
  104. void ScriptGizmos::internal_DrawWireArc(Vector3* position, Vector3* normal, float radius, float startAngle,
  105. float amountAngle)
  106. {
  107. GizmoManager::instance().drawWireArc(*position, *normal, radius, Degree(startAngle), Degree(amountAngle));
  108. }
  109. void ScriptGizmos::internal_DrawWireMesh(ScriptRendererMeshData* meshData)
  110. {
  111. if (meshData != nullptr)
  112. {
  113. SPtr<MeshData> nativeMeshData = meshData->getInternal()->getData();
  114. GizmoManager::instance().drawWireMesh(nativeMeshData);
  115. }
  116. }
  117. void ScriptGizmos::internal_DrawFrustum(Vector3* position, float aspect, Degree* FOV, float near, float far)
  118. {
  119. GizmoManager::instance().drawFrustum(*position, aspect, *FOV, near, far);
  120. }
  121. void ScriptGizmos::internal_DrawIcon(Vector3* position, MonoObject* image, bool fixedScale)
  122. {
  123. HSpriteTexture nativeTexture;
  124. if (image != nullptr)
  125. nativeTexture = ScriptSpriteTexture::toNative(image)->getHandle();
  126. GizmoManager::instance().drawIcon(*position, nativeTexture, fixedScale);
  127. }
  128. void ScriptGizmos::internal_DrawText(Vector3* position, MonoString* text, ScriptFont* font, int size)
  129. {
  130. String nativeText = MonoUtil::monoToString(text);
  131. HFont fontHandle;
  132. if (font != nullptr)
  133. fontHandle = font->getHandle();
  134. GizmoManager::instance().drawText(*position, nativeText, fontHandle, size);
  135. }
  136. }