xxxxxxxxxx
272
// could use this to try for an arpg using the new kenney pack...
let tilemap;
let enemies, player, cellSize;
let openCells;
let exits;
const playerSpeed = 1.5;
const maxEnemies = 30;
// function setup() {
// new Canvas(800, 600);
// cellSize = 24;
// background(20);
// player = new Sprite(cellSize, cellSize);
// player.w = cellSize;
// player.h = cellSize;
// walls = new Group();
// walls.w = cellSize;
// walls.h = cellSize;
// walls.tile = '#';
// tileMap = new Tiles([
// "########################################",
// "#......................................#",
// "#......................................#",
// "#......................................#",
// "#....##..............############......#",
// "#....##..............#.................#",
// "#..######............#.................#",
// "#..######............#.................#",
// "#....##..............#.................#",
// "#....##..............#.......>.........#",
// "#....................#.................#",
// "#....................#.................#",
// "#....................#.................#",
// "#....................#.................#",
// "#.....################.................#",
// "#......................................#",
// "#......................................#",
// "#................................###...#",
// "#................................###...#",
// "#................................###...#",
// "#......................................#",
// "#......................................#",
// "########################################",
// ], 0, 0, walls.w + 4, walls.h + 4);
// }
// function draw() {
// // clear();
// // for (let w of walls) {
// // }
// }
let bricks, tilesGroup;
function setup() {
new Canvas(640, 480);
world.allowSleeping = true;
background(220);
cellSize = 24;
tilemap = [
"########################################",
"#......................................#",
"#......................................#",
"#......................................#",
"#....##..............############......#",
"#....##..............#.................#",
"#..######............#.................#",
"#..######............#.................#",
"#....##..............#.................#",
"#....##..............#.................#",
"#....................#.................#",
"#....................#.................#",
"#....................#.................#",
"#....................#.................#",
"#.....################.................#",
"#......................................#",
"#......................................#",
"#................................###...#",
"#................................###...#",
"#................................###...#",
"#......................................#",
"#......................................#",
"########################################",
];
bricks = new Group();
bricks.w = cellSize;
bricks.h = cellSize;
bricks.tile = "#";
bricks.collider = "static";
openCells = [];
tilesGroup = new Tiles(tilemap, 0, 0, bricks.w + 4, bricks.h + 4);
exits = new Group();
let exit = new exits.Sprite();
exit.x = 3*cellSize+16;
exit.y = 2*cellSize+4;
exit.w = cellSize + cellSize * 5;
exit.h = cellSize + cellSize * 2;
exit.collider = 'none';
exit.color = color(255, 0, 0);
exit.stroke = color(0);
// console.log(tilesGroup);
for (let r = 0; r < tilemap.length; r++) {
for (let c = 0; c < tilemap[0].length; c++) {
if (tilemap[r][c] == ".") openCells.push({ c: c, r: r });
}
}
let oc = random(openCells);
// console.log(oc);
player = new Sprite();
player.d = cellSize;
// player.h = cellSize;
player.x = oc.c * cellSize;
player.y = oc.r * cellSize;
// player.bounciness = 0.0;//5;
player.collider = "dynamic";
player.score = 0;
enemies = new Group();
for (let _ = 0; _ < maxEnemies; _++) {
let enemy = new enemies.Sprite();
if (random() > 0.5)
enemy.d = cellSize;
else {
enemy.w = cellSize;
enemy.h = cellSize;
}
enemy.collider = "dynamic";
let oc2 = random(openCells);
while (oc == oc2) {
oc2 = random(openCells);
}
enemy.x = oc2.c * cellSize;
enemy.y = oc2.r * cellSize;
enemy.cooldown = 0;
enemy.selfdestruct = false;
enemy.selfdestructTimer = 10;
}
player.collides(enemies, enemyCollision);
exits.overlap(enemies, enemyExit);
textSize(cellSize);
textFont("Consolas");
frameRate(24);
}
let feverdream = false;
function draw() {
if (!feverdream)
background(220);
// camera.on();
for (let brick of bricks) {
if (brick.mouse.hovers()) {
brick.color = "#AA4A44";
}
}
for (let e of enemies) {
enemyAI(e);
}
if (keyIsDown(74) || keyIsDown(83) || keyIsDown(DOWN_ARROW)) {
player.vel.y += playerSpeed;
// player.vel.y = constrain(player.vel.y, -1, 1);
}
if (keyIsDown(75) || keyIsDown(87) || keyIsDown(UP_ARROW)) {
player.vel.y -= playerSpeed;
// player.y -= cellSize;
}
if (keyIsDown(72) || keyIsDown(65) || keyIsDown(LEFT_ARROW)) {
// player.x -= cellSize;
player.vel.x -= playerSpeed;
}
if (keyIsDown(76) || keyIsDown(68) || keyIsDown(RIGHT_ARROW)) {
// player.x += cellSize;
player.vel.x += playerSpeed;
}
player.vel.x = constrain(player.vel.x, -3 * playerSpeed, 3 * playerSpeed);
player.vel.y = constrain(player.vel.y, -3 * playerSpeed, 3 * playerSpeed);
if (player.vel.x > 0.2) player.vel.x -= 0.2;
else if (player.vel.x < -0.2) player.vel.x += 0.2;
else player.vel.x = 0;
if (player.vel.y > 0.2) player.vel.y -= 0.2;
else if (player.vel.y < -0.2) player.vel.y += 0.2;
else player.vel.y = 0;
camera.x = player.x;
camera.y = player.y;
// UI time
// camera.off();
fill(0)
text(`Score: ${player.score}`, player.x, player.y);//cellSize/2, cellSize);
}
function keyPressed() {
if (key == "f") feverdream = !feverdream;
}
function enemyAI(e) {
if (e.cooldown == 0) {
if (random() > 0.8) {
const angle = random(-360, 360);
e.bearing = angle;
e.applyForce(2);
}
/*
const spd = 2;
if (random() > 0.8) {
if (random() > 0.5) {
e.vel.x += random([-1, 1]);
} else {
e.vel.y += random([-1, 1]);
}
}
e.vel.x = constrain(e.vel.x, -3 * spd, 3 * spd);
e.vel.y = constrain(e.vel.y, -3 * spd, 3 * spd);
if (e.vel.x > 0.2) e.vel.x -= 0.2;
else if (e.vel.x < -0.2) e.vel.x += 0.2;
else e.vel.x = 0;
if (e.vel.y > 0.2) e.vel.y -= 0.2;
else if (e.vel.y < -0.2) e.vel.y += 0.2;
else e.vel.y = 0;
} else {
e.cooldown--;
}
*/
}
// dead
if (e.selfdestruct) {
e.scale *= 1.1;
e.selfdestructTimer--;
if (e.selfdestructTimer <= 0) e.remove();
}
}
function enemyCollision(p, e) {
e.cooldown = 20;
console.log("ouch");
}
function enemyExit(exit, enemy) {
// if (enemy.cooldown > 0) { // enemy pushed in
if (!enemy.selfdestruct) {
enemy.selfdestruct = true;
player.score++;
}
}