diff options
Diffstat (limited to 'src/world/world.js')
-rw-r--r-- | src/world/world.js | 47 |
1 files changed, 0 insertions, 47 deletions
diff --git a/src/world/world.js b/src/world/world.js deleted file mode 100644 index 63d974a..0000000 --- a/src/world/world.js +++ /dev/null @@ -1,47 +0,0 @@ -import { lattice_update, lattice_valid, lattice_apply } from './lattice.js'; -import { agent_decide, agent_apply } from './agent.js'; -import { proposal_merge } from './proposal.js'; - - -// world structure: -// { -// lattice -// lattice_rules: object -// agents: agent[] -// senses: sense[] -// actions: action[] -// validity: (function(proposal) => bool)[] -// } - - -export function world_update(world, postprocess=[]) { - const lattice_props = lattice_update(world.lattice, world.lattice_rules); - const intermediate_lattice = lattice_apply( - world.lattice.map(row => row.map(cell => ({ ...cell, flags: {} }))), - lattice_props - ); - - const decisions = world.agents - .map(a => agent_decide(world, a, world.senses, world.actions)) - .reduce( - ([agents, props], [agent, prop]) => [[...agents, agent], [...props, prop]], - [[], []] - ); - const intermediate_agents = decisions[0]; - const agent_props = world.validity.reduce( - (acc, rule) => acc.filter(prop => rule({...world, lattice: intermediate_lattice}, prop)), - 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 = intermediate_agents.map(a => agent_apply(a, agent_props)); - - const new_world = {...world, lattice, agents}; - return postprocess.reduce( - (acc, f) => f(acc), - new_world - ); -} |