CSY1018-assignment-2/scripts/control.js

120 lines
3.4 KiB
JavaScript
Raw Permalink Normal View History

2022-04-28 15:49:09 +00:00
/* player movement logic */
2022-04-29 11:20:27 +00:00
var currentKey = 0;
var lastKey = 0;
var lives = 3;
2022-04-28 15:49:09 +00:00
function setVars() {
let player = document.getElementById("player");
}
document.onloadend = setVars;
2022-04-29 09:56:51 +00:00
/*Controls vertical movement*/
2022-04-28 15:49:09 +00:00
function verticalMovement(keyCode) {
var playerLeft = player.offsetLeft;
var playerTop = player.offsetTop;
switch(keyCode) {
case 38: /*Up*/
case 87: /*W*/
2022-04-28 16:58:53 +00:00
var element = document.elementFromPoint(playerLeft, playerTop-5);
2022-04-28 15:49:09 +00:00
if (element.classList.contains("sky") == false) { /*change to only trigger when not grass*/
2022-04-28 16:58:53 +00:00
player.style.top = (playerTop - 5) + "px";
2022-04-28 15:49:09 +00:00
}
player.className = "character walk up";
console.log("Up");
break;
case 40: /*Down*/
case 83: /*S*/
2022-04-28 16:58:53 +00:00
var element = document.elementFromPoint(playerLeft, playerTop+5);
2022-04-28 15:49:09 +00:00
if (element.classList.contains("sky") == false) {
2022-04-28 16:58:53 +00:00
player.style.top = (playerTop + 5) + "px";
2022-04-28 15:49:09 +00:00
}
player.className = "character walk down";
console.log("Down");
break;
}
}
2022-04-29 09:56:51 +00:00
/*Controls horizontal movement*/
2022-04-28 15:49:09 +00:00
function horizontalMovement(keyCode) {
var playerLeft = player.offsetLeft;
var playerTop = player.offsetTop;
switch(keyCode) {
case 37: /*Left*/
case 65: /*A*/
2022-04-28 16:58:53 +00:00
var element = document.elementFromPoint(playerLeft-5, playerTop);
2022-04-28 15:49:09 +00:00
if (element.classList.contains("sky") == false) {
2022-04-28 16:58:53 +00:00
player.style.left = (playerLeft - 5) + "px";
2022-04-28 15:49:09 +00:00
}
player.className = "character walk left";
console.log("Left");
break;
case 39: /*Right*/
case 68: /*D*/
2022-04-28 16:58:53 +00:00
var element = document.elementFromPoint(playerLeft+5, playerTop);
2022-04-28 15:49:09 +00:00
if (element.classList.contains("sky") == false) {
2022-04-28 16:58:53 +00:00
player.style.left = (playerLeft + 5) + "px";
2022-04-28 15:49:09 +00:00
}
player.className = "character walk right";
console.log("Right");
break;
}
}
2022-04-29 09:56:51 +00:00
/*Controls movement interval*/
2022-04-28 16:58:53 +00:00
function move() {
if (currentKey == 0) {
verticalMovement(lastKey);
horizontalMovement(lastKey);
if (lastKey != 0) {
currentKey = lastKey;
}
}
else {
verticalMovement(currentKey);
horizontalMovement(currentKey);
}
}
2022-04-29 09:56:51 +00:00
/*Gets triggered keystroke*/
2022-04-28 16:58:53 +00:00
function getKey(event) {
lastKey = currentKey;
currentKey = event.keyCode;
2022-04-28 15:49:09 +00:00
}
2022-04-29 09:56:51 +00:00
/*Identifies if no keys are pressed*/
2022-04-28 15:49:09 +00:00
function stop(event) {
2022-04-28 16:58:53 +00:00
if (currentKey == lastKey) {
currentKey = 0;
lastKey = 0;
}
else if (event.keyCode == currentKey) {
currentKey = 0;
}
else if (event.keyCode == lastKey) {
lastKey = 0;
}
2022-04-28 15:49:09 +00:00
if (!player.classList.contains("dead")) {
switch(event.keyCode) {
case 38: /*Up*/
case 87: /*W*/
player.className = "character stand up";
break;
case 40: /*Down*/
case 83: /*S*/
player.className = "character stand down";
break;
case 37: /*Left*/
case 65: /*A*/
player.className = "character stand left";
break;
case 39: /*Right*/
case 68: /*D*/
player.className = "character stand right";
break;
}
2022-04-28 15:49:09 +00:00
}
2022-04-28 16:58:53 +00:00
}