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

游戏引擎

开发平台:

Visual C++

  1. /*
  2. * Copyright (c) 2006-2009 Erin Catto http://www.gphysics.com
  3. *
  4. * This software is provided 'as-is', without any express or implied
  5. * warranty.  In no event will the authors be held liable for any damages
  6. * arising from the use of this software.
  7. * Permission is granted to anyone to use this software for any purpose,
  8. * including commercial applications, and to alter it and redistribute it
  9. * freely, subject to the following restrictions:
  10. * 1. The origin of this software must not be misrepresented; you must not
  11. * claim that you wrote the original software. If you use this software
  12. * in a product, an acknowledgment in the product documentation would be
  13. * appreciated but is not required.
  14. * 2. Altered source versions must be plainly marked as such, and must not be
  15. * misrepresented as being the original software.
  16. * 3. This notice may not be removed or altered from any source distribution.
  17. */
  18. #ifndef VERTICAL_STACK_H
  19. #define VERTICAL_STACK_H
  20. class VerticalStack : public Test
  21. {
  22. public:
  23. enum
  24. {
  25. e_columnCount = 5,
  26. e_rowCount = 16
  27. //e_columnCount = 1,
  28. //e_rowCount = 1
  29. };
  30. VerticalStack()
  31. {
  32. {
  33. b2BodyDef bd;
  34. b2Body* ground = m_world->CreateBody(&bd);
  35. b2PolygonShape shape;
  36. shape.SetAsEdge(b2Vec2(-40.0f, 0.0f), b2Vec2(40.0f, 0.0f));
  37. ground->CreateFixture(&shape, 0.0f);
  38. shape.SetAsEdge(b2Vec2(20.0f, 0.0f), b2Vec2(20.0f, 20.0f));
  39. ground->CreateFixture(&shape, 0.0f);
  40. }
  41. float32 xs[5] = {0.0f, -10.0f, -5.0f, 5.0f, 10.0f};
  42. for (int32 j = 0; j < e_columnCount; ++j)
  43. {
  44. b2PolygonShape shape;
  45. shape.SetAsBox(0.5f, 0.5f);
  46. b2FixtureDef fd;
  47. fd.shape = &shape;
  48. fd.density = 1.0f;
  49. fd.friction = 0.3f;
  50. for (int i = 0; i < e_rowCount; ++i)
  51. {
  52. b2BodyDef bd;
  53. bd.type = b2_dynamicBody;
  54. int32 n = j * e_rowCount + i;
  55. b2Assert(n < e_rowCount * e_columnCount);
  56. m_indices[n] = n;
  57. bd.userData = m_indices + n;
  58. float32 x = 0.0f;
  59. //float32 x = RandomFloat(-0.02f, 0.02f);
  60. //float32 x = i % 2 == 0 ? -0.025f : 0.025f;
  61. bd.position.Set(xs[j] + x, 0.752f + 1.54f * i);
  62. b2Body* body = m_world->CreateBody(&bd);
  63. m_bodies[n] = body;
  64. body->CreateFixture(&fd);
  65. }
  66. }
  67. m_bullet = NULL;
  68. }
  69. void Keyboard(unsigned char key)
  70. {
  71. switch (key)
  72. {
  73. case ',':
  74. if (m_bullet != NULL)
  75. {
  76. m_world->DestroyBody(m_bullet);
  77. m_bullet = NULL;
  78. }
  79. {
  80. b2CircleShape shape;
  81. shape.m_radius = 0.25f;
  82. b2FixtureDef fd;
  83. fd.shape = &shape;
  84. fd.density = 20.0f;
  85. fd.restitution = 0.05f;
  86. b2BodyDef bd;
  87. bd.type = b2_dynamicBody;
  88. bd.bullet = true;
  89. bd.position.Set(-31.0f, 5.0f);
  90. m_bullet = m_world->CreateBody(&bd);
  91. m_bullet->CreateFixture(&fd);
  92. m_bullet->SetLinearVelocity(b2Vec2(400.0f, 0.0f));
  93. }
  94. break;
  95. }
  96. }
  97. void Step(Settings* settings)
  98. {
  99. Test::Step(settings);
  100. m_debugDraw.DrawString(5, m_textLine, "Press: (,) to launch a bullet.");
  101. m_textLine += 15;
  102. //if (m_stepCount == 300)
  103. //{
  104. // if (m_bullet != NULL)
  105. // {
  106. // m_world->DestroyBody(m_bullet);
  107. // m_bullet = NULL;
  108. // }
  109. // {
  110. // b2CircleShape shape;
  111. // shape.m_radius = 0.25f;
  112. // b2FixtureDef fd;
  113. // fd.shape = &shape;
  114. // fd.density = 20.0f;
  115. // fd.restitution = 0.05f;
  116. // b2BodyDef bd;
  117. // bd.type = b2_dynamicBody;
  118. // bd.bullet = true;
  119. // bd.position.Set(-31.0f, 5.0f);
  120. // m_bullet = m_world->CreateBody(&bd);
  121. // m_bullet->CreateFixture(&fd);
  122. // m_bullet->SetLinearVelocity(b2Vec2(400.0f, 0.0f));
  123. // }
  124. //}
  125. }
  126. static Test* Create()
  127. {
  128. return new VerticalStack;
  129. }
  130. b2Body* m_bullet;
  131. b2Body* m_bodies[e_rowCount * e_columnCount];
  132. int32 m_indices[e_rowCount * e_columnCount];
  133. };
  134. #endif