54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
|
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);
|
||
|
//
|
||
|
};
|