xxxxxxxxxx
82
let player, world;
let objects = [];
const sc = 100;
const fov = 2.35;
const res = 100;
let showMap = 0;
let particle;
function setup() {
createCanvas(600, 600);
player = new Player(sc, [0.03, 0.03, 0.03], res, fov);
world = new World(sc);
objects.push(new WorldObject(sc, 0, 0, -1, 0.1));
particle = new Particle();
background(220);
objects.push(particle);
}
function draw() {
//background(220, 50);
background(0);
if (keyIsDown(87)) player.moveForw(); // w
if (keyIsDown(83)) player.moveBack(); // s
if (keyIsDown(65)) player.lookLeft(); // a
if (keyIsDown(68)) player.lookRight(); // d
if (keyIsDown(LEFT_ARROW)) player.strafeLeft(); // Left Arrow
if (keyIsDown(RIGHT_ARROW)) player.strafeRight(); // Right Arrow
for (let ni=0; ni<objects.length; ni++){
objects[ni].update();
}
if ((showMap % 2) == 0) {
// Ray tracing section:
push();
translate(0, height / 2);
noStroke();
rectMode(CENTER);
let best = 0;
let marcher = new Marcher(player.phi);
for (let ni = 0; ni < player.res; ni++) {
marcher.reset();
marcher.turnRight(player.fov / 2 - ni * player.fov / player.res);
marcher.step(player.r + 0.001);
let col = (player.rayMarch(marcher, objects, 0) / TWO_PI);
fill(5/(col)+10);
rect((ni + 0.5) * width / res, 0, width / res, 1+0*(20/(col)));
}
pop();
}
noStroke();
fill(255);
text(frameRate().toFixed(1), width - 200, 20);
//let lat = 180/PI*asin(1-player.phi[2][0])
//let lon = 180/PI*atan2(1-player.phi[1][0], 1-player.phi[0][0])
//text(lon.toFixed(1) + "E " +lat.toFixed(1)+ "N", width-200,40);
if (showMap < 2) {
push();
translate(150, 150);
world.show();
for (let ni = 0; ni < objects.length; ni++) {
objects[ni].show();
}
player.show();
pop();
}
}
function keyPressed() {
if (keyCode === ENTER) {
//objects.push(new WorldObject(sc, player.phi[0][0], player.phi[1][0], player.phi[2][0], 0.02));
objects.push(new Particle());
} else if (keyCode === BACKSPACE) {
objects.pop();
} else if (key === 'm') {
showMap = (showMap + 1) % 4;
}
}