37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
|
console.log("loading player system");
|
||
|
|
||
|
const renderPlayer = (entity) => {
|
||
|
entity.style.left = `${entity.dataset.posX}px`;
|
||
|
entity.style.top = `${entity.dataset.posY}px`;
|
||
|
};
|
||
|
|
||
|
const playerSystem = (engine) => {
|
||
|
const entity = document.getElementById("player");
|
||
|
engine("registerEntity", entity);
|
||
|
|
||
|
const movementRate = 0.5;
|
||
|
const move = (direction) => (delta, eventData) => {
|
||
|
let lastPos = [Number(entity.dataset.posX), Number(entity.dataset.posY)];
|
||
|
switch (direction) {
|
||
|
case "left":
|
||
|
entity.dataset.posX = Number(lastPos[0] - (movementRate * delta));
|
||
|
break;
|
||
|
case "right":
|
||
|
entity.dataset.posX = Number(lastPos[0] + (movementRate * delta));
|
||
|
break;
|
||
|
case "up":
|
||
|
entity.dataset.posY = Number(lastPos[1] - (movementRate * delta));
|
||
|
break;
|
||
|
case "down":
|
||
|
entity.dataset.posY = Number(lastPos[1] + (movementRate * delta));
|
||
|
break;
|
||
|
}
|
||
|
renderPlayer(entity);
|
||
|
};
|
||
|
|
||
|
engine("subscribeToEvent", "moveLeft", "movePlayerLeft", move("left"));
|
||
|
engine("subscribeToEvent", "moveRight", "movePlayerRight", move("right"));
|
||
|
engine("subscribeToEvent", "moveUp", "movePlayerUp", move("up"));
|
||
|
engine("subscribeToEvent", "moveDown", "movePlayerDown", move("down"));
|
||
|
};
|