start developing collision handling
This commit is contained in:
parent
cc390c67b9
commit
d28cbffd55
2 changed files with 74 additions and 6 deletions
53
static/collision.js
Normal file
53
static/collision.js
Normal 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);
|
||||||
|
//
|
||||||
|
};
|
|
@ -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"));
|
||||||
|
|
Loading…
Reference in a new issue