2024-05-19 04:37:53 +00:00
|
|
|
console.log("loading player system");
|
|
|
|
|
|
|
|
const renderPlayer = (entity) => {
|
2024-05-19 22:07:43 +00:00
|
|
|
entity.style.transform = `matrix(${entity.dataset.transform.replace(/\[|\]/g,'')})`;
|
|
|
|
// entity.style.left = `${entity.dataset.posX}px`;
|
|
|
|
// entity.style.top = `${entity.dataset.posY}px`;
|
|
|
|
};
|
|
|
|
|
|
|
|
const setEntityStyleFromTransform = (entity) => {
|
|
|
|
entity.style.transform = `matrix(${entity.dataset.transform.replace(/\[|\]/g,'')})`;
|
|
|
|
};
|
|
|
|
|
|
|
|
const transform =
|
|
|
|
(entity,
|
|
|
|
transformData = { x: {x: 1, y:0}, y: {x:0, y:1}, o: {x:0,y:0}}
|
|
|
|
) => {
|
|
|
|
let {x, y, o} = transformData;
|
|
|
|
let transform = [x.x, x.y, y.x, y.y, o.x, o.y];
|
|
|
|
const updateEntity = () => {
|
|
|
|
entity.dataset.transform = JSON.stringify (transform);
|
|
|
|
};
|
|
|
|
const renderEntity = () => setEntityStyleFromTransform (entity);
|
|
|
|
|
|
|
|
return (message, ...messageArgs) => {
|
|
|
|
switch (message) {
|
|
|
|
case "origin": {
|
|
|
|
return [transform[4], transform[5]];
|
|
|
|
}
|
|
|
|
case "x": {
|
|
|
|
return [transform[0], transform[1]];
|
|
|
|
}
|
|
|
|
case "y": {
|
|
|
|
return [transform[2], transform [3]];
|
|
|
|
}
|
|
|
|
case "translate": {
|
|
|
|
let [xTranslation, yTranslation] = messageArgs [0];
|
|
|
|
transform [4] += xTranslation;
|
|
|
|
transform [5] += yTranslation;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
updateEntity ();
|
|
|
|
renderEntity ();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
// transform needs to actually provide transformation utilities
|
|
|
|
|
|
|
|
const collision = (entity) => {
|
|
|
|
// look through engine's collision components for overlap
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
const initTransformSystem = (engine) => {
|
|
|
|
engine("registerComponentType", "transform");
|
2024-05-19 04:37:53 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const playerSystem = (engine) => {
|
|
|
|
const entity = document.getElementById("player");
|
|
|
|
engine("registerEntity", entity);
|
2024-05-19 22:07:43 +00:00
|
|
|
let playerTransform = transform(entity);
|
2024-05-19 04:37:53 +00:00
|
|
|
|
|
|
|
const movementRate = 0.5;
|
|
|
|
const move = (direction) => (delta, eventData) => {
|
2024-05-19 22:07:43 +00:00
|
|
|
let translation = [0,0];
|
2024-05-19 04:37:53 +00:00
|
|
|
switch (direction) {
|
|
|
|
case "left":
|
2024-05-19 22:07:43 +00:00
|
|
|
translation [0] = -( movementRate * delta );
|
2024-05-19 04:37:53 +00:00
|
|
|
break;
|
|
|
|
case "right":
|
2024-05-19 22:07:43 +00:00
|
|
|
translation[0] = movementRate * delta;
|
2024-05-19 04:37:53 +00:00
|
|
|
break;
|
|
|
|
case "up":
|
2024-05-19 22:07:43 +00:00
|
|
|
translation[1] = - ( movementRate * delta );
|
2024-05-19 04:37:53 +00:00
|
|
|
break;
|
|
|
|
case "down":
|
2024-05-19 22:07:43 +00:00
|
|
|
translation[1] = movementRate * delta;
|
2024-05-19 04:37:53 +00:00
|
|
|
break;
|
|
|
|
}
|
2024-05-19 22:07:43 +00:00
|
|
|
playerTransform("translate", translation);
|
2024-05-19 04:37:53 +00:00
|
|
|
};
|
|
|
|
|
2024-05-19 22:07:43 +00:00
|
|
|
engine("registerEntity", entity);
|
|
|
|
engine("addComponent", entity, "transform", playerTransform);
|
|
|
|
// engine("")
|
2024-05-19 04:37:53 +00:00
|
|
|
engine("subscribeToEvent", "moveLeft", "movePlayerLeft", move("left"));
|
|
|
|
engine("subscribeToEvent", "moveRight", "movePlayerRight", move("right"));
|
|
|
|
engine("subscribeToEvent", "moveUp", "movePlayerUp", move("up"));
|
|
|
|
engine("subscribeToEvent", "moveDown", "movePlayerDown", move("down"));
|
|
|
|
};
|