From 2d2365e606c530bd113cb04b83465a5c0b9a537e Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 7 Jul 2018 21:42:07 +0200 Subject: [PATCH] Fix Simulation Reset not Replicating the Starting Pattern Now keeps the original parameters for the first pattern of a grid stored and can replicate them reliably. --- lib/src/Grid.dart | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/lib/src/Grid.dart b/lib/src/Grid.dart index c03b413..c35bd16 100644 --- a/lib/src/Grid.dart +++ b/lib/src/Grid.dart @@ -12,6 +12,12 @@ class Grid { final List> map; bool _dirty = true; + int _startingSeed; + int _x; + int _y; + int _amount; + int _dispersal; + Pattern _pattern; Grid(int w, int h) : this.w = w, @@ -22,9 +28,21 @@ class Grid { print("Grid creation finished"); } - void startingPattern( - {Pattern pattern, int x, int y, int amount, int dispersal}) { - math.Random rng = new math.Random(); + void reset() { + map.setAll(0, _buildGrid(w, h)); + if(_startingSeed != null) addPattern(pattern: _pattern, dispersal: _dispersal,amount: _amount,seed: _startingSeed, x: _x, y: _y); + _dirty = true; + } + + void addPattern( + {Pattern pattern, int x, int y, int amount, int dispersal, int seed}) { + _startingSeed = seed ?? DateTime.now().millisecondsSinceEpoch; + math.Random rng = new math.Random(_startingSeed); + _x = x; + _y = y; + _amount = amount ?? rng.nextInt(20); + _dispersal = dispersal ?? 10; + _pattern = pattern; int cx = x ?? rng.nextInt(w ~/ 3) + (w ~/ 3); int cy = y ?? rng.nextInt(h ~/ 3) + (h ~/ 3); switch (pattern) { @@ -54,9 +72,14 @@ class Grid { setCellState(0 + cx, 2 + cy, true); break; default: - for (var i = 0; i < amount ?? rng.nextInt(20); i++) { - setCellState(cx + dispersal ?? rng.nextInt(10), - cy + dispersal ?? rng.nextInt(10), true); + int sanityCheck = 0; + for (var i = 0; i < (_amount); i++) { + sanityCheck++; + getCellState(cx, cy) + ? i-- + : setCellState(cx + rng.nextInt(_dispersal), + cy + rng.nextInt(_dispersal), true); + if (sanityCheck > 100 && sanityCheck > i*3) break; } break; }