public HashSet <TileData> GetReachableTiles(Player p, TileData fromTile, int distance) { HashSet <TileData> foundTiles = new HashSet <TileData>(); if (distance == 0 || fromTile == null) { return(foundTiles); } foreach (TileData t in fromTile.GetConnectedTiles()) { if (t == p.CommanderPosition) { continue; } if ((p.Type == PlayerType.Battlebeard && t.Building != BuildingType.StartTileStormshaper) || (p.Type == PlayerType.Stormshaper && t.Building != BuildingType.StartTileBattlebeard)) { foundTiles.Add(t); } HashSet <TileData> tilesForT = GetReachableTiles(p, t, distance - 1); foreach (TileData tt in tilesForT) { //check that thetile is not the oponents start tile if ((p.Type == PlayerType.Battlebeard && t.Building != BuildingType.StartTileStormshaper) || (p.Type == PlayerType.Stormshaper && t.Building != BuildingType.StartTileBattlebeard)) { foundTiles.Add(tt); } } } return(foundTiles); }
void HandleTileEvent(TileData tile) { _OverworldUI.Disable(); _GameStateHolder._ActivePlayer.HasMoved = true; if (_GameStateHolder._ActivePlayer.IsScouting) { _GameStateHolder._ActivePlayer.IsScouting = false; endTurn (); } else { ModalPanel p = ModalPanel.Instance (); switch (tile.Building) { case BuildingType.Armoury: if (!_GameStateHolder._ActivePlayer.LandedArmoury) { _GameStateHolder._ActivePlayer.LandedArmoury = true; TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Armoury", "Welcome to the Armoury!\n" + "You can use resources that you have earned to expand your army or purchase upgrades.", false); } _OverworldUI._ArmouryUI.Show(_GameStateHolder._ActivePlayer); break; case BuildingType.Camp: if (!_GameStateHolder._ActivePlayer.LandedCamp) { _GameStateHolder._ActivePlayer.LandedCamp = true; TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Camp", "You just landed on a camp. You can add it to your empire if you defeat the enemies lurking there.", false); } if (tile.Owner != _GameStateHolder._ActivePlayer.Type) { if (tile.Owner == PlayerType.None) { // MONSTER BATTLE p.ShowOK ("Camp", "You see a camp and enter it. Monsters attack!", () => { startBattle (BattleType.Monster); }); } else { if (tile.IsDefended()) { p.ShowOK("Camp", "You see a camp, there appears to be an enemy unit defending. The enemy attacks you!", () => { startBattle(BattleType.PvP); }); } else { _Board.SetTileOwner(tile, _GameStateHolder._ActivePlayer.Type); Unit prisoner = _GameStateHolder._ActivePlayer.PlayerArmy.GetDefendingUnit(tile); if (prisoner != null) { _Board.UnsetTilePrisoner(tile); PromptForReturnPrisoner(_GameStateHolder._ActivePlayer, prisoner, tile, p, endTurn); } else if (_GameStateHolder._ActivePlayer.PlayerArmy.GetActiveUnits().Count > 1) { StartCoroutine(PromptForDefendingUnit("You enter the camp, it's been abandoned. Leave a unit to defend this camp?", _GameStateHolder._ActivePlayer, p, endTurn)); } else { //TODO: Add some text here to give the player some info endTurn(); } } } break; } if (tile.IsDefended ()) { Unit defendingUnit = _GameStateHolder._ActivePlayer.PlayerArmy.GetDefendingUnit (tile); p.ShowOKCancel("Take back unit", "Should this " + defendingUnit.Type + " stop defending this area?", () => StartCoroutine(PromptToReplaceDefendingUnit (_GameStateHolder._ActivePlayer, defendingUnit, p, endTurn)), endTurn); } else { if (_GameStateHolder._ActivePlayer.PlayerArmy.GetActiveUnits().Count > 1) { StartCoroutine(PromptForDefendingUnit ("Your land is undefended. Would you like to leave a unit to defend this camp?", _GameStateHolder._ActivePlayer, p, endTurn)); } else { endTurn (); } } break; case BuildingType.Cave: if (tile.Owner != _GameStateHolder._ActivePlayer.Type) { if (tile.Owner != PlayerType.None && tile.IsDefended()) { p.ShowOK("Cave", "You enter the cave to explore. An enemy unit ambushes you!", () => { startBattle(BattleType.PvP); }); return; } if(!_GameStateHolder._ActivePlayer.LandedCave) { _GameStateHolder._ActivePlayer.LandedCave = true; TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Cave", "There's a decent stash of treasure in this cave.", true); } if(!_GameStateHolder._ActivePlayer.HasCaptured) { _GameStateHolder._ActivePlayer.HasCaptured = true; TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Cave", "You captured the cave and made it part of your empire!", true); } CardData c =_CardSystem.GetRandomCard(_AvailableCaveCards.cards); _GameStateHolder._ActivePlayer.AddCard(c); _Board.SetTileOwner(tile, _GameStateHolder._ActivePlayer.Type); Unit prisoner = _GameStateHolder._ActivePlayer.PlayerArmy.GetDefendingUnit(tile); if (prisoner != null) { _Board.UnsetTilePrisoner(tile); PromptForReturnPrisoner(_GameStateHolder._ActivePlayer, prisoner, tile, p, endTurn); } else if (_GameStateHolder._ActivePlayer.PlayerArmy.GetActiveUnits().Count > 1) { StartCoroutine(PromptForDefendingUnit("You enter the cave, there's no sign of the enemy. Leave a unit to defend this cave?", _GameStateHolder._ActivePlayer, p, endTurn)); } else { endTurn(); } } else { if (tile.IsDefended ()) { Unit defendingUnit = _GameStateHolder._ActivePlayer.PlayerArmy.GetDefendingUnit (tile); p.ShowOKCancel("Take back unit", "Should this " + defendingUnit.Type + " stop defending this cave?", () => StartCoroutine(PromptToReplaceDefendingUnit (_GameStateHolder._ActivePlayer, defendingUnit, p, endTurn)), endTurn); } else { if (_GameStateHolder._ActivePlayer.PlayerArmy.GetActiveUnits().Count > 1) { StartCoroutine(PromptForDefendingUnit ("Your land is undefended. Would you like to leave a unit to defend this cave?", _GameStateHolder._ActivePlayer, p, endTurn)); } else { endTurn (); } } } break; case BuildingType.Fortress: bool ownsSurroundingTiles = tile.GetConnectedTiles().FindAll(t => t.Owner == _GameStateHolder._ActivePlayer.Type).Count >= 3; if (!_GameStateHolder._ActivePlayer.LandedFortress) { _GameStateHolder._ActivePlayer.LandedFortress = true; TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Fortress", "This fortress seems eerie. It looks like there are many like it around Nekark.", true); if (!ownsSurroundingTiles) { TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Fortress", "I suggest securing the surrounding area!", false); } } // Make sure that the fortress type matches the player type if (tile.Owner == _GameStateHolder._ActivePlayer.Type) { // make sure the player owns at least 3 surrounding tiles if (ownsSurroundingTiles) { // Battle lost immortal p.ShowOK("Fortress", "A bloody Lost Immortal just showed up innit blud!", () => { startBattle(BattleType.LostImmortal); }); } else { p.ShowOK ("Fortress", "You felt a chill in the air, but nothing appeared.", endTurn); } break; } endTurn(); break; case BuildingType.Inn: if(!_GameStateHolder._ActivePlayer.LandedInn) { _GameStateHolder._ActivePlayer.LandedInn = true; TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Inn", "The Inn is a good place to heal your units.\n"+ "Inns are a good place to rest and revive your units when they are knocked out.", true); TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Inn", "Unfortunately, sometimes units cannot be healed and you will need to visit the inn another time.", false); } Audio.AudioInstance.PlaySFX(SoundEffect.Inn); if (_GameStateHolder._InactivePlayer.CastleProgress >= 4) { if(!_GameStateHolder._ActivePlayer.LandedInnUnavailable) { _GameStateHolder._ActivePlayer.LandedInnUnavailable = true; TutorialPanel.Instance().Tutor(_GameStateHolder._ActivePlayer.Type, "Inn", "Oh no!" + "The inn has turned you away! The " + _GameStateHolder._InactivePlayer.Type.ToString() + "army is putting too much pressure on them!.\n" + "Looks like there's no rest for us anymore...", true); } p.ShowOK ("Oh No!", "The inn won't accept you!", endTurn); break; } var rnd = UnityEngine.Random.Range (0, 3); List<Unit> units; units = _GameStateHolder._ActivePlayer.PlayerArmy.GetRandomUnits (rnd, _GameStateHolder._ActivePlayer.PlayerArmy.GetKOUnits()); foreach (var unit in units) { unit.Heal (); } string content, title; if (_GameStateHolder._ActivePlayer.PlayerArmy.GetKOUnits ().Count == 0) { title = "The Inn Welcomes You"; content = "You are well rested."; } else { title = units.Count + " Units Healed"; content = rnd == 0 ? "Their wounds were too great. Looks like they'll need some more time." : "Your army is well rested."; } p.ShowOK (title, content, endTurn); break; default: endTurn (); break; } } }
public HashSet<TileData> GetReachableTiles(Player p, TileData fromTile, int distance) { HashSet<TileData> foundTiles = new HashSet<TileData>(); if (distance == 0 || fromTile == null) { return foundTiles; } foreach (TileData t in fromTile.GetConnectedTiles()) { if (t == p.CommanderPosition) { continue; } if ((p.Type == PlayerType.Battlebeard && t.Building != BuildingType.StartTileStormshaper) || (p.Type == PlayerType.Stormshaper && t.Building != BuildingType.StartTileBattlebeard)) foundTiles.Add(t); HashSet<TileData> tilesForT = GetReachableTiles(p, t, distance - 1); foreach (TileData tt in tilesForT) { //check that thetile is not the oponents start tile if ((p.Type == PlayerType.Battlebeard && t.Building != BuildingType.StartTileStormshaper) || (p.Type == PlayerType.Stormshaper && t.Building != BuildingType.StartTileBattlebeard)) foundTiles.Add(tt); } } return foundTiles; }