Map modified + sprites
This commit is contained in:
@@ -8,25 +8,32 @@ const legend = {
|
||||
door: 4,
|
||||
button: 5,
|
||||
wall: 6,
|
||||
demiWall: 7,
|
||||
target: 8,
|
||||
ligthLaser: 9,
|
||||
target: 7,
|
||||
ligthLaser: 8,
|
||||
demiWallCornerUpLeft: 9,
|
||||
demiWallCornerUpRight: 10,
|
||||
demiWallCornerDownLeft: 11,
|
||||
demiWallCornerDownRight: 12
|
||||
}
|
||||
|
||||
// Grid test
|
||||
|
||||
let level1 = [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
]
|
||||
let levels = [
|
||||
[
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 11, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 0, 0, 4, 0, 10, 6, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 7, 6, 6, 5, 6, 0, 6, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 3, 0, 0, 0, 0, 12, 6, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 9, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
]
|
||||
];
|
||||
|
||||
let currentLevelIndex = 0;
|
||||
|
||||
// Function to save initial orientation of mirrors
|
||||
let laserDirection = { dx: 0, dy: 0 };
|
||||
@@ -74,9 +81,9 @@ function getLaserSegmentClass(segmentDirection) {
|
||||
|
||||
function initializeMirrorOrientations() {
|
||||
mirrorOrientations = {}; // Reset
|
||||
for (let y = 0; y < level1.length; y++) {
|
||||
for (let x = 0; x < level1[y].length; x++) {
|
||||
if (level1[y][x] === legend.mirror) {
|
||||
for (let y = 0; y < levels[currentLevelIndex].length; y++) {
|
||||
for (let x = 0; x < levels[currentLevelIndex][y].length; x++) {
|
||||
if (levels[currentLevelIndex][y][x] === legend.mirror) {
|
||||
mirrorOrientations[`${y},${x}`] = 0; // Default angle
|
||||
}
|
||||
}
|
||||
@@ -91,15 +98,15 @@ function loadGrid() {
|
||||
const mapDiv = document.getElementById("map"); // Div with map in DOM
|
||||
mapDiv.innerHTML = "";
|
||||
|
||||
for (let y = 0; y < level1.length; y++) {
|
||||
for (let y = 0; y < levels[currentLevelIndex].length; y++) {
|
||||
const lign = document.createElement("div");
|
||||
lign.classList.add("lign");
|
||||
|
||||
for (let x = 0; x < level1[y].length; x++) {
|
||||
for (let x = 0; x < levels[currentLevelIndex][y].length; x++) {
|
||||
const cell = document.createElement("div");
|
||||
cell.classList.add("cell");
|
||||
|
||||
switch (level1[y][x]) {
|
||||
switch (levels[currentLevelIndex][y][x]) {
|
||||
case legend.empty:
|
||||
cell.classList.add("empty");
|
||||
break;
|
||||
@@ -115,7 +122,11 @@ function loadGrid() {
|
||||
btnMirror.classList.add("btn-mirror");
|
||||
btnMirror.type = "button";
|
||||
btnMirror.style.transform = `rotate(${currentAngle}deg)`;
|
||||
btnMirror.style.width = "100%";
|
||||
const img = document.createElement("img");
|
||||
img.src = "../../assets/img/tiles/Mirror.svg";
|
||||
img.style.rotate = `${currentAngle}deg`;
|
||||
img.className = "mirror-img";
|
||||
btnMirror.appendChild(img);
|
||||
btnMirror.onmousedown = (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
@@ -146,6 +157,18 @@ function loadGrid() {
|
||||
const segmentDirection = laserSegments[`${y},${x}`];
|
||||
cell.classList.add(getLaserSegmentClass(segmentDirection));
|
||||
break;
|
||||
case legend.demiWallCornerUpLeft:
|
||||
cell.classList.add("demi-wall-corner-up-left");
|
||||
break;
|
||||
case legend.demiWallCornerUpRight:
|
||||
cell.classList.add("demi-wall-corner-up-right");
|
||||
break;
|
||||
case legend.demiWallCornerDownLeft:
|
||||
cell.classList.add("demi-wall-corner-down-left");
|
||||
break;
|
||||
case legend.demiWallCornerDownRight:
|
||||
cell.classList.add("demi-wall-corner-down-right");
|
||||
break;
|
||||
}
|
||||
|
||||
lign.appendChild(cell);
|
||||
@@ -162,7 +185,7 @@ loadGrid();
|
||||
function rotateMirror(x, y, isRightClick) {
|
||||
const coordKey = `${y},${x}`;
|
||||
|
||||
if (level1[y][x] !== legend.mirror) {
|
||||
if (levels[currentLevelIndex][y][x] !== legend.mirror) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -189,10 +212,10 @@ let isLevelFinished = false;
|
||||
function traceLaser() {
|
||||
// Reset light laser from previous trace
|
||||
laserSegments = {};
|
||||
for (let y = 0; y < level1.length; y++) {
|
||||
for (let x = 0; x < level1[y].length; x++) {
|
||||
if (level1[y][x] === legend.ligthLaser) {
|
||||
level1[y][x] = legend.empty;
|
||||
for (let y = 0; y < levels[currentLevelIndex].length; y++) {
|
||||
for (let x = 0; x < levels[currentLevelIndex][y].length; x++) {
|
||||
if (levels[currentLevelIndex][y][x] === legend.ligthLaser) {
|
||||
levels[currentLevelIndex][y][x] = legend.empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -201,9 +224,9 @@ function traceLaser() {
|
||||
let startLaserY;
|
||||
|
||||
// Search laser
|
||||
for (let y = 0; y < level1.length; y++) {
|
||||
for (let x = 0; x < level1[y].length; x++) {
|
||||
if (level1[y][x] === legend.laser) {
|
||||
for (let y = 0; y < levels[currentLevelIndex].length; y++) {
|
||||
for (let x = 0; x < levels[currentLevelIndex][y].length; x++) {
|
||||
if (levels[currentLevelIndex][y][x] === legend.laser) {
|
||||
startLaserX = x;
|
||||
startLaserY = y;
|
||||
laserDirection = { dx: 1, dy: 0 };
|
||||
@@ -231,12 +254,12 @@ function traceLaser() {
|
||||
currentY += laserDirection.dy;
|
||||
|
||||
// Out of bounds
|
||||
if (currentX < 0 || currentX >= level1[0].length || currentY < 0 || currentY >= level1.length) {
|
||||
if (currentX < 0 || currentX >= levels[currentLevelIndex][0].length || currentY < 0 || currentY >= levels[currentLevelIndex].length) {
|
||||
laserActive = false;
|
||||
break;
|
||||
}
|
||||
|
||||
const cellType = level1[currentY][currentX];
|
||||
const cellType = levels[currentLevelIndex][currentY][currentX];
|
||||
|
||||
switch (cellType) {
|
||||
case legend.laser:
|
||||
@@ -245,12 +268,12 @@ function traceLaser() {
|
||||
break;
|
||||
|
||||
case legend.empty:
|
||||
level1[currentY][currentX] = legend.ligthLaser;
|
||||
levels[currentLevelIndex][currentY][currentX] = legend.ligthLaser;
|
||||
laserSegments[`${currentY},${currentX}`] = { ...laserDirection };
|
||||
break;
|
||||
|
||||
case legend.target:
|
||||
level1[currentY][currentX] = legend.ligthLaser;
|
||||
levels[currentLevelIndex][currentY][currentX] = legend.ligthLaser;
|
||||
laserSegments[`${currentY},${currentX}`] = { ...laserDirection };
|
||||
laserActive = false;
|
||||
isLevelFinished = true;
|
||||
@@ -274,13 +297,26 @@ function traceLaser() {
|
||||
break;
|
||||
|
||||
case legend.button:
|
||||
level1[currentY][currentX] = legend.ligthLaser;
|
||||
levels[currentLevelIndex][currentY][currentX] = legend.ligthLaser;
|
||||
laserSegments[`${currentY},${currentX}`] = { ...laserDirection };
|
||||
laserActive = false;
|
||||
break;
|
||||
|
||||
case legend.demiWallCornerUpLeft:
|
||||
laserDirection = reflectLaser(laserDirection, 135);
|
||||
break;
|
||||
case legend.demiWallCornerUpRight:
|
||||
laserDirection = reflectLaser(laserDirection, 90);
|
||||
break;
|
||||
case legend.demiWallCornerDownLeft:
|
||||
laserDirection = reflectLaser(laserDirection, 135);
|
||||
break;
|
||||
case legend.demiWallCornerDownRight:
|
||||
laserDirection = reflectLaser(laserDirection, 45);
|
||||
break;
|
||||
|
||||
default:
|
||||
level1[currentY][currentX] = legend.ligthLaser;
|
||||
levels[currentLevelIndex][currentY][currentX] = legend.ligthLaser;
|
||||
laserSegments[`${currentY},${currentX}`] = { ...laserDirection };
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user