From 55b714abf83e01aa0ff513ad6ba4978f4b4da6cd Mon Sep 17 00:00:00 2001 From: sanine Date: Thu, 9 Nov 2023 16:46:33 -0600 Subject: add basic game of life lattice rules --- src/world/world.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/world/world.js') diff --git a/src/world/world.js b/src/world/world.js index c824e91..87d0aed 100644 --- a/src/world/world.js +++ b/src/world/world.js @@ -1,19 +1,30 @@ +import { lattice_update, lattice_valid, lattice_apply } from './lattice.js'; +import { agent_decide, agent_apply } from './agent.js'; +import { proposal_merge } from './proposal.js'; + + 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 + const decisions = world.agents .map(a => agent_decide(world.lattice, agent, world.senses, world.actions)) + .reduce( + ([agents, props], [agent, prop]) => [[...agents, agent], [...props, prop]], + [[], []] + ); + const intermediate_agents = decisions[0]; + const agent_props = decisions[1] .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 agents = intermediate_agents.map(a => agent_apply(a, agent_props)); - const world = {...world, lattice, agents}; + const new_world = {...world, lattice, agents}; return postprocess.reduce( (acc, f) => f(acc), - world + new_world ); } -- cgit v1.2.1