public LinkedList<Invocation> getCards(List<Enums.Filter> filterList,Mana manaParam) //questa funzione filtra le carte e ritorna una lista 
        {
            if (filterList.Count == 0) // Se non ci sono filtri, ritorna la lista di tutte le carte.
                return Invocations;

            LinkedList<Invocation> InvTempList = new LinkedList<Invocation>();//lista temporanea su cui caricare le carte filtrate.
            

            foreach (Invocation InvTemp in Invocations)
            {
                int filterCount = 0; // contatore dei controlli sui filtri.

                if (filterList.Contains(Enums.Filter.Playable)) //Se tra i filtri c'è Playable, verifica che la carta possa essere pagata.
                {
                    if (manaParam.CanPay(InvTemp.manaCost))
                        filterCount++;
                    else
                        continue; // se la carta non è Playble, il foreach passa direttamente all'iterazione successiva senza controllare gli altri filtri.
                }
                foreach (Enums.Filter filtro in filterList)// filtra le carte in base alla lista di filtri
                {                                                  
                        if (InvTemp.type.Equals(filtro) ||
                        InvTemp.role.Equals(filtro) ||
                        InvTemp.subType.Equals(filtro) ||
                        InvTemp.RANK.Equals(filtro.ToString()))
                        filterCount++;             
                }

                if (filterCount == filterList.Count)//se tutti i controlli vengono passati, aggiunge la carta.
                    InvTempList.AddLast(InvTemp);
            }
            return InvTempList;
        }
        //questa funzione filtra le carte e ritorna una lista
        public LinkedList<Invocation> getCards(List<Enums.Filter> filterList,Mana manaParam)
        {
            if (filterList.Count == 0) // Se non ci sono filtri, ritorna la lista di tutte le carte.
                return Invocations;

            LinkedList<Invocation> InvTempList = new LinkedList<Invocation>();//lista temporanea su cui caricare le carte filtrate.

            foreach (Invocation InvTemp in Invocations)
            {
                int filterCount = 0; // contatore dei controlli sui filtri.

                if (filterList.Contains(Enums.Filter.Playable)) //Se tra i filtri c'è Playable, verifica che la carta possa essere pagata.
                {
                    bool canPlay = true;
                    if (InvTemp.type.Contains(Enums.Type.Ritual))
                    {
                        Ritual RitTemp = new Ritual(); // Se la carta è un rituale, si verifica anche che vi sia almeno un bersaglio valido.
                        RitTemp.initFromInvocation(InvTemp);
                        List<Enums.Target> targetList = new List<Enums.Target>(); // lista bersagli validi del rituale.
                        foreach (Power powTemp in RitTemp.powers)
                            foreach (string microaction in powTemp.microActions)
                                foreach (Enums.Target targTemp in MicroActions.getTargets(microaction))
                                    targetList.Add(targTemp);
                        if (targetList != null)
                            foreach (Enums.Target tTemp in targetList) // controlla che ci sia almeno 1 target valido.
                            {
                                if (tTemp == Enums.Target.Enemy)
                                    if (Game.EnemyElementals.Count == 0)
                                        canPlay = false;
                                if (tTemp == Enums.Target.Ally)
                                    if (Game.AllyElementals.Count == 0)
                                        canPlay = false;
                                if (tTemp == Enums.Target.Spirit)
                                    if (Game.EnemySpirits.Count == 0 && Game.AllySpirits.Count == 0)
                                        canPlay = false;
                                if (tTemp == Enums.Target.Elemental)
                                    if (Game.AllyElementals.Count == 0 && Game.EnemyElementals.Count == 0)
                                        canPlay = false;
                            }
                    }
                    if (manaParam.CanPay(InvTemp.manaCost) && canPlay)
                        filterCount++;
                    else
                        continue; // se la carta non è Playble, il foreach passa direttamente all'iterazione successiva senza controllare gli altri filtri.
                }
                foreach (Enums.Filter filtro in filterList)// filtra le carte in base alla lista di filtri
                {
                        if (containsType(InvTemp, filtro) ||
                        containsRole(InvTemp, filtro) ||
                        containsSubType(InvTemp, filtro) ||
                        InvTemp.RANK.Equals(filtro.ToString().ToUpper())) //da modificare perche' contiene rank1 non solo 1
                        filterCount++;
                }

                if (filterCount == filterList.Count)//se tutti i controlli vengono passati, aggiunge la carta.
                    InvTempList.AddLast(InvTemp);
            }
            return InvTempList;
        }
示例#3
0
 public Player(string name, int idTemp)
 {
     this.Name = name;
     this.hp = maxHp;
     this.id = idTemp;
     mana = new Mana(); //alloca e genera i mana random 
                  
     //metti tutta la lista cards a null
 }
        public void GameEventManager_menuRequest(List<string> filter,string mana)  //il mana deve essere in questo formato ":Fire 2:Earth 3" ecc ecc
        {
            List<Enums.Filter> tempFilter = new List<Enums.Filter>();
            Mana tempMana = new Mana();
            foreach (string temp in filter)
                tempFilter.Add((Enums.Filter)Enum.Parse(typeof(Enums.Filter), temp)); //aggiungo i tipi di filtri da string a Enums.filter

            string[] parseMana = mana.Split(':');

            
            foreach(string stringTemp in parseMana)
            {
                if(stringTemp != "") //la prima stringa sara' vuota
                {
                    string[] subDivisioString = stringTemp.Split(' ');
                    tempMana.valueList.Add((Enums.Mana)Enum.Parse(typeof(Enums.Mana), subDivisioString[0]), Int32.Parse(subDivisioString[1])); //carico i valori del mana direttamente nella lista
                }
            }
            game.MenuRequest(tempFilter,tempMana);

        }
        public void sendMana(Mana mana)
        {
            //il mana verra' inviato cosi' " E:1 F:1 W:1 L:1 D:1"
            string manaString = " E:"+ mana.valueList[Enums.Mana.Earth]+
                                " F:" + mana.valueList[Enums.Mana.Fire] +
                                " W:" + mana.valueList[Enums.Mana.Water] +
                                " L:" + mana.valueList[Enums.Mana.Life] +
                                " D:" + mana.valueList[Enums.Mana.Death];
            GameEventManager.SendMana(manaString); //invio il mana del player alla gui

        }
 public void MenuRequest(List<Enums.Filter> filtrerList, Mana mana)
 {
     LinkedList<Invocation> cardList = bibliotheca.getCards(filtrerList, mana);
     comm.MenuFiltered(cardList);
 }