ShapeDef.cpp
上传用户:gb3593
上传日期:2022-01-07
资源大小:3028k
文件大小:4k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #pragma once
  2. #include "stdafx.h"
  3. #include "MassData.cpp"
  4. #include "ShapeType.cpp"
  5. using namespace System::Collections::Generic;
  6. namespace Box2D
  7. {
  8. namespace Net
  9. {
  10. public ref class ShapeDef
  11. {
  12. internal:
  13. bool DeleteOnDtor;
  14. b2ShapeDef *def;
  15. ShapeDef(b2ShapeDef *defRef) : def(defRef), DeleteOnDtor(false) { }
  16. //Needs to work for derivative types, too
  17. b2ShapeDef GetShapeDef()
  18. {
  19. return *def;
  20. }
  21. public:
  22. virtual ~ShapeDef()
  23. {
  24. if(DeleteOnDtor)
  25. delete def;
  26. }
  27. property ShapeType ShapeType
  28. {
  29. Box2D::Net::ShapeType get()
  30. {
  31. return (Box2D::Net::ShapeType) def->type;
  32. }
  33. void set(Box2D::Net::ShapeType value)
  34. {
  35. def->type = b2ShapeType(value);
  36. }
  37. }
  38. property float32 Friction
  39. {
  40. float32 get()
  41. {
  42. return def->friction;
  43. }
  44. void set(float32 value)
  45. {
  46. def->friction = value;
  47. }
  48. }
  49. property float32 Restitution
  50. {
  51. float32 get()
  52. {
  53. return def->restitution;
  54. }
  55. void set(float32 value)
  56. {
  57. def->restitution = value;
  58. }
  59. }
  60. property float32 Density
  61. {
  62. float32 get()
  63. {
  64. return def->density;
  65. }
  66. void set(float32 value)
  67. {
  68. def->density = value;
  69. }
  70. }
  71. /// <summary>
  72. /// The collision category bits. Normally you would just set one bit.
  73. /// </summary>
  74. property unsigned __int16 CategoryBits
  75. {
  76. unsigned __int16 get()
  77. {
  78. return def->categoryBits;
  79. }
  80. void set(unsigned __int16 value)
  81. {
  82. def->categoryBits = value;
  83. }
  84. }
  85. /// <summary>
  86. /// The collision mask bits. This states the categories that this
  87. /// shape would accept for collision.
  88. /// </summary>
  89. property unsigned __int16 MaskBits
  90. {
  91. unsigned __int16 get()
  92. {
  93. return def->maskBits;
  94. }
  95. void set(unsigned __int16 value)
  96. {
  97. def->maskBits = value;
  98. }
  99. }
  100. /// <summary>
  101. /// Collision groups allow a certain group of objects to never collide (negative)
  102. /// or always collide (positive). Zero means no collision group. Non-zero group
  103. /// filtering always wins against the mask bits.
  104. /// </summary>
  105. property unsigned __int16 GroupIndex
  106. {
  107. unsigned __int16 get()
  108. {
  109. return def->groupIndex;
  110. }
  111. void set(unsigned __int16 value)
  112. {
  113. def->groupIndex = value;
  114. }
  115. }
  116. //TODO:
  117. //void* userData;
  118. };
  119. public ref class CircleDef : public ShapeDef
  120. {
  121. public:
  122. CircleDef() : ShapeDef(new b2CircleDef())
  123. {
  124. ShapeDef::DeleteOnDtor = (true);
  125. }
  126. property float32 Radius
  127. {
  128. float32 get()
  129. {
  130. return reinterpret_cast<b2CircleDef*>(def)->radius;
  131. }
  132. void set(float32 value)
  133. {
  134. reinterpret_cast<b2CircleDef*>(def)->radius = value;
  135. }
  136. }
  137. };
  138. public ref class PolygonDef : public ShapeDef
  139. {
  140. public:
  141. PolygonDef() : ShapeDef(new b2PolygonDef())
  142. {
  143. DeleteOnDtor = (true);
  144. }
  145. void SetAsBox(float X, float Y)
  146. {
  147. reinterpret_cast<b2PolygonDef*>(def)->SetAsBox(X, Y);
  148. }
  149. void SetAsBox(float X, float Y, Vector^ Center, float Angle)
  150. {
  151. reinterpret_cast<b2PolygonDef*>(def)->SetAsBox(X, Y, Center->getVec2(), Angle);
  152. }
  153. property IList<Vector^>^ Verticies
  154. {
  155. IList<Vector^>^ get()
  156. {
  157. List<Vector^>^ list = gcnew List<Vector^>();
  158. for(int x = 0; x < reinterpret_cast<b2PolygonDef*>(def)->vertexCount; ++x)
  159. {
  160. list->Add(gcnew Vector(reinterpret_cast<b2PolygonDef*>(def)->vertices[x]));
  161. }
  162. return list;
  163. }
  164. void set(IList<Vector^>^ value)
  165. {
  166. b2PolygonDef* Def = reinterpret_cast<b2PolygonDef*>(def);
  167. for(int x = 0; x < value->Count; ++x)
  168. Def->vertices[x] = value[x]->getVec2();
  169. }
  170. }
  171. };
  172. }
  173. }