private void Start() { HideChild(); GameManager.Instance.ManagerSO.GoToActionJ1Phase += HideChild; GameManager.Instance.ManagerSO.GoToActionJ2Phase += HideChild; if (_redPlayerZone) { PlayerScript.Instance.RedPlayerInfos.TileCentreZoneOrgone = _centerOrgoneArea; } else { PlayerScript.Instance.BluePlayerInfos.TileCentreZoneOrgone = _centerOrgoneArea; } List <int> neighZone = PlayerStatic.GetNeighbourDiag(_centerOrgoneArea.GetComponent <TileScript>().TileId, _centerOrgoneArea.GetComponent <TileScript>().Line, true); _centerOrgoneArea.GetComponent <TileScript>().TerrainEffectList.Remove(_redPlayerZone ? MYthsAndSteel_Enum.TerrainType.OrgoneRed : MYthsAndSteel_Enum.TerrainType.OrgoneBlue); foreach (int i in neighZone) { TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Remove(_redPlayerZone ? MYthsAndSteel_Enum.TerrainType.OrgoneRed : MYthsAndSteel_Enum.TerrainType.OrgoneBlue); } List <int> newNeighZone = PlayerStatic.GetNeighbourDiag(_centerOrgoneArea.GetComponent <TileScript>().TileId, _centerOrgoneArea.GetComponent <TileScript>().Line, true); newNeighZone.Add(_centerOrgoneArea.GetComponent <TileScript>().TileId); foreach (int i in newNeighZone) { TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Add(_redPlayerZone ? MYthsAndSteel_Enum.TerrainType.OrgoneRed : MYthsAndSteel_Enum.TerrainType.OrgoneBlue); } }
/// <summary> /// Initialisation de la déviation : on va récupérer quelques variables et illuminer les cases concernées par la déviation /// </summary> public void StartDeviation() { foreach (int i in _selectedTiles) { TilesManager.Instance.TileList[i].gameObject.GetComponent <TileScript>().DesActiveChildObj(MYthsAndSteel_Enum.ChildTileType.AttackSelect); } //récupération de variable int ennemyUnitIdTile = selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId; bool endDeviation = false; SetEnnemyUnitListTileNeighbourDiagUI = PlayerStatic.GetNeighbourDiag(ennemyUnitIdTile, TilesManager.Instance.TileList[ennemyUnitIdTile].GetComponent <TileScript>().Line, IsAttackDeviation); List <int> ennemyUnitListTileNeighbourDiagUI = new List <int>(); SetEnnemyUnitListTileNeighbourDiagUI.Add(ennemyUnitIdTile); ennemyUnitListTileNeighbourDiagUI.AddRange(SetEnnemyUnitListTileNeighbourDiagUI); ennemyUnitListTileNeighbourDiagUI.Sort(); //Illumination des cases foreach (int id in SetEnnemyUnitListTileNeighbourDiagUI) { TilesManager.Instance.TileList[id].GetComponent <SpriteRenderer>().sprite = _DeviationSelectUI; TilesManager.Instance.TileList[id].GetComponent <SpriteRenderer>().color = new Color(1f, 1f, 1f, 1f); } //Lancement de l'animation Les coroutines ne se lancent pas les une après les autres c'est pour cela qu'il y a un delay qui va s'incrémenter au fur et à mesure de for int x = 0; for (int i = 0; i < ennemyUnitListTileNeighbourDiagUI.Count; i++, x++) { StartCoroutine(ColorTile(i, x, ennemyUnitListTileNeighbourDiagUI, ennemyUnitIdTile, endDeviation)); } }
/// <summary> /// Highlight des cases dans la range d'attaque de l'unité /// </summary> /// <param name="tileId"></param> /// <param name="Range"></param> public void Highlight(int tileId, int currentID, int Range) { UIInstance.Instance.DesactivateNextPhaseButton(); if (Range > 0) { foreach (int ID in PlayerStatic.GetNeighbourDiag(tileId, TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().Line, false)) { TileScript TileSc = TilesManager.Instance.TileList[ID].GetComponent <TileScript>(); bool i = false; if (ID == currentID) { i = true; Debug.Log("jfdklq"); } if (!i) { TileSc.ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.AttackSelect, _normalAttackSprite, 1); if (!newNeighbourId.Contains(ID)) { newNeighbourId.Add(ID); } Highlight(ID, currentID, Range - 1);; } } } }
/// <summary> /// Permet de d閠erminer si autour des cases adjacentes il y a des effets de terrain qui pourraient g阯er le d閜loiement de troupes. /// </summary> /// <param name="tileCheck"></param> /// <returns></returns> bool CheckConditions(GameObject tileCheck, int origin) { //Y a une unit� if (tileCheck.GetComponent <TileScript>().Unit != null) { return(true); } //Y a de l'eau ou un ravin? if (tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Ravin) || tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Eau)) { return(true); } //RIVIERE? if (tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivi鑢e_Nord) && PlayerStatic.CheckDirection(origin, tileCheck.GetComponent <TileScript>().TileId) == MYthsAndSteel_Enum.Direction.Sud) { if (!tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Pont_Nord)) { return(true); } } if (tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivi鑢e_Sud) && PlayerStatic.CheckDirection(origin, tileCheck.GetComponent <TileScript>().TileId) == MYthsAndSteel_Enum.Direction.Nord) { if (!tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Pont_Sud)) { return(true); } } if (tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivi鑢e_Ouest) && PlayerStatic.CheckDirection(origin, tileCheck.GetComponent <TileScript>().TileId) == MYthsAndSteel_Enum.Direction.Est) { if (!tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivi鑢e_Ouest)) { return(true); } } if (tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivi鑢e_Est) && PlayerStatic.CheckDirection(origin, tileCheck.GetComponent <TileScript>().TileId) == MYthsAndSteel_Enum.Direction.Ouest) { if (!tileCheck.GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivi鑢e_Est)) { return(true); } } return(false); //Ajouter les barbelets. }
/// <summary> /// Quand le joueur clique sur valider sur le panneau de validation /// </summary> public void WhenValidate() { foreach (GameObject gam in _tilesInRange) { gam.GetComponent <TileScript>().DesActiveChildObj(MYthsAndSteel_Enum.ChildTileType.EventSelect); } List <int> neighZone = PlayerStatic.GetNeighbourDiag(_centerOrgoneArea.GetComponent <TileScript>().TileId, _centerOrgoneArea.GetComponent <TileScript>().Line, true); _centerOrgoneArea.GetComponent <TileScript>().TerrainEffectList.Remove(_redPlayerZone ? MYthsAndSteel_Enum.TerrainType.OrgoneRed : MYthsAndSteel_Enum.TerrainType.OrgoneBlue); foreach (int i in neighZone) { TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Remove(_redPlayerZone? MYthsAndSteel_Enum.TerrainType.OrgoneRed : MYthsAndSteel_Enum.TerrainType.OrgoneBlue); } if (GameManager.Instance.IsPlayerRedTurn) { PlayerScript.Instance.RedPlayerInfos.TileCentreZoneOrgone = _targetTile; } else { PlayerScript.Instance.BluePlayerInfos.TileCentreZoneOrgone = _targetTile; } _centerOrgoneArea = _targetTile; _targetTile = null; //Chercher les voisins de la case List <int> newNeighZone = PlayerStatic.GetNeighbourDiag(_centerOrgoneArea.GetComponent <TileScript>().TileId, _centerOrgoneArea.GetComponent <TileScript>().Line, true); newNeighZone.Add(_centerOrgoneArea.GetComponent <TileScript>().TileId); foreach (int i in newNeighZone) { TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Add(_redPlayerZone ? MYthsAndSteel_Enum.TerrainType.OrgoneRed : MYthsAndSteel_Enum.TerrainType.OrgoneBlue); } newNeighZone.Clear(); GameManager.Instance._eventCall -= WhenValidate; //A bouger la zone d'orgone _hasMoveOrgoneArea = true; _tilesInRange.Clear(); _isInValidation = false; HideChild(); UIInstance.Instance.ActivateNextPhaseButton(); }
/// <summary> /// Est ce que l'unité qui a été cliquée fait partie de l'armée /// </summary> /// <param name="uniTouch"></param> /// <returns></returns> bool CanUseUnitWhenClic(UnitScript uniTouch) { if (uniTouch.IsActivationDone == false) { if (GameManager.Instance.IsPlayerRedTurn) { if (!PlayerStatic.CheckIsUnitArmy(uniTouch, true) && !uniTouch.UnitStatus.Contains(MYthsAndSteel_Enum.UnitStatut.Possédé)) { return(false); } } else { if (!PlayerStatic.CheckIsUnitArmy(uniTouch, false) && !uniTouch.UnitStatus.Contains(MYthsAndSteel_Enum.UnitStatut.Possédé)) { return(false); } } if (GameManager.Instance.ActualTurnPhase != MYthsAndSteel_Enum.PhaseDeJeu.ActionJ1 && GameManager.Instance.ActualTurnPhase != MYthsAndSteel_Enum.PhaseDeJeu.ActionJ2) { return(false); } bool isDeactivate = false; foreach (MYthsAndSteel_Enum.TypeUnite type in PlayerScript.Instance.DisactivateUnitType) { if (uniTouch.UnitSO.typeUnite == type) { isDeactivate = true; } } if (isDeactivate) { return(false); } else { return(true); } } else { return(false); } }
void LaunchDeplacementBombardement(GameObject unit) { int player = DeterminArmy(MYthsAndSteel_Enum.EventCard.Bombardement_aérien); List <GameObject> tileList = new List <GameObject>(); List <int> unitNeigh = PlayerStatic.GetNeighbourDiag(unit.GetComponent <UnitScript>().ActualTiledId, TilesManager.Instance.TileList[unit.GetComponent <UnitScript>().ActualTiledId].GetComponent <TileScript>().Line, false); foreach (int i in unitNeigh) { tileList.Add(TilesManager.Instance.TileList[i]); } LaunchEventTile(1, player == 1 ? true : false, tileList, "Bombardement Aérien", "Êtes-vous sur de vouloir déplacer l'unité attaquée sur cette case?"); GameManager.Instance._eventCall += MoveUnitBombardement; tileList.Clear(); }
/// <summary> /// Lorsque le joueur commence à cliquer sur la case centrale de la zone d'orgone /// </summary> public void AddOrgoneAtRange() { List <int> OrgoneNeigh = _redPlayerZone ? PlayerStatic.GetNeighbourDiag(PlayerScript.Instance.RedPlayerInfos.TileCentreZoneOrgone.GetComponent <TileScript>().TileId, PlayerScript.Instance.RedPlayerInfos.TileCentreZoneOrgone.GetComponent <TileScript>().Line, false) : PlayerStatic.GetNeighbourDiag(PlayerScript.Instance.BluePlayerInfos.TileCentreZoneOrgone.GetComponent <TileScript>().TileId, PlayerScript.Instance.BluePlayerInfos.TileCentreZoneOrgone.GetComponent <TileScript>().Line, false); foreach (int i in OrgoneNeigh) { if (!_tilesInRange.Contains(TilesManager.Instance.TileList[i])) { if (TilesManager.Instance.TileList[i].GetComponent <TileScript>().TileId >= 8 && TilesManager.Instance.TileList[i].GetComponent <TileScript>().TileId <= 72 && 9 * (TilesManager.Instance.TileList[i].GetComponent <TileScript>().Line - 1) != TilesManager.Instance.TileList[i].GetComponent <TileScript>().TileId&& (9 * TilesManager.Instance.TileList[i].GetComponent <TileScript>().Line) - 1 != TilesManager.Instance.TileList[i].GetComponent <TileScript>().TileId) { _tilesInRange.Add(TilesManager.Instance.TileList[i]); } List <int> newNeigh = PlayerStatic.GetNeighbourDiag(i, TilesManager.Instance.TileList[i].GetComponent <TileScript>().Line, false); foreach (int o in newNeigh) { if (!_tilesInRange.Contains(TilesManager.Instance.TileList[o])) { if (TilesManager.Instance.TileList[o].GetComponent <TileScript>().TileId >= 8 && TilesManager.Instance.TileList[o].GetComponent <TileScript>().TileId <= 72 && 9 * (TilesManager.Instance.TileList[o].GetComponent <TileScript>().Line - 1) != TilesManager.Instance.TileList[o].GetComponent <TileScript>().TileId&& (9 * TilesManager.Instance.TileList[o].GetComponent <TileScript>().Line) - 1 != TilesManager.Instance.TileList[o].GetComponent <TileScript>().TileId) { _tilesInRange.Add(TilesManager.Instance.TileList[o]); } } } } } foreach (GameObject gam in _tilesInRange) { gam.GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.EventSelect); } }
/// <summary> /// Obtient les cases s閘ectionnables /// </summary> /// <param name="usineList"></param> /// <returns></returns> List <GameObject> CreateTileList(List <GameObject> usineList) { List <GameObject> tempList = new List <GameObject>(); foreach (GameObject typeTile in usineList) { int typeTileID = int.Parse(TilesManager.Instance.TileList.IndexOf(typeTile).ToString()); //Debug.Log(typeTile); foreach (int idtyleIndex in PlayerStatic.GetNeighbourDiag(typeTileID, TilesManager.Instance.TileList[typeTileID].GetComponent <TileScript>().Line, false)) { //Tu ajoutes la tile correspondant � l'usineJ2 if (!tempList.Contains(typeTile)) { if (typeTile.GetComponent <TileScript>().Unit == null) { tempList.Add(typeTile); } } //Si le num閞o n'est pas pr閟ent dans la liste, tu l'ajoutes. if (!tempList.Contains(TilesManager.Instance.TileList[idtyleIndex])) { tempList.Add(TilesManager.Instance.TileList[idtyleIndex]); //Si il y un boolean qui est retourn� alors tu enl鑦es les 閘閙ents de la liste. if (CheckConditions(TilesManager.Instance.TileList[idtyleIndex], typeTileID) == true) { tempList.Remove(TilesManager.Instance.TileList[idtyleIndex]); } } } } //Pour chaque 閘閙ent dans la liste, tu ajoutes l'effet TileCr閍ble foreach (GameObject typeWithoutEffect in tempList) { if (!typeWithoutEffect.GetComponent <TileScript>().EffetProg.Contains(MYthsAndSteel_Enum.EffetProg.Zone_creable)) { typeWithoutEffect.GetComponent <TileScript>().EffetProg.Add(MYthsAndSteel_Enum.EffetProg.Zone_creable); } } return(tempList); }
/// <summary> /// Check si des ressources doivent être distribuées. /// </summary> public void CheckResources() { Debug.Log("Ressources"); foreach (GameObject Tile in TilesManager.Instance.ResourcesList) { TileScript S = Tile.GetComponent <TileScript>(); if (S.ResourcesCounter != 0) { if (S.Unit != null) { UnitScript US = S.Unit.GetComponent <UnitScript>(); S.RemoveRessources(1, PlayerStatic.CheckIsUnitArmy(US.GetComponent <UnitScript>(), true) == true ? 1 : 2); } } if (S.ResourcesCounter == 0) { S.RemoveEffect(MYthsAndSteel_Enum.TerrainType.Point_de_ressource); S.TerrainEffectList.Remove(MYthsAndSteel_Enum.TerrainType.Point_de_ressource); S.TerrainEffectList.Add(MYthsAndSteel_Enum.TerrainType.Point_de_ressources_vide); } } }
/// <summary> /// Fais une liste des cases s閘ectionnables autour des leader /// </summary> /// <param name="leaderArmy1"></param> void AroundLeader(bool leaderArmy1) { //Si l'arm閑 est jouer par l'arm閑 Bleu. if (leaderArmy1 == true) { foreach (GameObject unit in _leaderListRed) { if (unit != null) { int typeTileID = unit.GetComponent <UnitScript>().ActualTiledId; //Pour chaque num閞o pr閟ent dans le PlayerStatic avec la valeur qu'on a convertit pr閏閐emment. foreach (int idtyleIndex in PlayerStatic.GetNeighbourDiag(typeTileID, TilesManager.Instance.TileList[typeTileID].GetComponent <TileScript>().Line, false)) { GameObject tile = TilesManager.Instance.TileList[idtyleIndex]; //Si le num閞o n'est pas pr閟ent dans la liste, tu l'ajoutes. if (!_createLeader1.Contains(tile)) { _createLeader1.Add(tile); //Si il y un boolean qui est retourn� alors tu enl鑦es les 閘閙ents de la liste. if (CheckConditions(tile, typeTileID) == true) { _createLeader1.Remove(tile); } } } } } //Pour chaque 閘閙ent dans la liste, tu ajoutes l'effet TileCr閍ble foreach (GameObject typeWithoutEffect in _createLeader1) { if (!typeWithoutEffect.GetComponent <TileScript>().EffetProg.Contains(MYthsAndSteel_Enum.EffetProg.Zone_creable)) { typeWithoutEffect.GetComponent <TileScript>().EffetProg.Add(MYthsAndSteel_Enum.EffetProg.Zone_creable); } } } else { foreach (GameObject unit in _leaderListBlue) { if (unit != null) { int typeTileID = unit.GetComponent <UnitScript>().ActualTiledId; //Pour chaque num閞o pr閟ent dans le PlayerStatic avec la valeur qu'on a convertit pr閏閐emment. foreach (int idtyleIndex in PlayerStatic.GetNeighbourDiag(typeTileID, TilesManager.Instance.TileList[typeTileID].GetComponent <TileScript>().Line, false)) { GameObject tile = TilesManager.Instance.TileList[idtyleIndex]; //Si le num閞o n'est pas pr閟ent dans la liste, tu l'ajoutes. if (!_createLeader2.Contains(tile)) { _createLeader2.Add(tile); //Si il y un boolean qui est retourn� alors tu enl鑦es les 閘閙ents de la liste. if (CheckConditions(tile, typeTileID) == true) { _createLeader2.Remove(tile); } } } } } //Pour chaque 閘閙ent dans la liste, tu ajoutes l'effet TileCr閍ble foreach (GameObject typeWithoutEffect in _createTileJ2) { if (!typeWithoutEffect.GetComponent <TileScript>().EffetProg.Contains(MYthsAndSteel_Enum.EffetProg.Zone_creable)) { typeWithoutEffect.GetComponent <TileScript>().EffetProg.Add(MYthsAndSteel_Enum.EffetProg.Zone_creable); } } } }
public void LaunchDéploiementAccéléré() { UIInstance.Instance.ActivateNextPhaseButton(); int player = DeterminArmy(MYthsAndSteel_Enum.EventCard.Déploiement_accéléré); List <GameObject> gamList = new List <GameObject>(); //obtien les cases voisines pour chaque unité de l'armée foreach (GameObject unit in player == 1? PlayerScript.Instance.UnitRef.UnitListRedPlayer : PlayerScript.Instance.UnitRef.UnitListBluePlayer) { List <int> neighTile = PlayerStatic.GetNeighbourDiag(unit.GetComponent <UnitScript>().ActualTiledId, TilesManager.Instance.TileList[unit.GetComponent <UnitScript>().ActualTiledId].GetComponent <TileScript>().Line, false); //Check les effets de terrain pour voir si il doit ajouter la tile à la liste foreach (int i in neighTile) { //Obtient la direction de la case par rapport à l'unité MYthsAndSteel_Enum.Direction dir = PlayerStatic.CheckDirection(unit.GetComponent <UnitScript>().ActualTiledId, i); if (TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Ravin) || TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Eau)) { //La tile n'est pas ajoutée } else { switch (dir) { case MYthsAndSteel_Enum.Direction.Nord: if (!TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivière_Sud)) { gamList.Add(TilesManager.Instance.TileList[i]); } break; case MYthsAndSteel_Enum.Direction.Sud: if (!TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivière_Nord)) { gamList.Add(TilesManager.Instance.TileList[i]); } break; case MYthsAndSteel_Enum.Direction.Est: if (!TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivière_Ouest)) { gamList.Add(TilesManager.Instance.TileList[i]); } break; case MYthsAndSteel_Enum.Direction.Ouest: if (!TilesManager.Instance.TileList[i].GetComponent <TileScript>().TerrainEffectList.Contains(MYthsAndSteel_Enum.TerrainType.Rivière_Est)) { gamList.Add(TilesManager.Instance.TileList[i]); } break; } } } } if ((GameManager.Instance.ActualTurnPhase == MYthsAndSteel_Enum.PhaseDeJeu.ActionJ1 || GameManager.Instance.ActualTurnPhase == MYthsAndSteel_Enum.PhaseDeJeu.ActionJ2) && ((player == 1 && GameManager.Instance.IsPlayerRedTurn) || (player == 2 && !GameManager.Instance.IsPlayerRedTurn))) { LaunchEventTile(1, player == 1 ? true : false, gamList, "Déploiement accéléré", "Êtes-vous sur de vouloir créer une unité d'infanterie sur cette case?"); GameManager.Instance._eventCall += DéploiementAccéléré; } }
/// <summary> /// Change les stats en fonction de où se trouve l'unité /// </summary> public void ChangeStat() { // Applique les bonus/malus de terrains if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Bosquet, _selectedUnit.GetComponent <UnitScript>().ActualTiledId)) // Bosquet { _numberRangeMin.x -= 1; _numberRangeMin.y -= 1; _numberRangeMax.x -= 1; Debug.Log("BosquetEffectApplyed"); } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Colline, _selectedUnit.GetComponent <UnitScript>().ActualTiledId)) // Colline { _selectedUnit.GetComponent <UnitScript>().AttackRangeBonus += 1; Debug.Log("CollineEffectApplyed"); } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Plage, _selectedUnit.GetComponent <UnitScript>().ActualTiledId) && _selectedUnit.GetComponent <Unit_SO>().typeUnite == MYthsAndSteel_Enum.TypeUnite.Infanterie) // Plage { _numberRangeMin.x += -2; _numberRangeMin.y += -1; _numberRangeMax.x += -1; Debug.Log("PlayaEffectApplyed"); } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Haute_colline, _selectedUnit.GetComponent <UnitScript>().ActualTiledId)) // Haute colline 1 { _selectedUnit.GetComponent <UnitScript>().AttackRangeBonus = 1; Debug.Log("Haute collineEffectApplyed"); } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Haute_colline, selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId)) // Haute colline 2 { if (!PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Colline, _selectedUnit.GetComponent <UnitScript>().ActualTiledId) || !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Haute_colline, _selectedUnit.GetComponent <UnitScript>().ActualTiledId)) { _numberRangeMin.x += 2; _numberRangeMin.y += 2; _numberRangeMax.x += 2; Debug.Log("HautecollinesamerelapEffectApplyed"); } } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Maison, selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId)) // Maison { _damageMinimum -= 1; _damageMaximum -= 1; Debug.Log("Dégats Reduits"); TilesManager.Instance.TileList[selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId].GetComponent <TileScript>().TerrainEffectList.Remove(MYthsAndSteel_Enum.TerrainType.Maison); TilesManager.Instance.TileList[selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId].GetComponent <TileScript>().TerrainEffectList.Add(MYthsAndSteel_Enum.TerrainType.Ruines); Debug.Log("IkeaEffectApplyed"); } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Immeuble, selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId)) // Immeubles { _damageMinimum = 0; _damageMaximum = 0; Debug.Log("Annulés"); TilesManager.Instance.TileList[selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId].GetComponent <TileScript>().TerrainEffectList.Remove(MYthsAndSteel_Enum.TerrainType.Immeuble); TilesManager.Instance.TileList[selectedUnitEnnemy.GetComponent <UnitScript>().ActualTiledId].GetComponent <TileScript>().TerrainEffectList.Add(MYthsAndSteel_Enum.TerrainType.Ruines); Debug.Log("BigBoumIkeaEffectApplyed"); } }
/// <summary> /// Ajoute la tile à TileSelected. Pour le mvmt du joueur => Check egalement toutes les conditions de déplacement. /// </summary> /// <param name="tileId">Tile</param> public void AddMouvement(int tileId) { check = false; if (_isInMouvement) { if (newNeighbourId.Contains(tileId)) // Si cette case est dans la range de l'unité. { if (selectedTileId.Contains(tileId)) { // Supprime toutes les cases sélectionnées à partir de l'ID tileId. for (int i = selectedTileId.IndexOf(tileId); i < selectedTileId.Count; i++) { if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Forêt, selectedTileId[i]) || PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Mont, selectedTileId[i])) { // Redistribution du Range à chaque suppression de case. if (RouteBonus) { RouteBonus = false; if (mUnit.GetComponent <UnitScript>().MoveLeft + 1 > mUnit.GetComponent <UnitScript>().UnitSO.MoveSpeed) { mUnit.GetComponent <UnitScript>().MoveSpeedBonus += 1; } else { mUnit.GetComponent <UnitScript>().MoveLeft += 1; } } else { if (mUnit.GetComponent <UnitScript>().MoveLeft + 2 > mUnit.GetComponent <UnitScript>().UnitSO.MoveSpeed) { int moveToAdd = 2 - (mUnit.GetComponent <UnitScript>().UnitSO.MoveSpeed - mUnit.GetComponent <UnitScript>().MoveLeft); mUnit.GetComponent <UnitScript>().MoveLeft = mUnit.GetComponent <UnitScript>().UnitSO.MoveSpeed; mUnit.GetComponent <UnitScript>().MoveSpeedBonus += moveToAdd; } else { mUnit.GetComponent <UnitScript>().MoveLeft += 2; } } temp.Add(selectedTileId[i]); TilesManager.Instance.TileList[selectedTileId[i]].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _selectedSprite); // Repasse les sprites en apparence "séléctionnable". // Déselectionne les cases. hxh TilesManager.Instance.TileList[selectedTileId[i]].GetComponent <TileScript>().DesActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveArrow); } else { // Redistribution du Range à chaque suppression de case. if (mUnit.GetComponent <UnitScript>().MoveLeft + 1 > mUnit.GetComponent <UnitScript>().UnitSO.MoveSpeed) { int moveToAdd = 1 - (mUnit.GetComponent <UnitScript>().UnitSO.MoveSpeed - mUnit.GetComponent <UnitScript>().MoveLeft); mUnit.GetComponent <UnitScript>().MoveLeft = mUnit.GetComponent <UnitScript>().UnitSO.MoveSpeed; mUnit.GetComponent <UnitScript>().MoveSpeedBonus += moveToAdd; } else { if (RouteBonus) { RouteBonus = false; } else { mUnit.GetComponent <UnitScript>().MoveLeft += 1; } } temp.Add(selectedTileId[i]); TilesManager.Instance.TileList[selectedTileId[i]].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _selectedSprite); // Repasse les sprites en apparence "séléctionnable". } } foreach (int i in temp) { selectedTileId.Remove(i); } temp.Clear(); Attaque.Instance.RemoveTileSprite(); Attaque.Instance.StartAttackSelectionUnit(selectedTileId[selectedTileId.Count - 1]); } // Si cette case est déjà selectionnée. else if (PlayerStatic.IsNeighbour(tileId, selectedTileId[selectedTileId.Count - 1], TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().Line, false)) { // et qu'il reste du mvmt, on assigne la nouvelle case selectionnée à la liste SelectedTile. if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Est, tileId) && PlayerStatic.CheckDirection(tileId, selectedTileId[selectedTileId.Count - 1]) == MYthsAndSteel_Enum.Direction.Est && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Est, tileId)) { check = true; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Nord, tileId) && PlayerStatic.CheckDirection(tileId, selectedTileId[selectedTileId.Count - 1]) == MYthsAndSteel_Enum.Direction.Nord && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Nord, tileId)) { check = true; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Sud, tileId) && PlayerStatic.CheckDirection(tileId, selectedTileId[selectedTileId.Count - 1]) == MYthsAndSteel_Enum.Direction.Sud && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Sud, tileId)) { check = true; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Ouest, tileId) && PlayerStatic.CheckDirection(tileId, selectedTileId[selectedTileId.Count - 1]) == MYthsAndSteel_Enum.Direction.Ouest && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Ouest, tileId)) { check = true; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Forêt, tileId) || PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Mont, tileId)) { if (mUnit.GetComponent <UnitScript>().MoveLeft >= 2 && !check) { check = true; mUnit.GetComponent <UnitScript>().MoveLeft -= 2; // sup 2 mvmt. selectedTileId.Add(tileId); TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _tileSprite); Attaque.Instance.RemoveTileSprite(); Attaque.Instance.StartAttackSelectionUnit(tileId); } else if (mUnit.GetComponent <UnitScript>().MoveLeft + mUnit.GetComponent <UnitScript>().MoveSpeedBonus >= 2 && !check) { int moveToDecrease = 2; moveToDecrease -= mUnit.GetComponent <UnitScript>().MoveLeft; mUnit.GetComponent <UnitScript>().MoveLeft = 0; mUnit.GetComponent <UnitScript>().MoveSpeedBonus -= moveToDecrease; } else if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Route, selectedTileId[selectedTileId.Count - 1]) && (mUnit.GetComponent <UnitScript>().MoveLeft + mUnit.GetComponent <UnitScript>().MoveSpeedBonus) == 1 && !RouteBonus && !check) { RouteBonus = true; check = true; if (mUnit.GetComponent <UnitScript>().MoveLeft > 0) { mUnit.GetComponent <UnitScript>().MoveLeft--; } else { mUnit.GetComponent <UnitScript>().MoveSpeedBonus--; } selectedTileId.Add(tileId); TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _tileSprite); Attaque.Instance.RemoveTileSprite(); Attaque.Instance.StartAttackSelectionUnit(tileId); } else { check = true; Debug.Log("La tile d'ID : " + tileId + " est une foret ou un mont."); } } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Route, selectedTileId[selectedTileId.Count - 1]) && (mUnit.GetComponent <UnitScript>().MoveLeft + mUnit.GetComponent <UnitScript>().MoveSpeedBonus) == 0 && !RouteBonus) { RouteBonus = true; check = true; selectedTileId.Add(tileId); TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _tileSprite); Attaque.Instance.RemoveTileSprite(); Attaque.Instance.StartAttackSelectionUnit(tileId); } if (!check) { if (mUnit.GetComponent <UnitScript>().MoveLeft > 0) { mUnit.GetComponent <UnitScript>().MoveLeft--; // sup 1 mvmt. selectedTileId.Add(tileId); TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _tileSprite); Attaque.Instance.RemoveTileSprite(); Attaque.Instance.StartAttackSelectionUnit(tileId); } else if (mUnit.GetComponent <UnitScript>().MoveSpeedBonus > 0) { mUnit.GetComponent <UnitScript>().MoveSpeedBonus--; // sup 1 mvmt. selectedTileId.Add(tileId); TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _tileSprite); Attaque.Instance.RemoveTileSprite(); Attaque.Instance.StartAttackSelectionUnit(tileId); } } } // Sinon, si cette case est bien voisine de l'ancienne selection. else // Sinon cette case est trop loin de l'ancienne seletion. { Debug.Log("La tile d'ID : " + tileId + " est trop loin de la tile d'ID: " + selectedTileId[selectedTileId.Count - 1]); } } // Sinon cette case est hors de la range de l'unité. else { Debug.Log("La tile d'ID : " + tileId + " est trop loin de la tile d'ID: " + selectedTileId[selectedTileId.Count - 1]); } } if (selectedTileId.Count > 1 && TilesManager.Instance.TileList[selectedTileId[selectedTileId.Count - 1]].GetComponent <TileScript>().Unit == null) { UIInstance.Instance.ActivationUnitPanel.ShowMovementPanel(); } else { UIInstance.Instance.ActivationUnitPanel.CloseMovementPanel(); } //DisplayMoveArrow(); }
/// <summary> /// Cette fonction "highlight" les cases atteignables par l'unité sur la case sélectionnée. /// </summary> /// <param name="tileId">Tile centrale</param> /// <param name="Range">Range de l'unité</param> public void Highlight(int tileId, int Range, int lasttileId) { if (Range > 0) { foreach (int ID in PlayerStatic.GetNeighbourDiag(tileId, TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().Line, false)) { if (ID == lasttileId) { continue; } TileScript TileSc = TilesManager.Instance.TileList[ID].GetComponent <TileScript>(); bool i = false; if (GameManager.Instance.IsPlayerRedTurn) { if (TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit != null) { if (!TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit.GetComponent <UnitScript>().UnitSO.IsInRedArmy) { i = true; } if (TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit.GetComponent <UnitScript>().UnitSO.IsInRedArmy&& Range == 1) { i = true; } } } if (!GameManager.Instance.IsPlayerRedTurn) { if (TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit != null) { if (TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit.GetComponent <UnitScript>().UnitSO.IsInRedArmy) { i = true; } if (!TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit.GetComponent <UnitScript>().UnitSO.IsInRedArmy&& Range == 1) { i = true; } } } foreach (MYthsAndSteel_Enum.TerrainType Type in TileSc.TerrainEffectList) { if (EffectToCheck.Contains(Type)) { if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Ravin, ID) || PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Eau, ID)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Est, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Est && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Est, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Nord, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Nord && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Nord, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Sud, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Sud && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Sud, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Ouest, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Ouest && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Ouest, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Mont, ID) || PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Forêt, ID)) { if (Range >= 2 && !i) { i = true; TilesManager.Instance.TileList[ID].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _selectedSprite); if (!newNeighbourId.Contains(ID)) { newNeighbourId.Add(ID); } Highlight(ID, Range - 2, tileId); break; } else { i = true; break; } } } } if (!i) { TilesManager.Instance.TileList[ID].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _selectedSprite); if (!newNeighbourId.Contains(ID)) { newNeighbourId.Add(ID); } Highlight(ID, Range - 1, tileId); } } } // Si il s'agit d'une route et que la range est de 0. if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Route, tileId) && Range == 0) { foreach (int ID in PlayerStatic.GetNeighbourDiag(tileId, TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().Line, false)) { if (ID == lasttileId) { continue; } TileScript TileSc = TilesManager.Instance.TileList[ID].GetComponent <TileScript>(); bool i = false; if (TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit != null) { i = true; } foreach (MYthsAndSteel_Enum.TerrainType Type in TileSc.TerrainEffectList) { if (EffectToCheck.Contains(Type)) { if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Ravin, ID) || PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Eau, ID)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Est, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Est && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Est, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Nord, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Nord && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Nord, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Sud, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Sud && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Sud, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Ouest, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Ouest && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Ouest, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Mont, ID) || PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Forêt, ID)) { i = true; } } } if (!i) { TilesManager.Instance.TileList[ID].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _selectedSprite); if (!newNeighbourId.Contains(ID)) { newNeighbourId.Add(ID); } Highlight(ID, -1, tileId); } } } // Si il s'agit d'une route et que la range est de 1. if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Route, tileId) && Range == 1) { foreach (int ID in PlayerStatic.GetNeighbourDiag(tileId, TilesManager.Instance.TileList[tileId].GetComponent <TileScript>().Line, false)) { if (ID == lasttileId) { continue; } TileScript TileSc = TilesManager.Instance.TileList[ID].GetComponent <TileScript>(); bool i = false; if (TilesManager.Instance.TileList[ID].GetComponent <TileScript>().Unit != null) { i = true; } foreach (MYthsAndSteel_Enum.TerrainType Type in TileSc.TerrainEffectList) { if (EffectToCheck.Contains(Type)) { if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Ravin, ID) || PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Eau, ID)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Est, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Est && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Est, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Nord, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Nord && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Nord, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Sud, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Sud && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Sud, tileId)) { i = true; break; } if (PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Rivière_Ouest, tileId) && PlayerStatic.CheckDirection(tileId, ID) == MYthsAndSteel_Enum.Direction.Ouest && !PlayerStatic.CheckTiles(MYthsAndSteel_Enum.TerrainType.Pont_Ouest, tileId)) { i = true; break; } } } if (!i) { TilesManager.Instance.TileList[ID].GetComponent <TileScript>().ActiveChildObj(MYthsAndSteel_Enum.ChildTileType.MoveSelect, _selectedSprite); if (!newNeighbourId.Contains(ID)) { newNeighbourId.Add(ID); } Highlight(ID, -1, lasttileId); } } } }