summaryrefslogtreecommitdiff
path: root/src/world/world.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/world/world.js')
-rw-r--r--src/world/world.js19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/world/world.js b/src/world/world.js
new file mode 100644
index 0000000..c824e91
--- /dev/null
+++ b/src/world/world.js
@@ -0,0 +1,19 @@
+export function world_update(world, postprocess=[]) {
+ const lattice_props = lattice_update(world.lattice, world.lattice_rules);
+ const intermediate_lattice = lattice_apply(world.lattice, lattice_props);
+
+ const agent_props = world.agents
+ .map(a => agent_decide(world.lattice, agent, world.senses, world.actions))
+ .flat()
+ .reduce((acc, prop) => proposal_merge(acc, prop), [])
+ .filter(prop => lattice_valid(intermediate_lattice, prop))
+
+ const lattice = lattice_apply(intermediate_lattice, agent_props);
+ const agents = world.agents.map(a => agent_apply(a, agent_props));
+
+ const world = {...world, lattice, agents};
+ return postprocess.reduce(
+ (acc, f) => f(acc),
+ world
+ );
+}