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

游戏引擎

开发平台:

Visual C++

  1. #pragma once
  2. #include "Stdafx.h"
  3. #include "AABB.cpp"
  4. #include "Body.cpp"
  5. #include "BodyDef.cpp"
  6. #include "Joint.cpp"
  7. #include "JointDef.cpp"
  8. #include "Contact.cpp"
  9. namespace Box2D
  10. {
  11. namespace Net
  12. {
  13. public ref class World
  14. {
  15. b2World *world;
  16. public:
  17. World(AABB^ worldAABB, Vector^ gravity, bool doSleep) : world(new b2World(
  18. worldAABB->getAABB(), gravity->getVec2(), doSleep)) { }
  19. ~World()
  20. {
  21. delete world;
  22. }
  23. /// <summary> Create rigid body from a definition </summary>
  24. Body^ CreateBody(BodyDef^ def)
  25. {
  26. return gcnew Body(world->CreateBody(def->def));
  27. }
  28. ///<summary>
  29. /// Destroy rigid bodies. Destruction is deferred until the the next call to Step. 
  30. /// This is done so that bodies may be destroyed while you iterate through the contact list.
  31. ///</summary>
  32. void DestroyBody(Body^ body)
  33. {
  34. world->DestroyBody(body->body);
  35. }
  36. /// <summary>
  37. /// The world provides a single ground body with no collision shapes. You
  38. /// can use this to simplify the creation of joints.
  39. /// </summary>
  40. Body^ GetGroundBody()
  41. {
  42. return gcnew Body(world->GetGroundBody());
  43. }
  44. void Step(float32 timeStep, int32 iterations)
  45. {
  46. world->Step(timeStep, iterations);
  47. }
  48. Joint^ CreateJoint(JointDef^ def)
  49. {
  50. return gcnew Joint(world->CreateJoint(def->def));
  51. }
  52. void DestroyJoint(Joint^ joint)
  53. {
  54. world->DestroyJoint(joint->joint);
  55. }
  56. property IList<Body^>^ Bodies
  57. {
  58. IList<Body^>^ get()
  59. {
  60. List<Body^>^ list = gcnew List<Body^>();
  61. for(b2Body *body = world->GetBodyList(); body; body = body->GetNext())
  62. list->Add(gcnew Body(body));
  63. return list;
  64. }
  65. }
  66. property IList<Joint^>^ Joints
  67. {
  68. IList<Joint^>^ get()
  69. {
  70. List<Joint^>^ list = gcnew List<Joint^>();
  71. for(b2Joint *joint = world->GetJointList(); joint; joint = joint->GetNext())
  72. list->Add(gcnew Joint(joint));
  73. return list;
  74. }
  75. }
  76. Joint^ GetJointList()
  77. {
  78. return gcnew Joint(world->GetJointList());
  79. }
  80. ///<summary> You can use these to iterate over all the bodies, joints, and contacts. </summary>
  81. /*
  82. Contact^ GetContactList()
  83. {
  84. return gcnew Contact(world->C>GetContactList());
  85. }
  86. */
  87. /// <summary>
  88. /// Query the world for all shapes that potentially overlap the
  89. /// provided AABB. You provide a shape pointer buffer of specified
  90. /// size. The number of shapes found is returned.
  91. /// </summary>
  92. IList<Shape^>^ Query(AABB^ aabb)
  93. {
  94. const int32 k_maxCount = 25;
  95. b2Shape* shapes[k_maxCount];
  96. int32 count = world->Query(aabb->getAABB(), shapes, k_maxCount);
  97. List<Shape^>^ list = gcnew List<Shape^>();
  98. for(int x = 0; x < count; ++x)
  99. list->Add(gcnew Shape(shapes[x]));
  100. return list;
  101. }
  102. static property bool PositionCorrection
  103. {
  104. bool get()
  105. {
  106. return b2World::s_enablePositionCorrection == 1;
  107. }
  108. void set(bool value)
  109. {
  110. b2World::s_enablePositionCorrection = value ? 1 : 0;
  111. }
  112. }
  113. static property bool WarmStarting
  114. {
  115. bool get()
  116. {
  117. return b2World::s_enableWarmStarting == 1;
  118. }
  119. void set(bool value)
  120. {
  121. b2World::s_enableWarmStarting = value ? 1 : 0;
  122. }
  123. }
  124. };
  125. }
  126. }
  127. /*
  128. class b2World
  129. {
  130. public:
  131. // Register a world listener to receive important events that can
  132. // help prevent your code from crashing.
  133. void SetListener(b2WorldListener* listener);
  134. // Register a collision filter to provide specific control over collision.
  135. // Otherwise the default filter is used (b2CollisionFilter).
  136. void SetFilter(b2CollisionFilter* filter);
  137. */