private void Fill(int index, Vec target) { var tick = bots[index].Tick; if (!ToFill.ContainsKey(tick)) { ToFill[tick] = new List <Vec>(); } ToFill[tick].Add(target); AddCommand(bots[index], new Fill(new NearDifference(target - bots[index].Position))); filled[target] = true; oracle.Fill(target); }
protected override async StrategyTask <bool> Run() { var candidates = BuildCandidates(); while (candidates.Any()) { var candidatesAndPositions = OrderCandidates(candidates); var any = false; foreach (var(candidate, nearPosition) in candidatesAndPositions) { if (!await new FillVoxel(state, bot, candidate, nearPosition)) { continue; } oracle.Fill(candidate); any = true; candidates.Remove(candidate); foreach (var neighbor in candidate.GetMNeighbours(state.Matrix)) { if (state.TargetMatrix[neighbor] && !state.Matrix[neighbor]) { candidates.Add(neighbor); } } break; } if (!any) { throw new Exception("Can't move"); } } await new Move(state, bot, Vec.Zero); await Do(new Halt()); return(true); }
private void Fill(Vec target) { Commands.Add(new Fill(new NearDifference(target - pos))); state.Set(target, true); oracle.Fill(target); }
private void Fill(int bot, Vec target, List <ICommand> commands) { commands.Add(new Fill(new NearDifference(target - pos[bot]))); state.Set(target, true); oracle.Fill(target); }