diff options
Diffstat (limited to 'src/simulation/lattice_rules.js')
-rw-r--r-- | src/simulation/lattice_rules.js | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/src/simulation/lattice_rules.js b/src/simulation/lattice_rules.js deleted file mode 100644 index cc2fc5b..0000000 --- a/src/simulation/lattice_rules.js +++ /dev/null @@ -1,77 +0,0 @@ -import { pairs } from '../util.js'; -import { get_team } from './game.js'; - -function mod(k, n) { - return ((k % n) + n) % n; -} - -function pos_wrap(lattice, x, y) { - const height = lattice.length; - const width = lattice[0].length; - return [mod(x, width), mod(y, height)]; -} - - -function neighbors(lattice, x, y) { - const offsets = [-1, 0, 1]; - const positions = pairs(offsets, offsets) - .filter(([dx, dy]) => dx !== 0 || dy !== 0) - .map(([dx, dy]) => pos_wrap(lattice, x+dx, y+dy)); - const neighbors = positions - .map(([x, y]) => [x, y, lattice[y][x]]); - return neighbors; -} - - -export const lattice_rules = { - - empty: (lattice, x, y) => { - const num_active_neighbors = neighbors(lattice, x, y) - .map(([x, y, cell]) => cell.type) - .filter(type => type === 'mutable' || type === 'active') - .length; - if (num_active_neighbors === 3) { - return { world_updates: [{ - x, y, from: 'empty', to: 'active', - flags: { emit: [0, 0, 0, 0, 0, 0, 0, 1] }, - }]}; - } else { - return { world_updates: [{ - x, y, flags: { team: get_team(lattice.length, x, y) }, - }]}; - } - }, - - active: (lattice, x, y) => { - const num_active_neighbors = neighbors(lattice, x, y) - .map(([x, y, cell]) => cell.type) - .filter(type => type === 'mutable' || type === 'active') - .length; - const die = { world_updates: [{ - x, y, from: 'active', to: 'empty', - flags: { emit: [0, 0, 0, 0, 0, 0, 0, -1] }, - }]}; - if (num_active_neighbors < 2) { - return die; - } else if (num_active_neighbors > 3) { - return die; - } - }, - - mutable: (lattice, x, y) => { - const num_active_neighbors = neighbors(lattice, x, y) - .map(([x, y, cell]) => cell.type) - .filter(type => type === 'active') - .length; - if (num_active_neighbors > 0) { - // become living cell - return { world_updates: [{ - x, y, from: 'empty', to: 'active', - flags: { emit: [0, 0, 0, 0, 0, 0, 0, 1] }, - }]}; - } - }, - immutable: () => {}, - flag: () => {}, - -}; |