WASD or arrow keys to move or left click to just accelerate Space to jump (buggy)
A fork of Infinite Car Driving V2 - 3dmodel? by TomOwen
xxxxxxxxxx
let buildings = []
let myCamera;
let oscCar;
let carModel
let carTexture
let blockadeModel
let barrierTexture
let mouseXPosCheck
let mouseZPosCheck
let cameraChanged
let messagesList = ["Left click or press 'W' to move forward", "'A'/'D' or Left Arrow/Right Arrow to move left/right", "Press spacebar to jump", "hold middle mouse for orbit camera"]
let myFont;
let blockades = []
let carStarted
let livesText
let carAccel
let actualCamPos
let myCar
function preload() {
myFont = loadFont('Roboto-Black.ttf');
carModel = loadModel('car.obj', true)
carTexture = loadImage('carTexture.png')
blockadeModel = loadModel('barrier.obj', true)
barrierTexture = loadImage('barrierTexture.jpg')
}
function setup() {
createCanvas(windowWidth, windowHeight, WEBGL);
myCar = new Car()
myCamera = createCamera();
cameraChanged = false
carAccel = false
oscCar = new p5.Oscillator('box')
// oscCar.start()
oscCar.amp(0.005, 0.01)
}
function draw() {
background("lightblue");
if (myCar.lives === 0) {
gameOver()
} else {
createCityObjects()
drawLights()
keyPressedDown()
cameraDraw()
messagesDraw()
removeObjects()
angleMode(RADIANS)
// oscCar.freq(map(myCar.vel.mag(), 0, 6, 0, 200, true))
myCar.draw()
myCar.update()
push()
fill("black")
translate(myCar.pos.x + 2000, -2, 0)
box(10000, 0, 350)
pop()
for (let i = 0; i < 400; i++) {
push()
fill("yellow")
translate(i * 400, -3, 0)
box(100, 0, 20)
pop()
}
push()
fill("darkgrey")
strokeWeight(1)
stroke("black")
translate(myCar.pos.x + 2000, -1, -200)
box(10000, -15, 75)
pop()
push()
fill("grey")
translate(myCar.pos.x + 2000, 1, -115)
box(10000, 0, 20000)
pop()
noStroke();
drawBuildings()
drawBlockades()
checkHitBlock()
if (mouseIsPressed === true) {
if (mouseButton === CENTER) {
cameraChanged = true
}
} else {
cameraChanged = false
}
push()
angleMode(DEGREES)
textFont(myFont);
textSize(20);
textAlign(CENTER)
fill("red")
translate(myCar.pos.x, myCar.pos.y - 200, myCar.pos.z - 400)
rotateY(270)
text("lives left: " + myCar.lives, 5, 5)
pop()
}
}
function createCityObjects() {
if (frameCount % 10 === 0 && myCar.vel.mag() > 0.5) {
createBuildings()
}
if (frameCount % random([15, 50, 100, 200, 300]) === 0 && myCar.vel.mag() > 0.5) {
createBlockades()
}
}
function drawLights() {
directionalLight(color(150, 100, 0), createVector(-0.8, -0.5, -0.2));
ambientLight(180, 150, 150)
}
function createRoads() {
//NOTUSED YET
}
function drawBuildings() {
for (let building of buildings) {
building.draw()
}
}
function createBuildings() {
if (myCar.pos.x > 1000) {
buildings.push(new Building((myCar.pos.x + random(5000, 6000)), random(300, 350)))
buildings.push(new Building((myCar.pos.x + random(5000, 6000)), -random(300, 350)))
}
}
function drawBlockades() {
for (let blockade of blockades) {
blockade.draw()
}
}
function createBlockades() {
if (myCar.pos.x > 8000) {
blockades.push(new Blockade((myCar.pos.x + random(4000, 6000))))
}
}
function keyPressedDown() {
if (keyIsDown(UP_ARROW) || keyIsDown(87)) {
carAccel = true
if (myCar.vel.mag() === 0) {
} else {
myCar.acc.x = 1
myCar.vel.limit(80)
}
} else {
carAccel = false
myCar.acc.x = 0
myCar.vel.set(20)
}
if ((keyIsDown(DOWN_ARROW) || keyIsDown(83)) && myCar.vel.x > 30) {
myCar.vel.mult(0.9)
}
}
function checkHitBlock() {
let hitBlocks = blockades.filter(block => block.pos.dist(myCar.pos) < 85 && block.damaging === true)
hitBlocks.forEach(block => {
myCar.lives -= 1
block.damaging = false
})
}
function removeObjects() {
buildings = buildings.filter(building => building.pos.dist(myCar.pos) < 6000)
blockades = blockades.filter(blockade => blockade.pos.dist(myCar.pos) < 6000)
blockades = blockades.filter(blockade => blockade.damaging === true)
}
function gameOver() {
background("black")
push()
angleMode(DEGREES)
textFont(myFont);
textSize(36);
textAlign(CENTER)
fill("red")
translate(myCar.pos.x, 0, -100)
rotateY(270)
text("GAME OVER!", 5, 5)
pop()
}
function cameraDraw() {
if (cameraChanged === true) {
const camPos = calcCameraPosition()
myCamera.setPosition(camPos.x, camPos.y, camPos.z)
} else if (cameraChanged === false) {
const desiredOffset = createVector(-500, -150, 0)
const desiredCamPos = p5.Vector.add(myCar.pos, desiredOffset)
myCamera.setPosition(desiredCamPos.x, desiredCamPos.y, desiredCamPos.z)
}
myCamera.lookAt(myCar.pos.x, myCar.pos.y, myCar.pos.z);
}
function messagesDraw() {
for (let i = 0; i < messagesList.length; i++) {
push()
angleMode(DEGREES)
textFont(myFont);
textSize(20);
textAlign(CENTER)
fill("red")
translate(2000 + (i * 5000), -150, 0)
rotateY(270)
text(messagesList[i], 5, 5)
pop()
}
}