diff --git a/static/debug.js b/static/debug.js new file mode 100644 index 0000000..f4af848 --- /dev/null +++ b/static/debug.js @@ -0,0 +1,9 @@ +const ptr = document.querySelectorAll ("#pointer") [0]; +const toggler = document.querySelectorAll("#toggle-engine")[0]; +const toggleEngine = () => engine("state") == "running" + ? engine("halt") + : engine("start"); +toggler.addEventListener("click", () => { + toggleEngine(); + toggler.dataset.state=engine("state"); +}); diff --git a/static/engine.js b/static/engine.js index b6ed952..c39c086 100644 --- a/static/engine.js +++ b/static/engine.js @@ -24,6 +24,7 @@ const initEvent = () => { const engine = (() => { let queue = []; let timer; + let state; let time = Date.now(); let entities = {}; let components = {}; @@ -42,6 +43,7 @@ const engine = (() => { }; const halt = () => { console.log("halted"); + state="halted"; clearTimeout(timer); }; return (message, ...messageArgs) => { @@ -68,15 +70,15 @@ const engine = (() => { } case "registerEntity": { let node = messageArgs[0]; - entities[node] = []; + entities[node.id] = []; break; } case "removeEntity": { let node = messageArgs[0]; - entities[node].forEach(([componentType, component]) => { + entities[node.id].forEach(([componentType, component]) => { delete components[componentType].instances[component]; }); - delete entities[node]; + delete entities[node.id]; queue.push((_) => node.remove()); break; } @@ -88,14 +90,14 @@ const engine = (() => { }; break; } - case "getComponentContructor": { + case "getComponentConstructor": { let [componentType] = messageArgs; - return components [componentType].constructor; + return components [componentType].constructor(engine); } case "addComponent": { let [entity, componentType, component] = messageArgs; - entities[entity].push([componentType, component]); - components[componentType].instances[entity] = component; + entities[entity.id].push([componentType, component]); + components[componentType].instances[entity.id] = component; break; } case "registerEvent": { @@ -110,9 +112,13 @@ const engine = (() => { break; } case 'start': { + state="running"; tick(); break; } + case 'state': { + return state; + } case 'halt': { halt(); break; @@ -121,8 +127,10 @@ const engine = (() => { }; })(); +initCollisionSystem (engine); initTransformSystem(engine); inputSystem(engine); playerSystem(engine); +initEnvironmentSystem (engine); engine("start"); diff --git a/static/environment.js b/static/environment.js new file mode 100644 index 0000000..3de24b3 --- /dev/null +++ b/static/environment.js @@ -0,0 +1,22 @@ +console.log("loading environment system"); + +const initEnvironmentSystem = (engine) => { + document.querySelectorAll(".environment") + .forEach(entity => { + console.log(entity); + if (!entity.id) { + entity.id = Date.now().toString(16); + } + engine("registerEntity", entity); + console.log(entity.dataset); + let collider = engine("getComponentConstructor", "collision")( + entity, { + layers: new Set(entity.dataset.collisionLayers.split(",")), + mask: new Set(entity.dataset.collisionMask.split(",")), + collsionShape: {} + }); + engine("addComponent", entity, "collision", collider); + }); + + +} diff --git a/static/index.html b/static/index.html index b5a0830..8887805 100644 --- a/static/index.html +++ b/static/index.html @@ -2,35 +2,89 @@
+ + + + -