Add some comments
This commit is contained in:
parent
b818f74190
commit
cf32c46c32
4 changed files with 50 additions and 8 deletions
|
@ -1,13 +1,15 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview This file contains the functions to select a level
|
||||||
|
*/
|
||||||
import { levelsBlueprint } from '/modules/levels.mjs'
|
import { levelsBlueprint } from '/modules/levels.mjs'
|
||||||
import { generatePlayground } from '/modules/playground.mjs'
|
import { generatePlayground } from '/modules/playground.mjs'
|
||||||
import { Timer } from '/modules/timer.mjs'
|
import { Timer } from '/modules/timer.mjs'
|
||||||
|
|
||||||
const prionicSequence = [0, 2, 6, 12, 20, 30, 42];
|
const prionicSequence = [0, 2, 6, 12, 20, 30, 42];
|
||||||
|
|
||||||
|
// This funcion is called when the player selects a level and starts the game
|
||||||
export const selectLevel = (ctx, gameState, id) => {
|
export const selectLevel = (ctx, gameState, id) => {
|
||||||
gameState.playground = generatePlayground(levelsBlueprint[id].structure, gameState.width, gameState.height);
|
gameState.playground = generatePlayground(levelsBlueprint[id].structure, gameState.width, gameState.height);
|
||||||
// TODO transfer expireFunction without a fail
|
|
||||||
// const expireFunc = () => {gameState.timer.expireFunction();};
|
|
||||||
gameState.timer.setTime(levelsBlueprint[id].time);
|
gameState.timer.setTime(levelsBlueprint[id].time);
|
||||||
gameState.playable = true;
|
gameState.playable = true;
|
||||||
gameState.tutorial.hide();
|
gameState.tutorial.hide();
|
||||||
|
@ -15,6 +17,7 @@ export const selectLevel = (ctx, gameState, id) => {
|
||||||
gameState.playground.draw(ctx, gameState.width, gameState.height);
|
gameState.playground.draw(ctx, gameState.width, gameState.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This function fills the level selection menu with the levels
|
||||||
export const fillLevelsSelection = (gameState, ctx) => {
|
export const fillLevelsSelection = (gameState, ctx) => {
|
||||||
let levelList = document.getElementById('level-list');
|
let levelList = document.getElementById('level-list');
|
||||||
for (let i = 0; i < levelsBlueprint.length; ++i) {
|
for (let i = 0; i < levelsBlueprint.length; ++i) {
|
||||||
|
@ -30,6 +33,7 @@ export const fillLevelsSelection = (gameState, ctx) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This class manages the levels and their completion
|
||||||
export class LevelManager {
|
export class LevelManager {
|
||||||
constructor(winFunction, StartingLevelId = 0) {
|
constructor(winFunction, StartingLevelId = 0) {
|
||||||
self.CurrentLevelId = StartingLevelId;
|
self.CurrentLevelId = StartingLevelId;
|
||||||
|
@ -45,16 +49,13 @@ export class LevelManager {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// getFirstUncompleted() {
|
|
||||||
// self.getFirstUncompleted();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// This function is called when the player completes a level
|
// This function is called when the player completes a level
|
||||||
// It checks if all levels are completed and calls the winFunction
|
// It checks if all levels are completed and calls the winFunction
|
||||||
// If not, it selects the next level
|
// If not, it selects the next level
|
||||||
next(ctx, gameState) {
|
next(ctx, gameState) {
|
||||||
let score = gameState.timer.getTime();
|
let score = gameState.timer.getTime();
|
||||||
gameState.scoreboard.updateScoreCurrentGamer(score);
|
gameState.scoreboard.updateScoreCurrentGamer(score);
|
||||||
|
|
||||||
self.Completed[self.CurrentLevelId] = true;
|
self.Completed[self.CurrentLevelId] = true;
|
||||||
let allLevelsFinished = self.Completed.reduce((a, b) => {
|
let allLevelsFinished = self.Completed.reduce((a, b) => {
|
||||||
return a && b;
|
return a && b;
|
||||||
|
@ -62,8 +63,9 @@ export class LevelManager {
|
||||||
if (allLevelsFinished) {
|
if (allLevelsFinished) {
|
||||||
self.winFunction();
|
self.winFunction();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.CurrentLevelId = self.getFirstUncompleted();
|
self.CurrentLevelId = self.getFirstUncompleted();
|
||||||
console.log(self.CurrentLevelId);
|
// console.log(self.CurrentLevelId);
|
||||||
selectLevel(ctx, gameState, self.CurrentLevelId);
|
selectLevel(ctx, gameState, self.CurrentLevelId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview This file contains the blueprints for the levels.
|
||||||
|
*/
|
||||||
import { Square } from '/modules/enums.mjs';
|
import { Square } from '/modules/enums.mjs';
|
||||||
|
|
||||||
// Blueprint for the first level
|
// Blueprint for the first level
|
||||||
//
|
|
||||||
const level1Blueprint = {
|
const level1Blueprint = {
|
||||||
structure:[[ Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall ],
|
structure:[[ Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall ],
|
||||||
[ Square.Wall, Square.Destination, Square.Box, Square.Floor, Square.Player, Square.Wall ],
|
[ Square.Wall, Square.Destination, Square.Box, Square.Floor, Square.Player, Square.Wall ],
|
||||||
|
@ -25,6 +27,7 @@ const level2Blueprint = {
|
||||||
time: 23000,
|
time: 23000,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Blueprint for the third level
|
||||||
const level3Blueprint = {
|
const level3Blueprint = {
|
||||||
structure: [
|
structure: [
|
||||||
[Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall,],
|
[Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall,],
|
||||||
|
@ -40,6 +43,7 @@ const level3Blueprint = {
|
||||||
time: 8000,
|
time: 8000,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Blueprint for the fourth level
|
||||||
const level4Blueprint = {
|
const level4Blueprint = {
|
||||||
structure: [
|
structure: [
|
||||||
[Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall,],
|
[Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall,],
|
||||||
|
@ -56,6 +60,7 @@ const level4Blueprint = {
|
||||||
time: 3000,
|
time: 3000,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Blueprint for the fifth level
|
||||||
const level5Blueprint = {
|
const level5Blueprint = {
|
||||||
structure: [
|
structure: [
|
||||||
[Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, ],
|
[Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, Square.Wall, ],
|
||||||
|
@ -72,6 +77,7 @@ const level5Blueprint = {
|
||||||
time: 40000
|
time: 40000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Array of blueprints for all levels
|
||||||
export const levelsBlueprint = [
|
export const levelsBlueprint = [
|
||||||
level1Blueprint,
|
level1Blueprint,
|
||||||
level2Blueprint,
|
level2Blueprint,
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview This file contains the Playground class.
|
||||||
|
*/
|
||||||
|
|
||||||
import { Square, CanMove, MoveDirection } from '/modules/enums.mjs'
|
import { Square, CanMove, MoveDirection } from '/modules/enums.mjs'
|
||||||
import { Position, copyPosition } from '/modules/position.mjs'
|
import { Position, copyPosition } from '/modules/position.mjs'
|
||||||
import { ForegroundTile, BackgroundTile } from '/modules/tiles.mjs'
|
import { ForegroundTile, BackgroundTile } from '/modules/tiles.mjs'
|
||||||
|
@ -18,6 +22,7 @@ export const generatePlayground = (levelBlueprint, canvasWidth, canvasHeight) =>
|
||||||
x: NaN,
|
x: NaN,
|
||||||
y: NaN,
|
y: NaN,
|
||||||
};
|
};
|
||||||
|
|
||||||
levelBlueprint.forEach((levelRow, indexRow) => {
|
levelBlueprint.forEach((levelRow, indexRow) => {
|
||||||
background.push([]);
|
background.push([]);
|
||||||
foreground.push([]);
|
foreground.push([]);
|
||||||
|
|
|
@ -1,4 +1,14 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview Timer class
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class Timer
|
||||||
|
* @classdesc This class is responsible for the timer.
|
||||||
|
*/
|
||||||
export class Timer {
|
export class Timer {
|
||||||
|
|
||||||
|
// Set time to solve the level by using the difficulty slider
|
||||||
readDifficulty(slider) {
|
readDifficulty(slider) {
|
||||||
self.difficulty = 1.5 - slider.value * 0.01;
|
self.difficulty = 1.5 - slider.value * 0.01;
|
||||||
self.time = self.originalTime * self.difficulty;
|
self.time = self.originalTime * self.difficulty;
|
||||||
|
@ -8,13 +18,17 @@ export class Timer {
|
||||||
self.originalTime = time;
|
self.originalTime = time;
|
||||||
self.difficulty = 1.0;
|
self.difficulty = 1.0;
|
||||||
self.time = time;
|
self.time = time;
|
||||||
|
|
||||||
let difficultySlider = document.getElementById('difficulty-slider');
|
let difficultySlider = document.getElementById('difficulty-slider');
|
||||||
this.readDifficulty(difficultySlider);
|
this.readDifficulty(difficultySlider);
|
||||||
difficultySlider.addEventListener("change", () => {
|
difficultySlider.addEventListener("change", () => {
|
||||||
this.readDifficulty(difficultySlider);
|
this.readDifficulty(difficultySlider);
|
||||||
})
|
})
|
||||||
|
|
||||||
self.expireFunction = expireFunction;
|
self.expireFunction = expireFunction;
|
||||||
self.timerElement = document.getElementById('timer');
|
self.timerElement = document.getElementById('timer');
|
||||||
|
|
||||||
|
// Feature : Move the pause button when the mouse is over it
|
||||||
self.pauseButton1 = document.getElementById('pause-1');
|
self.pauseButton1 = document.getElementById('pause-1');
|
||||||
self.pauseButton2 = document.getElementById('pause-2');
|
self.pauseButton2 = document.getElementById('pause-2');
|
||||||
self.pauseButton2.style.visibility = "hidden";
|
self.pauseButton2.style.visibility = "hidden";
|
||||||
|
@ -40,6 +54,8 @@ export class Timer {
|
||||||
self.pauseButton1.addEventListener("click", () => {
|
self.pauseButton1.addEventListener("click", () => {
|
||||||
alert("All this effort for nothing");
|
alert("All this effort for nothing");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
self.timeRunning = false;
|
self.timeRunning = false;
|
||||||
self.intervalController = setInterval(() => {
|
self.intervalController = setInterval(() => {
|
||||||
// self.timerElement.innerHTML = "Time : " + String(self.time).padStart(5, ' ').InsertAt('.',3);
|
// self.timerElement.innerHTML = "Time : " + String(self.time).padStart(5, ' ').InsertAt('.',3);
|
||||||
|
@ -56,18 +72,31 @@ export class Timer {
|
||||||
}, 10);
|
}, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the time of the timer.
|
||||||
|
* @param {Number} time
|
||||||
|
*/
|
||||||
setTime(time) {
|
setTime(time) {
|
||||||
self.time = time;
|
self.time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {Number} The time of the timer.
|
||||||
|
*/
|
||||||
getTime() {
|
getTime() {
|
||||||
return self.time;
|
return self.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start the timer.
|
||||||
|
*/
|
||||||
start() {
|
start() {
|
||||||
self.timeRunning = true;
|
self.timeRunning = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop the timer.
|
||||||
|
*/
|
||||||
stop() {
|
stop() {
|
||||||
self.timeRunning = false;
|
self.timeRunning = false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue