private static HashSet <ISelectionnable> getRessourceProvenanceCible(CapaciteDTO capaciteSource, NetworkInstanceId netIdJoueurSource, NetworkInstanceId netIdJoueurCible, CarteMetierAbstract carteSource) { HashSet <ISelectionnable> listResult = new HashSet <ISelectionnable> (); foreach (string conditionCible in capaciteSource.ConditionsCible) { string[] tabConditionCible = conditionCible.Split(char.Parse("-")); if (tabConditionCible.Length >= 2) { int idConditionCible = int.Parse(tabConditionCible [0]); string allegeance = tabConditionCible [1]; if (idConditionCible == ConstanteIdObjet.ID_CONDITION_CIBLE_RESSOURCE) { HashSet <Joueur> joueursCible = getJoueursCible(conditionCible, netIdJoueurSource, netIdJoueurCible, carteSource); foreach (Joueur joueurRessource in joueursCible) { if (!capaciteSource.AppelUnique || !joueurRessource.RessourceMetal.containCapacityWithId(capaciteSource.Id)) { listResult.Add(joueurRessource.RessourceMetal); } if (!capaciteSource.AppelUnique || !joueurRessource.RessourceCarburant.containCapacityWithId(capaciteSource.Id)) { listResult.Add(joueurRessource.RessourceCarburant); } if (!capaciteSource.AppelUnique || !joueurRessource.RessourceXP.containCapacityWithId(capaciteSource.Id)) { listResult.Add(joueurRessource.RessourceXP); } } } else if (ConditionCarteUtils.listIdCondtionCibleCarte.Contains(idConditionCible)) { List <IConteneurCarte> emplacementsOccuper = ConvertUtils.convertToListParent <IConteneurCarte, EmplacementMetierAbstract>(EmplacementUtils.getListEmplacementOccuperJoueur <EmplacementMetierAbstract> (NetworkInstanceId.Invalid)); List <CarteMetierAbstract> listCartesCibleProbable = ConditionCarteUtils.getMethodeCarteCible(idConditionCible, allegeance, emplacementsOccuper, carteSource, netIdJoueurSource); if (capaciteSource.AppelUnique) { foreach (CarteMetierAbstract carteProbable in listCartesCibleProbable) { //On vérifie que la carte ne possède pas déjà l'effet if (!carteProbable.containCapacityWithId(capaciteSource.Id)) { listResult.Add(carteProbable); } } } else { listResult.UnionWith(ConvertUtils.convertToListParent <ISelectionnable, CarteMetierAbstract> (listCartesCibleProbable)); } } } } return(listResult); }
private static List <CarteMetierAbstract> getCartesCible(CarteMetierAbstract carteOrigin, CarteMetierAbstract carteCible, CapaciteDTO capacite, NetworkInstanceId netIdJoueur) { List <CarteMetierAbstract> listCartesCible = new List <CarteMetierAbstract> (); List <IConteneurCarte> listEmplacementsCible = new List <IConteneurCarte> (); foreach (string conditionEmplacement in capacite.ConditionsEmplacement) { string[] tabConditionEmplacement = conditionEmplacement.Split(char.Parse("-")); if (tabConditionEmplacement.Length >= 2) { int idEmplacement = int.Parse(tabConditionEmplacement [0]); listEmplacementsCible.AddRange(ConditionEmplacementUtils.getMethodeEmplacement(idEmplacement, tabConditionEmplacement[1], carteOrigin.getConteneur(), carteCible, netIdJoueur)); } } //TODO si capacite a cible pas besoin de faire la suite foreach (string conditionCible in capacite.ConditionsCible) { string[] tabConditionCible = conditionCible.Split(char.Parse("-")); if (tabConditionCible.Length >= 2) { int idCible = int.Parse(tabConditionCible [0]); List <CarteMetierAbstract> listCartesCibleProbable = ConditionCarteUtils.getMethodeCarteCible(idCible, tabConditionCible[1], listEmplacementsCible, carteOrigin, netIdJoueur); if (capacite.AppelUnique) { foreach (CarteMetierAbstract carteProbable in listCartesCibleProbable) { //On vérifie que la carte ne possède pas déjà l'effet if (!carteProbable.containCapacityWithId(capacite.Id)) { listCartesCible.Add(carteProbable); } } } else { listCartesCible.AddRange(listCartesCibleProbable); } } } return(listCartesCible); }