/samples/vehicle_physics_demo/gamelevel.js

https://github.com/cjcliffe/CubicVR.js · JavaScript · 180 lines · 147 code · 26 blank · 7 comment · 20 complexity · 43e326374624245d3245ca26ee10ca95 MD5 · raw file

  1. function loadVehicle(modelFile,modelPath,meshName,collisionName) {
  2. // load the collada file, specify path for images
  3. var scene = CubicVR.loadCollada(modelFile,modelPath);
  4. // var scene = CubicVR.loadCollada("../models/collada/sportscar/car1.dae","../models/collada/sportscar/");
  5. var carModel = scene.getSceneObject(meshName).getMesh();
  6. // var carModel = scene.getSceneObject("car1").getMesh();
  7. // add some reflection
  8. var envTex = new CubicVR.Texture("../images/fract_reflections.jpg");
  9. for (var i= 0; i < carModel.materials.length; i++) {
  10. var mat = carModel.materials[i];
  11. mat.setTexture(envTex,CubicVR.enums.texture.map.ENVSPHERE);
  12. mat.env_amount=0.2;
  13. }
  14. var vehicle_base = {
  15. body: scene.getSceneObject(meshName),
  16. wheel_fl: scene.getSceneObject("wheel_fl"),
  17. wheel_fr: scene.getSceneObject("wheel_fr"),
  18. wheel_bl: scene.getSceneObject("wheel_bl"),
  19. wheel_br: scene.getSceneObject("wheel_br"),
  20. };
  21. var wheelMesh = vehicle_base.wheel_fl.getMesh();
  22. var suspension_rest = 0.10;
  23. var vehicle = new CubicVR.Vehicle({
  24. collision: {
  25. type: "convex_hull",
  26. mesh: scene.getSceneObject(collisionName).getMesh()
  27. },
  28. mesh: vehicle_base.body.getMesh(),
  29. steeringClamp: 0.6,
  30. maxEngineForce: 800,
  31. wheels: [
  32. {
  33. mesh: wheelMesh,
  34. position: vehicle_base.wheel_fl.position,
  35. scale: [-1,1,1],
  36. steering: true,
  37. braking: false,
  38. driving: true,
  39. suspensionRest: suspension_rest,
  40. frictionSlip: 1.5,
  41. dampingCompression: 1.0
  42. },
  43. {
  44. mesh: wheelMesh,
  45. position: vehicle_base.wheel_fr.position,
  46. steering: true,
  47. braking: false,
  48. driving: true,
  49. suspensionRest:suspension_rest,
  50. frictionSlip: 1.5,
  51. dampingCompression: 1.0
  52. },
  53. {
  54. mesh: wheelMesh,
  55. position: vehicle_base.wheel_bl.position,
  56. scale: [-1,1,1],
  57. driving:true,
  58. braking:true,
  59. suspensionRest: suspension_rest,
  60. frictionSlip: 1.5,
  61. dampingCompression: 1.0
  62. },
  63. {
  64. mesh: wheelMesh,
  65. position: vehicle_base.wheel_br.position,
  66. driving: true,
  67. braking: true,
  68. suspensionRest: suspension_rest,
  69. frictionSlip: 1.5,
  70. dampingCompression: 1.0
  71. }
  72. ]
  73. });
  74. return vehicle;
  75. }
  76. function GameLevel(levelFile,levelImages) {
  77. this.body = null;
  78. this.levelModel = CubicVR.loadCollada(levelFile,levelImages);
  79. this.playerStart = this.levelModel.getSceneObject("vehicle_start");
  80. this.playerStart.visible = false;
  81. this.playerStartRotation = [0,0,0];
  82. if (this.playerStart) this.playerStartRotation = this.playerStart.rotation;
  83. if (this.playerStart) this.playerStart = this.playerStart.position;
  84. }
  85. GameLevel.prototype = {
  86. setupRigidBody: function(physics) {
  87. var sceneObjs = this.levelModel.sceneObjects;
  88. var collisionMaps = [];
  89. var undef;
  90. for (var i = 0; i < sceneObjs.length; i++) {
  91. var sceneObj = sceneObjs[i];
  92. var objMesh = sceneObj.getMesh();
  93. var nameSplit = sceneObj.name.split("-");
  94. if (nameSplit.length === 3) {
  95. if (nameSplit[0] === "static") {
  96. if (nameSplit[1] == "cube") {
  97. var body = new CubicVR.RigidBody(sceneObj,{
  98. type: "static",
  99. mass:0,
  100. margin:0,
  101. collision: {
  102. type: "box",
  103. size: sceneObj.scale,
  104. }
  105. });
  106. physics.bind(body);
  107. // this.levelModel.removeSceneObject(sceneObj);
  108. // i--;
  109. } else if (nameSplit[1] == "mesh") {
  110. if (collisionMaps[objMesh.name]===undef) {
  111. collisionMaps[objMesh.name] = new CubicVR.CollisionMap({
  112. type: "mesh",
  113. mesh: objMesh
  114. });
  115. }
  116. var meshMat = objMesh.getMaterials();
  117. var ncToken = "no_collide";
  118. var ncLen = ncToken.length;
  119. var nvToken = "no_visible";
  120. var nvLen = nvToken.length;
  121. for (var m = 0, mMax = meshMat.length; m < mMax; m++) {
  122. var mat = meshMat[m];
  123. if (!mat.name) continue;
  124. if (mat.name.substr(0,ncLen) == ncToken) {
  125. mat.setCollision(false);
  126. }
  127. if (mat.name.substr(0,nvLen) == nvToken) {
  128. mat.setVisibility(false);
  129. }
  130. }
  131. var body = new CubicVR.RigidBody(sceneObj,{
  132. type: "static",
  133. mass:0,
  134. margin:0,
  135. collision: collisionMaps[objMesh.name]
  136. });
  137. physics.bind(body);
  138. }
  139. } else if (nameSplit[0] === "dynamic") {
  140. // ...
  141. }
  142. }
  143. }
  144. },
  145. getPlayerStart: function() {
  146. return (this.playerStart||[0,0,0]).slice(0);
  147. },
  148. getPlayerStartRotation: function() {
  149. return (this.playerStartRotation||[0,0,0]).slice(0);
  150. },
  151. getLevel: function() {
  152. return this.levelModel;
  153. }
  154. }