void ScoutEffect(int q, int r, CubeScout scout) { Vector2Int curr = new Vector2Int(scout.Q, scout.R); Vector2Int next = new Vector2Int(q, r); if (structureStore.HasStructure(next[0], next[1])) { boardState.AddNode(q, r, scout.GetPlayer(), scout.GetDamage()); } else { boardState.AddNode(q, r, scout.GetPlayer(), scout.GetInfluence()); } if (scoutPos.ContainsKey(next)) { RemoveScout(scout, curr); RemoveScout(scoutPos[next], next); } else if (structureStore.HasStructure(next[0], next[1]) && structureStore.GetStructure(next[0], next[1]).GetPlayer() != scout.GetPlayer()) { RemoveScout(scout, curr); } else { scoutPos.Remove(curr); scout.SetCoords(next[0], next[1]); scoutPos[next] = scout; } scout.DecMoves(); if (scout.GetMoves() <= 0) { RemoveScout(scout, next); } }
void Bombard(int q, int r, Pentagon pentagon) { Vector2Int target = new Vector2Int(q, r); HashSet <Vector2Int> visited = new HashSet <Vector2Int>(); visited.Add(target); Queue <Vector3Int> queue = new Queue <Vector3Int>(); queue.Enqueue(new Vector3Int(target[0], target[1], 0)); while (queue.Count > 0) { Vector3Int curr = queue.Dequeue(); boardState.AddNode(curr[0], curr[1], pentagon.Player, pentagon.GetBombStrength() / (1 + curr[2])); if (curr[2] < pentagon.GetBombRadius()) { List <Vector2Int> neighbors = boardState.GetNeighbors(curr[0], curr[1]); foreach (var n in neighbors) { if (!visited.Contains(n)) { visited.Add(n); queue.Enqueue(new Vector3Int(n[0], n[1], curr[2] + 1)); } } } } }