private Road AddAdjacentRoad(TileCtrl tile, Road thisRoad, TileLocation adjTileLocation, RoadLocation adjRoadLocation) { Road thatRoad = GetRoadAt(tile, adjTileLocation, adjRoadLocation); thisRoad.AdjacentRoads.Add(thatRoad); return(thatRoad); }
private void SelectTile(TileCtrl newTile) { if (_selectedTile != null) { bool UnSelected = (newTile == _selectedTile); _selectedTile.Selected = false; // you can select a different one w/o closing the first one // boost below so you can see the whole focus rect - otherwise the overlappy rectangles make it confusing where mouse events go // the UI hides the boost from the UI. Deboost here int zIndex = Canvas.GetZIndex(_selectedTile); Canvas.SetZIndex(_selectedTile, zIndex - ZINDEX_BOOST); _selectedTile = null; if (UnSelected) { return; } } if (newTile == null) { // // can we get into this state? Debug.Assert(false, "SelectTile(null) called"); return; } newTile.Selected = true; _selectedTile = newTile; Canvas.SetZIndex(_selectedTile, Canvas.GetZIndex(_selectedTile) + ZINDEX_BOOST); // Debug.WriteLine($"[GameView::SelectTile] Tile.ResourceType={newTile.ResourceType} tile.Index={newTile.Index}"); EnableInput = true; UpdateBindings(); }
public RoadSegmentData(Polygon rs, TileCtrl tile, RoadLocation loc, RoadState state) { RoadSegment = rs; Tile = tile; Location = loc; RoadState = state; }
// // if you want to set the tiles/harbors, get the current game, set Randomize to False, and then call this ShuffleReosurces() public void ShuffleResources() { foreach (TileGroup tileGroup in _currentGame.TileGroups) { if (tileGroup.Randomize == false) { continue; } int harborCount = 0; if (_currentGame.Randomize) { tileGroup.RandomResourceTypeList = GetRandomList(tileGroup.Tiles.Count - 1); if (tileGroup.Harbors.Count > 1) { tileGroup.RandomHarborTypeList = GetRandomList(tileGroup.Harbors.Count - 1); } } for (int i = 0; i < tileGroup.Tiles.Count; i++) { TileCtrl t = tileGroup.Tiles[i]; t.ResourceType = tileGroup.ResourceTypes[tileGroup.RandomResourceTypeList[i]]; foreach (Harbor h in t.VisibleHarbors) { h.HarborType = tileGroup.HarborTypes[tileGroup.RandomHarborTypeList[harborCount]]; harborCount++; } } } AssignNumbers(); }
public void OnClose() { if (_selectedTile != null) { _selectedTile.Selected = false; _selectedTile = null; } }
public void OnGridRightTapped(TileCtrl tile, RightTappedRoutedEventArgs rte) { if (_designModeSet) { if (tile != _selectedTile) { SelectTile(tile); } _menuMain.ShowAt(tile, rte.GetPosition(tile)); } }
internal Road GetRoadAt(TileCtrl tile, RoadLocation roadLocation) { if (tile == null) { return(null); } RoadKey key = new RoadKey(tile, roadLocation); Road road = null; _currentGame.RoadKeyToRoadDictionary.TryGetValue(key, out road); return(road); }
public void AssignNumbers() { bool valid = false; int iterations = 0; do { foreach (TileGroup tileGroup in _currentGame.TileGroups) { if (tileGroup.Randomize == false) { continue; } int numberSeqCount = 0; List <int> RandomNumberSequence; if (_useRandomNumbers) { RandomNumberSequence = GetRandomList(tileGroup.ValidNumbers.Count - DesertCount(tileGroup.Tiles) - 1); } else { RandomNumberSequence = new List <int>(); for (int i = 0; i <= (tileGroup.ValidNumbers.Count - DesertCount(tileGroup.Tiles) - 1); i++) { RandomNumberSequence.Add(i); //do it in the order of the saved game } } for (int i = 0; i < tileGroup.Tiles.Count; i++) { TileCtrl t = tileGroup.Tiles[i]; if (t.ResourceType != ResourceType.Desert) { t.Number = tileGroup.ValidNumbers[RandomNumberSequence[numberSeqCount++]]; t.Baron = false; } else { t.Number = 7; } } iterations++; } valid = IsValidNumberLayout(_currentGame); } while (!valid); if (iterations > 200) { this.TraceMessage($"tried {iterations} times to find a valid number sequence"); } }
public LogBuildingUpdate(int gameIndex, TileCtrl tileCtrl, BuildingCtrl buildingCtrl, BuildingState oldState, BuildingState newState) { GameIndex = gameIndex; Tile = tileCtrl; Building = buildingCtrl; OldBuildingState = oldState; BuildingIndex = buildingCtrl.Index; NewBuildingState = newState; if (tileCtrl != null) { TileIndex = tileCtrl.Index; } }
private void Tile_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) { TileCtrl tile = sender as TileCtrl; if (tile.TileOrientation == TileOrientation.FaceUp) { tile.TileOrientation = TileOrientation.FaceDown; } else { tile.TileOrientation = TileOrientation.FaceUp; } }
// // given a tile and a location, find the line segment that is in the same road public Polygon GetAdjacentRoadSegment(TileCtrl tile, RoadLocation myLocation) { return(null); //TileCtrl adjacent = this.GetAdjacentTile(tile, myLocation); //if (adjacent != null) //{ // return adjacent.GetRoadSegment(GetAdjacentLocation(myLocation)); //} //return null; }
public void OnHarborRightTapped(TileCtrl tile, HarborLocation location, RightTappedRoutedEventArgs e) { if (!_designModeSet) { return; } if (tile != _selectedTile) { SelectTile(tile); } _clickedHarberLocation = location; _menuHarbor.ShowAt(tile, e.GetPosition(tile)); }
private Road GetRoadAt(TileCtrl startTile, TileLocation adjTileLocation, RoadLocation roadLocation) { TileCtrl adjTile = null; if (adjTileLocation == TileLocation.Self) { adjTile = startTile; } else { adjTile = GetAdjacentTile(startTile, ((RoadLocation)(int)adjTileLocation)); } return(GetRoadAt(adjTile, roadLocation)); }
internal TileCtrl GetAdjacentTile(TileCtrl tile, RoadLocation adjacentLocation) { TileCtrl adj = null; List <List <TileCtrl> > visualLayout = _currentGame.VisualLayout(); for (int col = 0; col < visualLayout.Count; col++) { for (int row = 0; row < visualLayout.ElementAt(col).Count; row++) { TileCtrl t = visualLayout.ElementAt(col).ElementAt(row); if (t == tile) { switch (adjacentLocation) { case RoadLocation.TopRight: return(NextUpperRight(row, col)); case RoadLocation.TopLeft: return(PreviousUpperLeft(row, col)); case RoadLocation.BottomRight: return(NextLowerRight(row, col)); case RoadLocation.BottomLeft: return(PreviousLowerLeft(row, col)); case RoadLocation.Top: return(AboveTile(row, col)); case RoadLocation.Bottom: return(BelowTile(row, col)); default: break; } } } } return(adj); }
void AddSettlementClonesToDictionary(TileCtrl inputTile, RoadLocation[] roadLocations, SettlementLocation[] settlementLocations) { //SettlementCtrl adjSettlementCtr = null; //TileCtrl adjTile = null; //Settlement settlement = new Settlement(); // all SettlementCtrls in the SettlementLocations[] array should map to this Settlement //for (int i = 0; i < 3; i++) //{ // if (roadLocations[i] == RoadLocation.None) // adjTile = inputTile; // else // adjTile = GetAdjacentTile(inputTile, roadLocations[i]); // if (adjTile != null) // { // adjSettlementCtr = adjTile.SettlementAt(settlementLocations[i]); // SettlementCtrlToSettlementData[adjSettlementCtr] = settlement; // so given a control, we can find the Settlement it is a member of // // // // is this tile/control pair already in the map? // SettlementKey key = new SettlementKey(adjTile, adjSettlementCtr.SettlementLocation); // if (TileLocToSettlementData.ContainsKey(key) == false) // note: we've implemented IComparer so that the key is looked at by value... // { // // // // we haven't seen it with this key // TileLocToSettlementData[key] = settlement; // } // SettlementData data = new SettlementData(adjTile, adjSettlementCtr); // the next settlement at the same location // if (settlement.Contains(data) == false) // { // // // // don't add the SettlementData to the list unless it is a unique combo of location and tile // settlement.Settlements.Add(data); // } // } //} }
//public new void KeyUp(KeyRoutedEventArgs e) //{ // throw new NotImplementedException(); //} //public void TileSelected(TileCtrl tile) //{ // SelectTile(tile); //} //public void UpdateHexLayout() //{ // ForceHexPanelUpdate(); //} public void OnGridLeftTapped(TileCtrl tile, TappedRoutedEventArgs e) { if (!_designModeSet) { return; } SelectTile(tile); if ((bool)SetOrder == true) { tile.Index = _tileIndex++; if (_tileIndex == this.TotalTiles) { _tileIndex = 0; } //for (int i = _tileIndex; i<_tiles.Count; i++) //{ // _tiles[i].Index = i; //} } }
public LogBaronOrPirate(int gameIndex, PlayerModel targetPlayer, PlayerModel sourcePlayer, TileCtrl startTile, TileCtrl targetTile, TargetWeapon weapon, CatanAction action) { GameIndex = gameIndex; StartTile = startTile; Action = action; if (startTile != null) { StartTileIndex = startTile.Index; } TargetTile = targetTile; TargetTileIndex = targetTile.Index; TargetWeapon = weapon; TargetPlayer = targetPlayer; if (targetPlayer != null) { TargetPlayerIndex = targetPlayer.AllPlayerIndex; } SourcePlayer = sourcePlayer; if (sourcePlayer != null) { SourcePlayerIndex = sourcePlayer.AllPlayerIndex; } }
public Target(PlayerModel p, TileCtrl t) { Player = p; Tile = t; foreach (var building in Tile.OwnedBuilding) { if (building.BuildingState == BuildingState.Settlement) { ResourcePotential++; } else if (building.BuildingState == BuildingState.City) { ResourcePotential += 2; } else { throw new Exception("This building shouldn't be owned"); } } ResourcePotential *= Tile.Pips; if (ResourcePotential > 0) { // // check to see if this player has 2:1 in a resource from this tile foreach (var harbor in Player.GameData.OwnedHarbors) { if (StaticHelpers.HarborTypeToResourceType(harbor.HarborType) == Tile.ResourceType) { ResourcePotential *= 2; } } } }
public static RoadCtrl GetCloneOrCreate(PointCollection pointCollection, RoadLocation location, TileCtrl tile, Grid home, List <RoadCtrl> roads, Dictionary <RoadKey, RoadCtrl> roadKeyDictionary) { //foreach (RoadCtrl road in roads) //{ // if (road.Keys.Count > 0) // { // if (location == RoadLocation.Top && road.Keys[0].RoadLocation == RoadLocation.Bottom) // { // // road.TraceMessage("this one"); // } // } // if (RoadCtrl.PolygonClose(road.RoadSegment1.Points, pointCollection, location) == true) // { // // // // same Road -- add to the list of keys stored inside the road (its "clones") // // and add it to both the dictionary of keys --> roads that is passed in and to // // the list of all the roads. // road.RoadSegment2 = road.CreatePolygon(pointCollection, Colors.HotPink, location); // RoadKey key = new RoadKey(tile, location); // road.Keys.Add(key); // roadKeyDictionary[key] = road; // Canvas.SetZIndex(road.RoadSegment2, -1); // home.Children.Add(road.RoadSegment2); // return road; // } //} //// //// didn't find it -- i'm assuming it is a new road--every road has win or it is on the edge //RoadCtrl rd = null; //rd = new RoadCtrl(); //rd.RoadSegment1 = rd.CreatePolygon(pointCollection, Colors.HotPink, location); //Canvas.SetZIndex(rd.RoadSegment1, -1); //roads.Add(rd); //home.Children.Add(rd.RoadSegment1); //RoadKey k = new RoadKey(tile, location); //rd.Keys.Add(k); //roadKeyDictionary[k] = rd; //return rd; return(null); }
public TileCtrl GetAdjacentTile(TileCtrl tile, TileLocation adjacentLocation) { return(GetAdjacentTile(tile.Row, tile.Col, adjacentLocation)); }
public SettlementData(TileCtrl t, SettlementCtrl setttlement) { Tile = t; Location = setttlement.SettlementLocation; Settlement = setttlement; }
public async Task FancyTileDistribution() { List <Task> list = new List <Task>(); double ms = MainPage.GetAnimationSpeed(AnimationSpeed.Fast);; int i = 0; foreach (TileGroup tileGroup in _currentGame.TileGroups) { if (tileGroup.Randomize == false) { continue; } TileCtrl centerTile = tileGroup.Tiles.Last();; foreach (TileCtrl t in tileGroup.Tiles) { GeneralTransform gt = centerTile.HexGrid.TransformToVisual(t.HexGrid); Point pt = gt.TransformPoint(new Point(0, 0)); Task task = t.AnimateMoveTask(pt, ms, i * ms); i++; t.zIndex = 1000 - i; list.Add(task); } } await Task.WhenAll(list); list.Clear(); i = 0; Random r = new Random(DateTime.Now.Millisecond); foreach (TileGroup tileGroup in _currentGame.TileGroups) { if (tileGroup.Randomize == false) { continue; } foreach (TileCtrl t in tileGroup.Tiles) { Task task = t.RotateTask(r.Next(1, 5) * 360, MainPage.GetAnimationSpeed(AnimationSpeed.Fast)); list.Add(task); } } await Task.WhenAll(list); list.Clear(); i = 0; foreach (TileGroup tileGroup in _currentGame.TileGroups) { if (tileGroup.Randomize == false) { continue; } foreach (TileCtrl t in tileGroup.Tiles) { t.ResetTileRotation(); } } foreach (TileGroup tileGroup in _currentGame.TileGroups) { if (tileGroup.Randomize == false) { continue; } foreach (TileCtrl t in tileGroup.Tiles) { Task task = t.AnimateMoveTask(new Point(0, 0), ms, i * ms); i++; list.Add(task); } } await Task.WhenAll(list); list.Clear(); i = 0; foreach (TileGroup tileGroup in _currentGame.TileGroups) { if (tileGroup.Randomize == false) { continue; } foreach (TileCtrl t in tileGroup.Tiles) { Task task = t.SetTileOrientation(TileOrientation.FaceUp, false, MainPage.GetAnimationSpeed(AnimationSpeed.Fast), i * MainPage.GetAnimationSpeed(AnimationSpeed.Fast)); i++; list.Add(task); } } await Task.WhenAll(list); }
public async Task FancyHarborDistribution() { List <Task> list = new List <Task>(); double ms = MainPage.GetAnimationSpeed(AnimationSpeed.Normal); int i = 0; foreach (TileGroup tileGroup in _currentGame.TileGroups) { TileCtrl animationMiddle = tileGroup.Tiles[tileGroup.Tiles.Count / 2]; for (i = 0; i < tileGroup.Harbors.Count; i++) { int j = i + 1; if (j == tileGroup.Harbors.Count) { j = 0; } GeneralTransform gt = animationMiddle.TransformToVisual(tileGroup.Harbors[i]); Point pt = gt.TransformPoint(new Point(tileGroup.Harbors[0].Width, tileGroup.Harbors[0].Height)); Task task = tileGroup.Harbors[i].AnimateMoveTask(pt, ms, i * ms); list.Add(task); } } await Task.WhenAll(list); list.Clear(); i = 0; Random r = new Random(DateTime.Now.Millisecond); ms = MainPage.GetAnimationSpeed(AnimationSpeed.Normal); foreach (TileGroup tileGroup in _currentGame.TileGroups) { foreach (var h in tileGroup.Harbors) { Task task = h.RotateTask(r.Next(1, 10) * 360, ms); list.Add(task); } } await Task.WhenAll(list); list.Clear(); i = 0; ms = MainPage.GetAnimationSpeed(AnimationSpeed.Fast); foreach (TileGroup tileGroup in _currentGame.TileGroups) { foreach (var h in tileGroup.Harbors) { Task task = h.AnimateMoveTask(new Point(0, 0), ms, i * ms); i++; list.Add(task); } } await Task.WhenAll(list); list.Clear(); i = 0; ms = ms = MainPage.GetAnimationSpeed(AnimationSpeed.Normal); foreach (TileGroup tileGroup in _currentGame.TileGroups) { foreach (var h in tileGroup.Harbors) { Task task = h.SetOrientation(TileOrientation.FaceUp, ms, i * ms); i++; list.Add(task); } } await Task.WhenAll(list); }
public SettlementCtrl GetSettlement(TileCtrl tile, SettlementLocation loc) { return(GetSettlement(new SettlementKey(tile, loc))); }
public RoadKey(TileCtrl tile, RoadLocation loc) { Tile = tile; RoadLocation = loc; }
// // setup all the Heads and Tails for the Tiles // // by convetion Top, TopRight, and BottomRight are "heads" and Bottom, BottomLeft, and TopLeft are "tails" //private void BuildRoadBinaryTree() //{ // List<List<TileCtrl>> visualTiles = CurrentGame.VisualLayout(); // for (int col = 0; col < Columns; col++) // { // for (int row = 0; row < visualTiles.ElementAt(col).Count; row++) // { // TileCtrl tile = visualTiles.ElementAt(col).ElementAt(row); // Road thatRoad = null; // Road thisRoad = null; // foreach (TileLocation loc in Enum.GetValues(typeof(TileLocation))) // { // if (loc == TileLocation.Self) continue; // thisRoad = GetRoadAt(tile, (RoadLocation)loc); // switch (loc) // { // case TileLocation.Top: // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.TopRight); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.TopLeft); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // if (thatRoad != null) thatRoad.BreakCycleRoad = thisRoad; // only place this is set // thatRoad = GetRoadAt(tile, TileLocation.Top, RoadLocation.BottomLeft); // if (thatRoad != null) // { // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.TopLeft, RoadLocation.TopRight); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // thatRoad = GetRoadAt(tile, TileLocation.Top, RoadLocation.BottomRight); // if (thatRoad != null) // { // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.TopRight, RoadLocation.TopLeft); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // break; // case TileLocation.TopRight: // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.BottomRight); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddHeads(thisRoad); // note cycle // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.Top); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Top, RoadLocation.BottomRight); // if (thatRoad != null) // { // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.TopRight, RoadLocation.TopLeft); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // thatRoad = GetRoadAt(tile, TileLocation.TopRight, RoadLocation.Bottom); // if (thatRoad != null) // { // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.BottomRight, RoadLocation.Top); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // break; // case TileLocation.BottomRight: // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.Bottom); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.TopRight); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Bottom, RoadLocation.TopRight); // if (thatRoad != null) // { // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.BottomLeft, RoadLocation.TopRight); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // thatRoad = GetRoadAt(tile, TileLocation.Bottom, RoadLocation.TopRight); // if (thatRoad != null) // { // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.BottomRight, RoadLocation.TopLeft); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // break; // case TileLocation.Bottom: // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.BottomRight); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.BottomLeft); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Bottom, RoadLocation.TopRight); // if (thatRoad != null) // { // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.BottomRight, RoadLocation.BottomLeft); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // thatRoad = GetRoadAt(tile, TileLocation.BottomLeft, RoadLocation.Top); // if (thatRoad != null) // { // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.TopRight, RoadLocation.Bottom); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // break; // case TileLocation.BottomLeft: // // my first Head (on the same tile) // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.TopLeft); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // // my first tail (on the same tile) // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.Bottom); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Bottom, RoadLocation.TopLeft); // if (thatRoad != null) // { // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.BottomLeft, RoadLocation.BottomLeft); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // thatRoad = GetRoadAt(tile, TileLocation.BottomLeft, RoadLocation.Top); // if (thatRoad != null) // { // thisRoad.AddHeads(thatRoad); // thatRoad?.AddHeads(thisRoad); // this is the cylce!! // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.TopLeft, RoadLocation.Bottom); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddHeads(thisRoad); // this is the cylce!! // } // break; // case TileLocation.TopLeft: // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.Top); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Self, RoadLocation.BottomLeft); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // thatRoad = GetRoadAt(tile, TileLocation.Top, RoadLocation.BottomLeft); // if (thatRoad != null) // { // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.TopLeft, RoadLocation.TopRight); // thisRoad.AddHeads(thatRoad); // thatRoad?.AddTails(thisRoad); // } // thatRoad = GetRoadAt(tile, TileLocation.BottomLeft, RoadLocation.Top); // if (thatRoad != null) // { // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // else // { // thatRoad = GetRoadAt(tile, TileLocation.TopLeft, RoadLocation.Bottom); // thisRoad.AddTails(thatRoad); // thatRoad?.AddHeads(thisRoad); // } // break; // default: // break; // } // } // } // } //} private void AddAdjacentRoads() { List <List <TileCtrl> > visualTiles = CurrentGame.VisualLayout(); for (int col = 0; col < Columns; col++) { for (int row = 0; row < visualTiles.ElementAt(col).Count; row++) { TileCtrl tile = visualTiles.ElementAt(col).ElementAt(row); Road thisRoad = null; Road adjRoad = null; foreach (TileLocation loc in Enum.GetValues(typeof(TileLocation))) { if (loc == TileLocation.Self) { continue; } thisRoad = GetRoadAt(tile, (RoadLocation)loc); switch (loc) { case TileLocation.Top: adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.TopRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.TopLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Top, RoadLocation.BottomLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Top, RoadLocation.BottomRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopLeft, RoadLocation.TopRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopRight, RoadLocation.TopLeft); break; case TileLocation.TopRight: adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.BottomRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.Top); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopRight, RoadLocation.TopLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomRight, RoadLocation.Top); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Top, RoadLocation.BottomRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopRight, RoadLocation.Bottom); break; case TileLocation.BottomRight: adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.Bottom); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.TopRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Bottom, RoadLocation.TopRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomRight, RoadLocation.BottomLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopRight, RoadLocation.Bottom); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomRight, RoadLocation.Top); break; case TileLocation.Bottom: adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.BottomRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.BottomLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Bottom, RoadLocation.TopRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Bottom, RoadLocation.TopLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomRight, RoadLocation.BottomLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomLeft, RoadLocation.BottomRight); break; case TileLocation.BottomLeft: adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.TopLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.Bottom); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Bottom, RoadLocation.TopLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomLeft, RoadLocation.BottomRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomLeft, RoadLocation.Top); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopLeft, RoadLocation.Bottom); break; case TileLocation.TopLeft: adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.Top); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Self, RoadLocation.BottomLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.Top, RoadLocation.BottomLeft); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopLeft, RoadLocation.TopRight); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.BottomLeft, RoadLocation.Top); adjRoad = AddAdjacentRoad(tile, thisRoad, TileLocation.TopLeft, RoadLocation.Bottom); break; default: break; } } } } }
private void AddSameSettlementLocationToDictionary(TileCtrl tile, SettlementCtrl inputSettlementCtrl) { RoadLocation[] adjTileLocations = null; SettlementLocation[] settlementLocation = null; SettlementLocation inputLocation = inputSettlementCtrl.SettlementLocation; switch (inputLocation) { case SettlementLocation.TopRight: adjTileLocations = new RoadLocation[3] { RoadLocation.None, RoadLocation.Top, RoadLocation.TopRight }; settlementLocation = new SettlementLocation[3] { inputLocation, SettlementLocation.BottomRight, SettlementLocation.MiddleLeft }; break; case SettlementLocation.MiddleRight: adjTileLocations = new RoadLocation[3] { RoadLocation.None, RoadLocation.TopRight, RoadLocation.BottomRight }; settlementLocation = new SettlementLocation[3] { inputLocation, SettlementLocation.BottomLeft, SettlementLocation.TopLeft }; break; case SettlementLocation.BottomRight: adjTileLocations = new RoadLocation[3] { RoadLocation.None, RoadLocation.BottomRight, RoadLocation.Bottom }; settlementLocation = new SettlementLocation[3] { inputLocation, SettlementLocation.MiddleLeft, SettlementLocation.TopRight }; break; case SettlementLocation.BottomLeft: adjTileLocations = new RoadLocation[3] { RoadLocation.None, RoadLocation.Bottom, RoadLocation.BottomLeft }; settlementLocation = new SettlementLocation[3] { inputLocation, SettlementLocation.TopRight, SettlementLocation.MiddleRight }; break; case SettlementLocation.MiddleLeft: adjTileLocations = new RoadLocation[3] { RoadLocation.None, RoadLocation.BottomLeft, RoadLocation.TopLeft }; settlementLocation = new SettlementLocation[3] { inputLocation, SettlementLocation.TopRight, SettlementLocation.BottomRight }; break; case SettlementLocation.TopLeft: adjTileLocations = new RoadLocation[3] { RoadLocation.None, RoadLocation.TopLeft, RoadLocation.Top }; settlementLocation = new SettlementLocation[3] { inputLocation, SettlementLocation.MiddleRight, SettlementLocation.BottomLeft }; break; case SettlementLocation.None: break; default: break; } AddSettlementClonesToDictionary(tile, adjTileLocations, settlementLocation); }