Tesla cybertruck

Put this in the console to make the car driveable:

{
  var camera = scene.activeCamera;
  var carMesh = new BABYLON.AbstractMesh('Cybertruck', scene);
  for(var i=0; i<scene.meshes.length; i++){
    let mesh = scene.meshes[i];
    if(mesh.id.startsWith('Cybertruck_primitive')){
    mesh.setParent(carMesh);
    }
  }
  camera.parent = carMesh;
  
  var actions = {
    forward: false,
    backward: false,
    brake: false,
    steerLeft: false,
    steerRight: false
  };
  
  var car = {
    velocity: 0,
    acceleration: 0.01,
    deceleration: 0.01,
    maxSpeed: 1,
    agility: 0.01
  };
  
  var worldProperties = {
    friction: 0.001
  };
  
  scene.onBeforeRenderObservable.add(function(){
    if(actions.forward){
      car.velocity += car.acceleration;
    }
    if(actions.backward){
      car.velocity -= car.acceleration;
    }
    if(actions.brake){
      car.velocity -= car.deceleration * getMoveDirection();
    }
    car.velocity -= worldProperties.friction * getMoveDirection();
    
    var speed = Math.abs(car.velocity);
    if(speed > car.maxSpeed){
      car.velocity = car.maxSpeed * getMoveDirection();
      speed = car.maxSpeed;
    }
    var rotate = car.agility * (speed / car.maxSpeed) * Math.PI * 2;
    if(actions.steerLeft){
      carMesh.rotation.y -= rotate * getMoveDirection();
    }
    if(actions.steerRight){
      carMesh.rotation.y += rotate * getMoveDirection();
    }
    carMesh.position.addInPlace(carMesh.right.scale(car.velocity));
  });
  
  scene.onKeyboardObservable.add(function(kbInfo){
    switch (kbInfo.type) {
        case BABYLON.KeyboardEventTypes.KEYDOWN:
            handleKeyDown(kbInfo.event.keyCode, true);
            break;
        case BABYLON.KeyboardEventTypes.KEYUP:
            handleKeyDown(kbInfo.event.keyCode, false);
            break;
    }
  });
  
  function getMoveDirection(){
    return car.velocity === 0 ? 0 : (car.velocity / Math.abs(car.velocity));
  }
  
  function handleKeyDown(keyCode, bool){
    switch(keyCode){
      case 87: // w
      case 38: // arrow up
      case 90: // z
        actions.forward = bool;
        break;
      case 83: // s
      case 40: // arrow down
        actions.backward = bool;
        break;
      case 32: // spacebar
        actions.brake = bool;
        break;
      case 65: // a
      case 37: // arrow left
      case 81: // q
        actions.steerLeft = bool;
        break;
      case 68: // d
      case 39: // arrow right
        actions.steerRight = bool;
        break;
    }
  }
}
5 Likes