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; }