diff --git a/assets/css/style.css b/assets/css/style.css index e46a86b..fa1762a 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -363,6 +363,12 @@ button:hover { left: 0px } +.click-map { + position: absolute; + top: 0px; + left: 0px; +} + #on-screen-controller-button { background-color: #ededed; font-size: 16.9px; diff --git a/assets/img/empty2.png b/assets/img/empty2.png new file mode 100644 index 0000000..01b6a25 Binary files /dev/null and b/assets/img/empty2.png differ diff --git a/assets/js/app.js b/assets/js/app.js index e705ffc..65573ad 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -32,6 +32,8 @@ window.addEventListener("resize", function() { games.resize(); }) + + function renderRoom() { // render wall for (let i = 0; i < canvasOffset; i++) { diff --git a/assets/js/constants.js b/assets/js/constants.js index f4107c0..c485fef 100644 --- a/assets/js/constants.js +++ b/assets/js/constants.js @@ -11,6 +11,19 @@ var boundaries = [ [6, 5] ] +var boundaryMap = { + "23": [2, 4], + "33": [3, 4], + "43": [4, 4], + "53": [5, 4], + //guitar + "17": [1, 6], + "07": [0, 6], + //maomao + "65": [6, 4] + +} + var computerInteractionZones = [ [2, 4], [3, 4] diff --git a/assets/js/dialog.js b/assets/js/dialog.js index 63ba4d5..fc6f079 100644 --- a/assets/js/dialog.js +++ b/assets/js/dialog.js @@ -8,7 +8,7 @@ class Dialog { this.dialogOrder = ['resume'] this.dialogMap = { - 'resume': 'Hello! Welcome to my Interactive Portfolio!

Controls:

ENTER: Close this Dialog, Interact with things on screen
Arrow Keys: Movement (WASD or VIM keys also work)

Walk over to my resume and click ENTER', + 'resume': 'Hello! Welcome to my Interactive Portfolio!

Controls:

Enter: Close this Dialog, Interact with things on screen
Arrow Keys: Movement (WASD or VIM keys also work)
Click: Click anywhere to move or interact with what you see.

Walk over to my resume and click ENTER', 'controls': 'Use ARROW KEYS or WASD or VIM keys (HJKL) to move around.
Press the ENTER key to interact with what you see on the screen.

', // 'resume': 'Walk over to the DESK and click on my RESUME.
The RESUME is marked by the flashing red indicator light.

', 'portfolio': 'Thanks for looking at my Resume!
Check out my PORTFOLIO by clicking on the BOOKSHELF.
', diff --git a/assets/js/pathfinder.js b/assets/js/pathfinder.js index d421c66..83451cc 100644 --- a/assets/js/pathfinder.js +++ b/assets/js/pathfinder.js @@ -1,7 +1,7 @@ const timer = ms => new Promise(res => setTimeout(res, ms)) -var cols = 8 -var rows = 8 +var cols = 9 +var rows = 9 let grid = new Array(cols); @@ -12,6 +12,29 @@ let start; let end; let path = []; + +function generateClickMap() { + var clickMap = document.getElementById('click-map') + for (let i = 0; i < rows; i++) { + for (let j = 0; j < cols; j++) { + var area = document.createElement('area') + area.shape = 'rect' + area.href = '#' + area.addEventListener('click', function (event) { + if (j > 7) { + pathfind(i, j - 1) + } else { + pathfind(i, j) + } + }) + area.coords = `${i * spriteSize},${j * spriteSize},${(i + 1) * spriteSize},${(j + 1) * spriteSize}` + clickMap.appendChild(area) + } + } +} + +generateClickMap() + function heuristic(position0, position1) { let d1 = Math.abs(position1.x - position0.x); let d2 = Math.abs(position1.y - position0.y); @@ -20,17 +43,18 @@ function heuristic(position0, position1) { } -function GridPoint(x, y) { - this.x = x; - this.y = y; - this.f = 0; - this.g = 0; - this.h = 0; - this.neighbors = []; - this.parent = undefined; +class GridPoint { + constructor(x, y) { + this.x = x; + this.y = y; + this.f = 0; + this.g = 0; + this.h = 0; + this.neighbors = []; + this.parent = undefined; + } - - this.updateNeighbors = function(grid) { + updateNeighbors(grid) { let i = this.x; let j = this.y; var tmpNeighbor; @@ -84,8 +108,6 @@ function init(destX, destY) { end = grid[destX][destY] openSet.push(start); - - console.log(grid); } @@ -144,21 +166,67 @@ function search(destX, destY) { } async function pathfind(destX, destY) { + + var isBoundary = player.isBoundary([destX, destY]) + + if (isBoundary) { + var tmpDestX = destX + var tmpDestY = destY + var newDest = boundaryMap[String(destX) + String(destY)] + destX = newDest[0] + destY = newDest[1] + } + var newPath = search(destX, destY) for (let i = 0; i < newPath.length; i++) { - if (newPath[i].x > player.canvasX) { + changeDir(newPath[i].x, newPath[i].y) + + player.canvasX = newPath[i].x + player.canvasY = newPath[i].y + + if (isBoundary && i === newPath.length - 1) { + changeDir(tmpDestX, tmpDestY) + } + await timer(100) + } + + if (destX === 0 && destY === 0 || destX === 1 && destY === 0) { + player.direction = 'up' + portfolio.show() + } + + if (destX === 7 && destY === 0 || destX === 8 && destY === 0) { + player.direction = 'up' + games.show() + } + + if (destX === 2 && destY === 4 || destX === 3 && destY === 4) { + player.direction = 'up' + terminal.show() + } + + if (destX === 4 && destY === 4) { + player.direction = 'up' + resume.show() + } + + if (destX === 0 && destY === 6 || destX === 1 && destY === 6) { + player.direction = 'down' + music.show() + } + +} + +function changeDir(destX, destY) { + if (destX > player.canvasX) { player.direction = 'right' - } else if (newPath[i].x < player.canvasX) { + } else if (destX < player.canvasX) { player.direction = 'left' } - if (newPath[i].y > player.canvasY) { + if (destY > player.canvasY) { player.direction = 'down' - } else if (newPath[i].y < player.canvasY) { + } else if (destY < player.canvasY) { player.direction = 'up' } - player.canvasX = newPath[i].x - player.canvasY = newPath[i].y - await timer(100) - } } diff --git a/assets/js/terminal.js b/assets/js/terminal.js index f6d5601..cb6ef29 100644 --- a/assets/js/terminal.js +++ b/assets/js/terminal.js @@ -23,6 +23,13 @@ class Terminal { } } terminalMode = true; + + var self = this; + document.addEventListener('keydown', function(event) { + if (event.key === 'Escape') { + self.hide() + } + }) } hide () { diff --git a/assets/js/window.js b/assets/js/window.js index 7426a8b..7e6c574 100644 --- a/assets/js/window.js +++ b/assets/js/window.js @@ -7,6 +7,12 @@ class Window { show() { this.resize() this.container.style.display = 'block' + var self = this; + document.addEventListener('keydown', function(event) { + if (event.key === 'Escape') { + self.hide() + } + }) } hide() { diff --git a/index.html b/index.html index f9d6b81..12fc185 100644 --- a/index.html +++ b/index.html @@ -58,6 +58,86 @@
PRESS ENTER
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +