start developing collision handling

This commit is contained in:
sorrel 2024-05-22 12:21:10 -04:00
parent cc390c67b9
commit d28cbffd55
2 changed files with 74 additions and 6 deletions

53
static/collision.js Normal file
View file

@ -0,0 +1,53 @@
console.log("loading collision system");
const collisionShape = {
CIRCLE: {},
CAPSULE: {},
RECTANGLE: {}
};
const collision = (engine) => (
entity,
collisionData = {
layers: new Set(),
mask: new Set(),
shape: collisionShape.RECTANGLE
}) => {
const {layers, mask, shape} = collisionData;
// masking
return (message, ...messageArgs) => {
switch (message) {
case "checkCollision": {
console.log("checkingCollision");
Object.values(engine("components")
.collision
.instances)
.filter(collider => collider("mask", layers))
.forEach(toCheck => console.log(toCheck));
break;
}
case "mask": {
let [layersToCheck] = messageArgs;
let masking = false;
// console.log(entity);
// console.log("mask: ", mask);
// console.log("layersToCheck: ",layersToCheck);
for (layer in layersToCheck.values()) {
if (mask.has(layer)) {
masking = true;
break;
}
}
return masking;
}
};
};
};
const initCollisionSystem = (engine) => {
engine("registerComponentType", "collision", collision);
//
};

View file

@ -1,15 +1,26 @@
console.log("loading player system"); console.log("loading player system");
const collision = (entity) => {
// look through engine's collision components for overlap
};
const playerSystem = (engine) => { const playerSystem = (engine) => {
const entity = document.getElementById("player"); const entity = document.getElementById("player");
const movementRate = 0.5; const movementRate = 0.5;
engine("registerEntity", entity); engine("registerEntity", entity);
const playerTransform = engine ("getComponentContructor", "transform")(entity); const playerTransform = engine ("getComponentConstructor", "transform")(entity);
const playerCollision =
engine ("getComponentConstructor", "collision")(entity, {
layers: new Set(["player"]),
mask: new Set(["environment"]),
collisionShape: {
}
});
// const interactionCollision =
// engine ("getComponentConstructor", "collision") (entity, {
// layers: ["player"],
// mask: ["interactable"],
// collisionShape: {
// }
// });
const move = (direction) => (delta, eventData) => { const move = (direction) => (delta, eventData) => {
let translation = [0,0]; let translation = [0,0];
@ -28,10 +39,14 @@ const playerSystem = (engine) => {
break; break;
} }
playerTransform("translate", translation); playerTransform("translate", translation);
playerCollision("checkCollision");
// interactionCollision("checkCollision");
}; };
engine("registerEntity", entity); engine("registerEntity", entity);
engine("addComponent", entity, "transform", playerTransform); engine("addComponent", entity, "transform", playerTransform);
engine("addComponent", entity, "collision", playerCollision);
// engine("addComponent", entity, "collision", interactionCollision);
// engine("") // engine("")
engine("subscribeToEvent", "moveLeft", "movePlayerLeft", move("left")); engine("subscribeToEvent", "moveLeft", "movePlayerLeft", move("left"));
engine("subscribeToEvent", "moveRight", "movePlayerRight", move("right")); engine("subscribeToEvent", "moveRight", "movePlayerRight", move("right"));