HelloPolycodeApp.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include "HelloPolycodeApp.h"
  2. HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) : EventHandler() {
  3. core = new POLYCODE_CORE(view, 640,480,false,false,0,0,90);
  4. CoreServices::getInstance()->getResourceManager()->addArchive("Resources/default.pak");
  5. CoreServices::getInstance()->getResourceManager()->addDirResource("default", false);
  6. Scene *hud = new Scene(Scene::SCENE_2D);
  7. onGroundLabel = new SceneLabel("Arrow keys to control, spacebar to brake, press R to reset car", 16);
  8. onGroundLabel->setPosition(-70,230);
  9. hud->addChild(onGroundLabel);
  10. scene = new PhysicsScene();
  11. ScenePrimitive *ground = new ScenePrimitive(ScenePrimitive::TYPE_PLANE, 30, 30);
  12. ground->loadTexture("Resources/green_texture.png");
  13. scene->addPhysicsChild(ground, PhysicsSceneEntity::SHAPE_PLANE, 0.0);
  14. // Some obstacles
  15. ScenePrimitive *box = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 4,4,6);
  16. box->setPitch(25.0);
  17. box->setPosition(7,-1.05, 0.0);
  18. box->setColor(0.5,0.5,1.0,1.0);
  19. box->loadTexture("Resources/green_texture.png");
  20. scene->addPhysicsChild(box, PhysicsSceneEntity::SHAPE_BOX, 0.0);
  21. box = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 4,4,6);
  22. box->setPitch(25.0);
  23. box->setPosition(-7,-1.05, 0.0);
  24. box->setColor(0.5,0.5,1.0,1.0);
  25. box->loadTexture("Resources/green_texture.png");
  26. scene->addPhysicsChild(box, PhysicsSceneEntity::SHAPE_BOX, 0.0);
  27. box = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 20,2,5);
  28. box->setPosition(0.0,1.0, -4.3);
  29. box->setColor(0.5,0.5,1.0,1.0);
  30. box->loadTexture("Resources/green_texture.png");
  31. scene->addPhysicsChild(box, PhysicsSceneEntity::SHAPE_BOX, 0.0);
  32. for(int i=0; i < 10; i++) {
  33. ScenePrimitive *box = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 0.7,0.7,0.7);
  34. box->loadTexture("Resources/pink_texture.png");
  35. box->Roll(-45 + (rand() % 90));
  36. box->Pitch(-45 + (rand() % 90));
  37. box->setPosition(-3 + (rand() % 6), 2 + i*0.5, -5 + (rand() % 3));
  38. scene->addPhysicsChild(box, PhysicsSceneEntity::SHAPE_BOX, 1.0);
  39. }
  40. // The vehicle
  41. vehicle = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 1.0,0.5,2.0);
  42. vehicle->loadTexture("Resources/pink_texture.png");
  43. vehicle->setColor(1.0, 1.0, 0.0, 1.0);
  44. vehicle->setPosition(6,1,5);
  45. vehicleController = scene->addVehicleChild(vehicle, 5.0, 1.0);
  46. ScenePrimitive *wheel = new ScenePrimitive(ScenePrimitive::TYPE_SPHERE, 0.3, 10, 10);
  47. wheel->loadTexture("Resources/pink_texture.png");
  48. wheel->setColor(0.0, 1.0, 0.0, 1.0);
  49. vehicleController->addWheel(wheel, Vector3(0.6,0,-0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, true);
  50. scene->addEntity(wheel);
  51. wheel = new ScenePrimitive(ScenePrimitive::TYPE_SPHERE, 0.3, 10, 10);
  52. wheel->loadTexture("Resources/pink_texture.png");
  53. wheel->setColor(0.0, 1.0, 0.0, 1.0);
  54. vehicleController->addWheel(wheel, Vector3(-0.6,0,-0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, true);
  55. scene->addEntity(wheel);
  56. wheel = new ScenePrimitive(ScenePrimitive::TYPE_SPHERE, 0.3, 10, 10);
  57. wheel->loadTexture("Resources/pink_texture.png");
  58. wheel->setColor(0.0, 1.0, 0.0, 1.0);
  59. vehicleController->addWheel(wheel, Vector3(0.6,0,0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, false);
  60. scene->addEntity(wheel);
  61. wheel = new ScenePrimitive(ScenePrimitive::TYPE_SPHERE, 0.3, 10, 10);
  62. wheel->loadTexture("Resources/pink_texture.png");
  63. wheel->setColor(0.0, 1.0, 0.0, 1.0);
  64. vehicleController->addWheel(wheel, Vector3(-0.6,0,0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, false);
  65. scene->addEntity(wheel);
  66. steeringValue = 0;
  67. engineForce = 0;
  68. breaking = false;
  69. testBox = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 4, 4, 4);
  70. testBox->loadTexture("Resources/pink_texture.png");
  71. testBox->setColor(0.3,0.5, 1.0,0.4);
  72. testBox->setPosition(-5,2,7);
  73. scene->addCollisionChild(testBox, PhysicsSceneEntity::SHAPE_BOX);
  74. scene->getDefaultCamera()->setPosition(16,16,16);
  75. scene->getDefaultCamera()->lookAt(Vector3(0,0,0));
  76. core->getInput()->addEventListener(this, InputEvent::EVENT_KEYDOWN);
  77. core->getInput()->addEventListener(this, InputEvent::EVENT_KEYUP);
  78. }
  79. void HelloPolycodeApp::handleEvent(Event *e) {
  80. if(e->getDispatcher() == core->getInput()) {
  81. InputEvent *inputEvent = (InputEvent*)e;
  82. switch(e->getEventCode()) {
  83. case InputEvent::EVENT_KEYDOWN:
  84. switch (inputEvent->keyCode()) {
  85. case KEY_r:
  86. vehicleController->warpVehicle(Vector3(6,1,5));
  87. break;
  88. case KEY_UP:
  89. engineForce = -15;
  90. break;
  91. case KEY_DOWN:
  92. engineForce = 15;
  93. break;
  94. case KEY_LEFT:
  95. steeringValue = 0.5;
  96. break;
  97. case KEY_RIGHT:
  98. steeringValue = -0.5;
  99. break;
  100. case KEY_SPACE:
  101. breaking = true;
  102. break;
  103. }
  104. break;
  105. case InputEvent::EVENT_KEYUP:
  106. switch (inputEvent->key) {
  107. case KEY_UP:
  108. case KEY_DOWN:
  109. engineForce = 0;
  110. break;
  111. case KEY_LEFT:
  112. case KEY_RIGHT:
  113. steeringValue = 0.0;
  114. break;
  115. case KEY_SPACE:
  116. breaking = false;
  117. break;
  118. }
  119. break;
  120. }
  121. }
  122. }
  123. HelloPolycodeApp::~HelloPolycodeApp() {
  124. }
  125. bool HelloPolycodeApp::Update() {
  126. Number elapsed = core->getElapsed();
  127. if(breaking) {
  128. vehicleController->setBrake(20, 2);
  129. vehicleController->setBrake(20, 3);
  130. vehicleController->applyEngineForce(0, 2);
  131. vehicleController->applyEngineForce(0, 3);
  132. } else {
  133. vehicleController->setBrake(0, 2);
  134. vehicleController->setBrake(0, 3);
  135. vehicleController->applyEngineForce(engineForce, 2);
  136. vehicleController->applyEngineForce(engineForce, 3);
  137. }
  138. vehicleController->setSteeringValue(steeringValue, 0);
  139. vehicleController->setSteeringValue(steeringValue, 1);
  140. CollisionResult res = scene->testCollision(vehicle, testBox);
  141. if(res.collided) {
  142. testBox->setColor(1.0,1.0,0.0,0.5);
  143. } else {
  144. testBox->setColor(0.0,1.0,1.0,0.5);
  145. }
  146. return core->updateAndRender();
  147. }