コード例 #1
0
ファイル: CapaciteUtils.cs プロジェクト: jdeon/SCGame
    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);
    }
コード例 #2
0
ファイル: CapaciteUtils.cs プロジェクト: jdeon/SCGame
    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);
    }