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;
}
}
}