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");
|
||||
|
||||
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"));
|
||||
|
|
Loading…
Reference in a new issue