public void ChildUpdatedItsState(Waterling pChild, WaterlingState pState) { if (Underlings.All(u => u.State == WaterlingState.WalkedIntoAWall)) { State = WaterlingState.FillAndClimb; } }
public void SpawnUnderling(Point pAt, WaterlingState pJob) { var underling = new Waterling() { Position = pAt, State = pJob, Parent = this }; Underlings.Add(underling); waterlings.Add(underling); }
public static void Run() { var lines = File.ReadAllLines("input.txt"); display = new Point(1, 1); camera = new Rectangle(400, 1880, 120, 40); round = 0; instructions = new List <Instruction>(); inputParseRegex = new Regex(@"[x|y]=(?<slice>\d+), [x|y]=(?<range_start>\d+)\.\.(?<range_end>\d+)"); LoadResources(); Parse(lines); LoadInstructions(); bool play = false; bool render = false; bool fastforward = true; int? fastforwardTo = null; rootWaterling = new Waterling() { Position = new Point(500, 6) }; waterlings = new List <Waterling>() { rootWaterling }; // LoadMap(); // Console.ReadKey(true); while (running) { round++; if (fastforwardTo.HasValue && round < fastforwardTo.Value) { } else { if (render) { RenderView(); Console.SetCursorPosition(display.X + 2, display.Y + camera.Height - 2); Console.Write("Round: " + round); Console.Write(", IsInfinite: " + rootWaterling.IsInfinite); } if (play) { Thread.Sleep(200); } else if (!fastforward) { bool letGo = false; while (!letGo) { var key = Console.ReadKey(true); if (key.Key == ConsoleKey.Escape) { return; } if (key.Key == ConsoleKey.RightArrow) { camera.X += camera.Width; } if (key.Key == ConsoleKey.LeftArrow) { camera.X -= camera.Width; } if (key.Key == ConsoleKey.UpArrow) { camera.Y -= camera.Height; } if (key.Key == ConsoleKey.DownArrow) { camera.Y += camera.Height; } if (key.Key == ConsoleKey.Enter) { letGo = true; } if (render) { RenderView(); } } } } RunWaterlings(); if (waterlings.All(w => w.Done)) { running = false; RenderView(); var sumWater = 0; var sumWetSand = 0; for (int i = 0; i < map.Length; i++) { sumWater += map[i] == entitiesByEnum[EntityEnum.Water].Id ? 1 : 0; sumWetSand += map[i] == entitiesByEnum[EntityEnum.WetSand].Id ? 1 : 0; } Console.ReadKey(true); Console.Clear(); Console.WriteLine("Part01: " + (sumWater + sumWetSand)); Console.WriteLine("Part02: " + sumWater); } } Console.SetCursorPosition(0, 20); }