diff --git a/static/engine.js b/static/engine.js
index 24efc59..b6ed952 100644
--- a/static/engine.js
+++ b/static/engine.js
@@ -74,21 +74,28 @@ const engine = (() => {
case "removeEntity": {
let node = messageArgs[0];
entities[node].forEach(([componentType, component]) => {
- components[componentType].remove(component);
+ delete components[componentType].instances[component];
});
delete entities[node];
queue.push((_) => node.remove());
break;
}
case "registerComponentType": {
- let componentType = messageArgs[0];
- components[componentType] = new Set();
+ let [componentType, constructor] = messageArgs;
+ components[componentType] = {
+ constructor,
+ instances: {}
+ };
break;
}
+ case "getComponentContructor": {
+ let [componentType] = messageArgs;
+ return components [componentType].constructor;
+ }
case "addComponent": {
let [entity, componentType, component] = messageArgs;
entities[entity].push([componentType, component]);
- components[componentType].add(component);
+ components[componentType].instances[entity] = component;
break;
}
case "registerEvent": {
diff --git a/static/index.html b/static/index.html
index 07e9d78..b5a0830 100644
--- a/static/index.html
+++ b/static/index.html
@@ -1,35 +1,56 @@
+
-
+
+ style="position:absolute;width:50px;height:50px;
+ background-color:rgba(50,0,127,0.7);"
+ >
+
-
+
+
+
diff --git a/static/input.js b/static/input.js
index 1397b68..4e2a69e 100644
--- a/static/input.js
+++ b/static/input.js
@@ -29,12 +29,16 @@ const inputSystem = (engine) => {
};
document.addEventListener('keydown', (event) => {
+ event.preventDefault();
currentPresses.add(event.key);
+ event.stopPropagation();
process();
});
document.addEventListener('keyup', (event) => {
+ event.preventDefault();
currentPresses.delete(event.key);
+ event.stopPropagation();
process();
});
diff --git a/static/player.js b/static/player.js
index eee9302..b03cfec 100644
--- a/static/player.js
+++ b/static/player.js
@@ -1,66 +1,16 @@
console.log("loading player system");
-const renderPlayer = (entity) => {
- entity.style.transform = `matrix(${entity.dataset.transform.replace(/\[|\]/g,'')})`;
- // entity.style.left = `${entity.dataset.posX}px`;
- // entity.style.top = `${entity.dataset.posY}px`;
-};
-
-const setEntityStyleFromTransform = (entity) => {
- entity.style.transform = `matrix(${entity.dataset.transform.replace(/\[|\]/g,'')})`;
-};
-
-const transform =
- (entity,
- transformData = { x: {x: 1, y:0}, y: {x:0, y:1}, o: {x:0,y:0}}
- ) => {
- let {x, y, o} = transformData;
- let transform = [x.x, x.y, y.x, y.y, o.x, o.y];
- const updateEntity = () => {
- entity.dataset.transform = JSON.stringify (transform);
- };
- const renderEntity = () => setEntityStyleFromTransform (entity);
-
- return (message, ...messageArgs) => {
- switch (message) {
- case "origin": {
- return [transform[4], transform[5]];
- }
- case "x": {
- return [transform[0], transform[1]];
- }
- case "y": {
- return [transform[2], transform [3]];
- }
- case "translate": {
- let [xTranslation, yTranslation] = messageArgs [0];
- transform [4] += xTranslation;
- transform [5] += yTranslation;
- break;
- }
- }
- updateEntity ();
- renderEntity ();
- };
-};
-
-// transform needs to actually provide transformation utilities
-
const collision = (entity) => {
// look through engine's collision components for overlap
};
-const initTransformSystem = (engine) => {
- engine("registerComponentType", "transform");
-};
-
const playerSystem = (engine) => {
const entity = document.getElementById("player");
- engine("registerEntity", entity);
- let playerTransform = transform(entity);
-
const movementRate = 0.5;
+ engine("registerEntity", entity);
+ const playerTransform = engine ("getComponentContructor", "transform")(entity);
+
const move = (direction) => (delta, eventData) => {
let translation = [0,0];
switch (direction) {
diff --git a/static/transform.js b/static/transform.js
new file mode 100644
index 0000000..f05f14f
--- /dev/null
+++ b/static/transform.js
@@ -0,0 +1,48 @@
+console.log("loading transform system");
+
+const transform =
+ (entity,
+ transformData = { x: {x: 1, y:0}, y: {x:0, y:1}, o: {x:0,y:0}}
+ ) => {
+ let {x, y, o} = transformData;
+ let transform = [x.x, x.y, y.x, y.y, o.x, o.y];
+ const updateEntity = () => {
+ entity.dataset.transform = JSON.stringify (transform);
+ };
+
+ // these may be pulled out in the future into a separate renderer
+ const setEntityStyleFromTransform = (entity) => {
+ entity.style.transform =
+ `matrix(${entity.dataset.transform.replace(/\[|\]/g,'')})`;
+ };
+ const renderEntity = () => setEntityStyleFromTransform (entity);
+
+ return (message, ...messageArgs) => {
+ switch (message) {
+ case "origin": {
+ return [transform[4], transform[5]];
+ }
+ case "x": {
+ return [transform[0], transform[1]];
+ }
+ case "y": {
+ return [transform[2], transform [3]];
+ }
+ case "translate": {
+ let [xTranslation, yTranslation] = messageArgs [0];
+ transform [4] += xTranslation;
+ transform [5] += yTranslation;
+ break;
+ }
+ }
+ updateEntity ();
+ renderEntity ();
+ };
+};
+
+const initTransformSystem = (engine) => {
+ engine("registerComponentType", "transform", transform);
+};
+
+
+// transform needs to actually provide transformation utilities