From 78f2f5f4b1ccd58bbdef0d5e5d2dd026ac4ad668 Mon Sep 17 00:00:00 2001 From: sanine Date: Sat, 11 Nov 2023 13:58:56 -0600 Subject: add postprocessing rule to freeze agents --- src/simulation/postprocess.js | 18 ++++++++++++++++++ src/simulation/postprocess.test.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/simulation/postprocess.js create mode 100644 src/simulation/postprocess.test.js diff --git a/src/simulation/postprocess.js b/src/simulation/postprocess.js new file mode 100644 index 0000000..d50839e --- /dev/null +++ b/src/simulation/postprocess.js @@ -0,0 +1,18 @@ +'use strict'; + +export const postprocess = [ + (world) => ({ + ...world, + agents: world.agents.map(a => { + const {x, y} = a; + if ( + world.lattice[y][x].type === 'mutable' || + world.lattice[y][x].type === 'active' + ) { + return { ...a, flags: {...a.flags, frozen: true } }; + } else { + return a; + } + }), + }), +]; diff --git a/src/simulation/postprocess.test.js b/src/simulation/postprocess.test.js new file mode 100644 index 0000000..dc77c6a --- /dev/null +++ b/src/simulation/postprocess.test.js @@ -0,0 +1,37 @@ +'use strict'; + +import { world_update } from '../world/world.js'; +import { postprocess } from './postprocess.js'; + +test("agents freeze when finishing on a mutable or active", () => { + const agent = { + id: 1, + net: { compute: () => [[1], null] }, + state: null, + x: 0, y: 0, + flags: {}, + }; + + const lattice = [[{ type: 'empty', flags: {} }]]; + + const world = { + lattice, + lattice_rules: { empty: ()=>{}, active: ()=>{}, mutable: ()=>{} }, + agents: [agent], + senses: [], + actions: [], + validity: [], + }; + + expect(world_update(world, postprocess).agents[0]).toEqual(agent); + world.lattice[0][0].type = 'mutable'; + expect(world_update(world, postprocess).agents[0]).toEqual({ + ...agent, + flags: { frozen: true }, + }); + world.lattice[0][0].type = 'active'; + expect(world_update(world, postprocess).agents[0]).toEqual({ + ...agent, + flags: { frozen: true }, + }); +}); -- cgit v1.2.1