From d28cbffd559cc7e4d59454e1c9063191c7f1e664 Mon Sep 17 00:00:00 2001 From: oxaliq Date: Wed, 22 May 2024 12:21:10 -0400 Subject: [PATCH] start developing collision handling --- static/collision.js | 53 +++++++++++++++++++++++++++++++++++++++++++++ static/player.js | 27 ++++++++++++++++++----- 2 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 static/collision.js diff --git a/static/collision.js b/static/collision.js new file mode 100644 index 0000000..1949115 --- /dev/null +++ b/static/collision.js @@ -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); + // +}; diff --git a/static/player.js b/static/player.js index b03cfec..e213b7b 100644 --- a/static/player.js +++ b/static/player.js @@ -1,15 +1,26 @@ console.log("loading player system"); -const collision = (entity) => { - // look through engine's collision components for overlap - -}; - const playerSystem = (engine) => { const entity = document.getElementById("player"); const movementRate = 0.5; 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) => { let translation = [0,0]; @@ -28,10 +39,14 @@ const playerSystem = (engine) => { break; } playerTransform("translate", translation); + playerCollision("checkCollision"); + // interactionCollision("checkCollision"); }; engine("registerEntity", entity); engine("addComponent", entity, "transform", playerTransform); + engine("addComponent", entity, "collision", playerCollision); + // engine("addComponent", entity, "collision", interactionCollision); // engine("") engine("subscribeToEvent", "moveLeft", "movePlayerLeft", move("left")); engine("subscribeToEvent", "moveRight", "movePlayerRight", move("right"));