internal List <RoadCtrl> OwnedAdjacentRoadsNotCounted(List <RoadCtrl> owned, RoadCtrl blockedFork, out bool adjacentFork) { List <RoadCtrl> list = new List <RoadCtrl>(); foreach (RoadCtrl r in AdjacentRoads) { if (r.IsOwned && r.Color == this.Color) { if (r.AdjacentSettlements[0].Color != this.Color && r.AdjacentSettlements[0].SettlementType != SettlementType.None) { continue; } if (r.AdjacentSettlements[1].Color != this.Color && r.AdjacentSettlements[1].SettlementType != SettlementType.None) { continue; } if (owned.Contains(r) == false) { list.Add(r); } } } adjacentFork = false; if (list.Contains(blockedFork)) { list.Remove(blockedFork); adjacentFork = true; } return(list); }
public LogRoadUpdate(int gameIndex, RoadCtrl road, RoadState oldState, RoadState newState) { OldRoadState = oldState; Road = road; Index = road.Index; NewRoadState = newState; GameIndex = gameIndex; }
internal void RemoveRoad(RoadCtrl road) { _data.GameData.Roads.Remove(road); RoadsPlayed--; }
internal void AddRoad(RoadCtrl road) { _data.GameData.Roads.Add(road); RoadsPlayed++; }
public static UpdateRoadModel SetRoadState(MainPage page, RoadCtrl road, RoadState newState, RoadRaceTracking raceTracker) { RoadState oldState = road.RoadState; if (newState == oldState) { throw new Exception("Why are you updating the road state to be the same state it already is?"); } UpdateRoadModel model = new UpdateRoadModel() { Page = page, Player = page.CurrentPlayer, PlayerIndex = page.CurrentPlayer.AllPlayerIndex, PlayerName = page.CurrentPlayer.PlayerName, OldState = page.NewGameState, Action = CatanAction.UpdatedRoadState, RoadIndex = road.Index, OldRoadState = road.RoadState, NewRoadState = newState, GameIndex = page.GameContainer.CurrentGame.Index, OldRaceTracking = raceTracker }; road.RoadState = newState; switch (newState) { case RoadState.Unowned: if (oldState == RoadState.Ship) { model.Player.GameData.Ships.Remove(road); } else { model.Player.GameData.Roads.Remove(road); } road.Owner = null; road.Number = -1; break; case RoadState.Road: road.Number = model.Player.GameData.Roads.Count; // undo-able model.Player.GameData.Roads.Add(road); road.Owner = model.Player; break; case RoadState.Ship: model.Player.GameData.Roads.Remove(road); // can't be a ship if you aren't a road model.Player.GameData.Ships.Add(road); break; default: break; } string raceTrackCopy = JsonSerializer.Serialize <RoadRaceTracking>(raceTracker); RoadRaceTracking newRaceTracker = JsonSerializer.Deserialize <RoadRaceTracking>(raceTrackCopy); //await AddLogEntry(CurrentPlayer, GameState, CatanAction.UpdatedRoadState, true, logType, road.Number, new LogRoadUpdate(_gameView.CurrentGame.Index, road, oldState, road.RoadState)); CalculateAndSetLongestRoad(page, newRaceTracker); model.NewRaceTracking = newRaceTracker; return(model); }