add level 2
This commit is contained in:
parent
69a25cd7c6
commit
2946b48055
BIN
public/assets/loop.png
Normal file
BIN
public/assets/loop.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 455 B |
|
@ -7,6 +7,7 @@ export class Arrow {
|
||||||
Arrow.images.left = loadImage('/assets/left.png');
|
Arrow.images.left = loadImage('/assets/left.png');
|
||||||
Arrow.images.right = loadImage('/assets/right.png');
|
Arrow.images.right = loadImage('/assets/right.png');
|
||||||
Arrow.images.empty = loadImage('/assets/empty.png');
|
Arrow.images.empty = loadImage('/assets/empty.png');
|
||||||
|
Arrow.images.loop = loadImage('/assets/loop.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(direction) {
|
constructor(direction) {
|
||||||
|
|
|
@ -9,6 +9,7 @@ export class ClickableArrow {
|
||||||
ClickableArrow.images.left = loadImage('/assets/left.png');
|
ClickableArrow.images.left = loadImage('/assets/left.png');
|
||||||
ClickableArrow.images.right = loadImage('/assets/right.png');
|
ClickableArrow.images.right = loadImage('/assets/right.png');
|
||||||
ClickableArrow.images.empty = loadImage('/assets/empty.png');
|
ClickableArrow.images.empty = loadImage('/assets/empty.png');
|
||||||
|
ClickableArrow.images.loop = loadImage('/assets/loop.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(direction, clickable = false) {
|
constructor(direction, clickable = false) {
|
||||||
|
|
|
@ -22,7 +22,7 @@ function setup(){
|
||||||
mgr.addScene(Level1);
|
mgr.addScene(Level1);
|
||||||
mgr.addScene(Level2);
|
mgr.addScene(Level2);
|
||||||
|
|
||||||
mgr.showScene(StartScene);
|
mgr.showScene(Level2);
|
||||||
};
|
};
|
||||||
|
|
||||||
function draw(){
|
function draw(){
|
||||||
|
|
|
@ -38,7 +38,7 @@ export default function Level2() {
|
||||||
|
|
||||||
let blocks;
|
let blocks;
|
||||||
let steps;
|
let steps;
|
||||||
// let loops;
|
let loops;
|
||||||
// let clickArrow;
|
// let clickArrow;
|
||||||
|
|
||||||
// let clicked;
|
// let clicked;
|
||||||
|
@ -46,20 +46,22 @@ export default function Level2() {
|
||||||
let levelFinished = false;
|
let levelFinished = false;
|
||||||
|
|
||||||
let selectedStepIndex = null;
|
let selectedStepIndex = null;
|
||||||
|
let selectedPanel = null;
|
||||||
|
|
||||||
const buildingBlocks = [
|
const buildingBlocks = [
|
||||||
new ClickableArrow('up', false),
|
new ClickableArrow('up', false),
|
||||||
new ClickableArrow('right', false),
|
new ClickableArrow('right', false),
|
||||||
|
new ClickableArrow('loop', false),
|
||||||
];
|
];
|
||||||
|
|
||||||
// changed on user input
|
// // changed on user input
|
||||||
let selectedSteps;
|
// let selectedSteps;
|
||||||
let selectedBlock;
|
// let selectedBlock;
|
||||||
|
|
||||||
const slots = {
|
const slots = {
|
||||||
blocks: 2,
|
blocks: 3,
|
||||||
steps: 8,
|
steps: 5,
|
||||||
loop: 3,
|
loops: 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
this.name = "GameScene";
|
this.name = "GameScene";
|
||||||
|
@ -98,13 +100,12 @@ export default function Level2() {
|
||||||
numBoxes: slots.steps,
|
numBoxes: slots.steps,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
loops = new ControlPanel({
|
||||||
// loops = new ControlPanel({
|
name: 'loop',
|
||||||
// name: 'loop',
|
x: width / 32 * 7 + 48 * (slots.blocks + slots.steps + 2.5),
|
||||||
// x: width / 32 * 7 + 48 * (slots.blocks + slots.steps + 2.75),
|
y: height / 32,
|
||||||
// y: height / 32,
|
numBoxes: slots.loops,
|
||||||
// numBoxes: slots.loops,
|
});
|
||||||
// });
|
|
||||||
|
|
||||||
flag = new Flag(12 * worldBlockSize, height - worldBlockSize * 4, catSize * 0.75);
|
flag = new Flag(12 * worldBlockSize, height - worldBlockSize * 4, catSize * 0.75);
|
||||||
|
|
||||||
|
@ -158,7 +159,7 @@ export default function Level2() {
|
||||||
flag.draw();
|
flag.draw();
|
||||||
blocks.draw();
|
blocks.draw();
|
||||||
steps.draw();
|
steps.draw();
|
||||||
// loops.draw();
|
loops.draw();
|
||||||
cat.draw();
|
cat.draw();
|
||||||
|
|
||||||
if (cat.sprite && flag.sprite) {
|
if (cat.sprite && flag.sprite) {
|
||||||
|
@ -168,7 +169,6 @@ export default function Level2() {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (levelFinished) {
|
if (levelFinished) {
|
||||||
// draw the overlay
|
|
||||||
push();
|
push();
|
||||||
fill(35, 20, 45, 190);
|
fill(35, 20, 45, 190);
|
||||||
rectMode(CORNER);
|
rectMode(CORNER);
|
||||||
|
@ -201,45 +201,74 @@ export default function Level2() {
|
||||||
console.log(`key passed: ${_key}`);
|
console.log(`key passed: ${_key}`);
|
||||||
|
|
||||||
if (keyCode === ESCAPE) {
|
if (keyCode === ESCAPE) {
|
||||||
// Deselect the currently selected arrow if any
|
if (selectedPanel && selectedIndex !== null) {
|
||||||
if (selectedStepIndex !== null && steps.contents[selectedStepIndex]) {
|
const panel = selectedPanel === 'steps' ? steps : loops;
|
||||||
steps.contents[selectedStepIndex].selected = false;
|
if (panel.contents[selectedIndex]) {
|
||||||
|
panel.contents[selectedIndex].selected = false;
|
||||||
}
|
}
|
||||||
selectedStepIndex = null;
|
}
|
||||||
|
selectedPanel = null;
|
||||||
|
selectedIndex = null;
|
||||||
} else {
|
} else {
|
||||||
cat.keyPressed(key);
|
cat.keyPressed(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.mousePressed = function() {
|
this.mousePressed = function() {
|
||||||
// console.log(`canvas clicked at ${mouseX}, ${mouseY}`);
|
|
||||||
|
|
||||||
steps.contents.forEach((arrow, index) => {
|
steps.contents.forEach((arrow, index) => {
|
||||||
if (arrow._isMouseOver(mouseX, mouseY)) {
|
if (arrow._isMouseOver(mouseX, mouseY)) {
|
||||||
|
steps.contents.forEach(a => a.selected = false);
|
||||||
|
loops.contents.forEach(a => a.selected = false);
|
||||||
|
|
||||||
|
selectedPanel = 'steps';
|
||||||
selectedStepIndex = index;
|
selectedStepIndex = index;
|
||||||
steps.contents.forEach(a => a.selected = false);
|
steps.contents.forEach(a => a.selected = false);
|
||||||
arrow.select();
|
arrow.select();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
blocks.contents.forEach((arrow) => {
|
loops.contents.forEach((arrow, index) => {
|
||||||
if (arrow._isMouseOver(mouseX, mouseY)) {
|
if (arrow._isMouseOver(mouseX, mouseY)) {
|
||||||
// console.log("Clicked arrow", arrow.direction);
|
steps.contents.forEach(a => a.selected = false);
|
||||||
if (selectedStepIndex !== null) {
|
loops.contents.forEach(a => a.selected = false);
|
||||||
const selectedArrow = steps.contents[selectedStepIndex];
|
|
||||||
selectedArrow.set(arrow.direction);
|
selectedPanel = 'loops';
|
||||||
selectedArrow.clickable = true;
|
selectedStepIndex = index;
|
||||||
selectedArrow.selected = false;
|
loops.contents.forEach(a => a.selected = false);
|
||||||
selectedStepIndex = null;
|
arrow.select();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
blocks.contents.forEach((arrow) => {
|
||||||
|
if (arrow._isMouseOver(mouseX, mouseY)) {
|
||||||
|
if (selectedPanel && selectedStepIndex !== null) {
|
||||||
|
let targetPanel = selectedPanel === 'steps' ? steps : loops;
|
||||||
|
const selectedArrow = targetPanel.contents[selectedStepIndex];
|
||||||
|
|
||||||
|
if (selectedPanel === 'loops' && arrow.direction === 'loop') {
|
||||||
|
selectedArrow.selected = false;
|
||||||
|
selectedStepIndex = null;
|
||||||
|
selectedPanel = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
selectedArrow.set(arrow.direction);
|
||||||
|
selectedArrow.clickable = true;
|
||||||
|
selectedArrow.selected = false;
|
||||||
|
|
||||||
|
selectedStepIndex = null;
|
||||||
|
selectedPanel = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.startGame = () => {
|
this.startGame = () => {
|
||||||
if (restart) cat.restart();
|
if (restart) cat.restart();
|
||||||
cat.run(steps.contents);
|
console.log(steps.contents);
|
||||||
|
console.log(loops.contents);
|
||||||
|
const flattenedSteps = _flattenSteps(steps.contents, loops.contents);
|
||||||
|
cat.run(flattenedSteps);
|
||||||
restart = true;
|
restart = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -267,3 +296,17 @@ export default function Level2() {
|
||||||
blockSprites = [];
|
blockSprites = [];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _flattenSteps(stepList, loopList) {
|
||||||
|
const result = stepList.reduce((acc, curr) => {
|
||||||
|
if (curr.direction == 'loop') acc.push(...loopList);
|
||||||
|
else acc.push(curr);
|
||||||
|
return acc;
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
console.log(`flattened result`)
|
||||||
|
console.log(result);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user