Main.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. // Copyright (C) 2009-2018, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <cstdio>
  6. #include "../common/Framework.h"
  7. using namespace anki;
  8. class MyApp : public SampleApp
  9. {
  10. public:
  11. Error sampleExtraInit() override;
  12. Error userMainLoop(Bool& quit) override;
  13. };
  14. Error MyApp::sampleExtraInit()
  15. {
  16. ScriptResourcePtr script;
  17. ANKI_CHECK(getResourceManager().loadResource("assets/scene.lua", script));
  18. ANKI_CHECK(getScriptManager().evalString(script->getSource()));
  19. // Create the player
  20. if(1)
  21. {
  22. SceneNode& cam = getSceneGraph().getActiveCameraNode();
  23. cam.getComponent<MoveComponent>().setLocalTransform(
  24. Transform(Vec4(0.0, 0.0, 5.0, 0.0), Mat3x4::getIdentity(), 1.0));
  25. PlayerNode* player;
  26. ANKI_CHECK(getSceneGraph().newSceneNode("player", player, Vec4(0.0f, 2.5f, 0.0f, 0.0f)));
  27. PlayerControllerComponent& pcomp = player->getComponent<PlayerControllerComponent>();
  28. pcomp.getPhysicsPlayerController()->setMaterialMask(PhysicsMaterialBit::STATIC_GEOMETRY);
  29. player->addChild(&cam);
  30. }
  31. // Create a body component with joint
  32. {
  33. ModelNode* monkey;
  34. ANKI_CHECK(
  35. getSceneGraph().newSceneNode<ModelNode>("monkey_p2p", monkey, "assets/SuzanneMaterial-material.ankimdl"));
  36. BodyNode* body;
  37. ANKI_CHECK(getSceneGraph().newSceneNode<BodyNode>("bmonkey_p2p", body, "assets/Suzanne.ankicl"));
  38. body->getComponent<BodyComponent>().setTransform(
  39. Transform(Vec4(-0.0f, 4.0f, -3.0f, 0.0f), Mat3x4::getIdentity(), 1.0f));
  40. body->addChild(monkey);
  41. body->getComponent<JointComponent>().newHingeJoint(Vec3(0.2f, 1.0f, 0.0f), Vec3(1, 0, 0));
  42. }
  43. // Create a chain
  44. {
  45. const U LINKS = 5;
  46. BodyNode* prevBody = nullptr;
  47. for(U i = 0; i < LINKS; ++i)
  48. {
  49. ModelNode* monkey;
  50. ANKI_CHECK(getSceneGraph().newSceneNode<ModelNode>(
  51. StringAuto(getAllocator()).sprintf("monkey_chain%u", i).toCString(),
  52. monkey,
  53. "assets/SuzanneMaterial-material.ankimdl"));
  54. Transform trf(Vec4(-4.3f, 12.0f, -3.0f, 0.0f), Mat3x4::getIdentity(), 1.0f);
  55. trf.getOrigin().y() -= i * 1.25f;
  56. // trf.getOrigin().x() -= i * 0.25f;
  57. // monkey->getComponent<MoveComponent>().setLocalTransform(trf);
  58. BodyNode* body;
  59. ANKI_CHECK(getSceneGraph().newSceneNode<BodyNode>(
  60. StringAuto(getAllocator()).sprintf("bmonkey_chain%u", i).toCString(), body, "assets/Suzanne.ankicl"));
  61. body->getComponent<BodyComponent>().setTransform(trf);
  62. // Create joint
  63. JointComponent& jointc = body->getComponent<JointComponent>();
  64. if(prevBody == nullptr)
  65. {
  66. jointc.newPoint2PointJoint(Vec3(0, 1, 0));
  67. }
  68. else
  69. {
  70. prevBody->addChild(body);
  71. jointc.newPoint2PointJoint2(Vec3(0, 1.0, 0), Vec3(0, -1.0, 0));
  72. }
  73. body->addChild(monkey);
  74. prevBody = body;
  75. }
  76. }
  77. return Error::NONE;
  78. }
  79. Error MyApp::userMainLoop(Bool& quit)
  80. {
  81. // ANKI_CHECK(SampleApp::userMainLoop(quit));
  82. if(getInput().getKey(KeyCode::ESCAPE))
  83. {
  84. quit = true;
  85. }
  86. if(getInput().getKey(KeyCode::F1) == 1)
  87. {
  88. static U mode = 0;
  89. mode = (mode + 1) % 3;
  90. if(mode == 0)
  91. {
  92. getMainRenderer().getDbg().setEnabled(false);
  93. }
  94. else if(mode == 1)
  95. {
  96. getMainRenderer().getDbg().setEnabled(true);
  97. getMainRenderer().getDbg().setDepthTestEnabled(true);
  98. getMainRenderer().getDbg().setDitheredDepthTestEnabled(false);
  99. }
  100. else
  101. {
  102. getMainRenderer().getDbg().setEnabled(true);
  103. getMainRenderer().getDbg().setDepthTestEnabled(false);
  104. getMainRenderer().getDbg().setDitheredDepthTestEnabled(true);
  105. }
  106. }
  107. if(getInput().getKey(KeyCode::R))
  108. {
  109. SceneNode& player = getSceneGraph().findSceneNode("player");
  110. player.getComponent<PlayerControllerComponent>().moveToPosition(Vec4(0.0f, 2.0f, 0.0f, 0.0f));
  111. }
  112. if(getInput().getMouseButton(MouseButton::LEFT) == 1)
  113. {
  114. ANKI_LOGI("Firing a monkey");
  115. static U instance = 0;
  116. Transform camTrf = getSceneGraph().getActiveCameraNode().getComponent<MoveComponent>().getWorldTransform();
  117. ModelNode* monkey;
  118. ANKI_CHECK(getSceneGraph().newSceneNode<ModelNode>(
  119. StringAuto(getAllocator()).sprintf("monkey%u", instance++).toCString(),
  120. monkey,
  121. "assets/SuzanneMaterial-material.ankimdl"));
  122. // monkey->getComponent<MoveComponent>().setLocalTransform(camTrf);
  123. BodyNode* body;
  124. ANKI_CHECK(getSceneGraph().newSceneNode<BodyNode>(
  125. StringAuto(getAllocator()).sprintf("bmonkey%u", instance++).toCString(), body, "assets/Suzanne.ankicl"));
  126. body->getComponent<BodyComponent>().setTransform(camTrf);
  127. PhysicsBodyPtr pbody = body->getComponent<BodyComponent>().getPhysicsBody();
  128. pbody->applyForce(camTrf.getRotation().getZAxis().xyz() * -1500.0f, Vec3(0.0f, 0.0f, 0.0f));
  129. body->addChild(monkey);
  130. }
  131. return Error::NONE;
  132. }
  133. int main(int argc, char* argv[])
  134. {
  135. Error err = Error::NONE;
  136. MyApp* app = new MyApp;
  137. err = app->init(argc, argv, argv[0]);
  138. if(!err)
  139. {
  140. err = app->mainLoop();
  141. }
  142. if(err)
  143. {
  144. ANKI_LOGE("Error reported. Bye!");
  145. }
  146. else
  147. {
  148. delete app;
  149. ANKI_LOGI("Bye!!");
  150. }
  151. return 0;
  152. }