//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; }
public Card initFromInvocation(Invocation InvTemp) { if (InvTemp.type[0] == Enums.Type.Elemental) { Elemental card = new Elemental(InvTemp.name); card.name = (string)InvTemp.name.Clone(); card.manaCost = new Dictionary<Enums.Mana, int>(InvTemp.manaCost); card.type = InvTemp.type[0]; card.subtype = InvTemp.subType[0]; card.powers = new List<Power>(InvTemp.powers); card.castLimit = InvTemp.castLimit; card.card = (string)InvTemp.getCard().Clone(); card.strength = InvTemp.strength; card.constitution = InvTemp.constitution; card.hp = card.constitution; card.rank = InvTemp.rank; if (card.rank > 0) card.from = (string)InvTemp.from.Clone(); card.role = InvTemp.role; card.properties = new List<Enums.Properties>(InvTemp.properties); card.onAppear = new List<string>(InvTemp.onAppear); card.onDeath = new List<string>(InvTemp.onDeath); return card; } if (InvTemp.type[0] == Enums.Type.Ritual) { Ritual card = new Ritual(InvTemp.name); card.name = (string)InvTemp.name.Clone(); card.manaCost = new Dictionary<Enums.Mana, int>(InvTemp.manaCost); card.type = InvTemp.type[0]; card.subtype = InvTemp.subType[0]; card.powers = new List<Power>(InvTemp.powers); card.castLimit = InvTemp.castLimit; card.card = (string)InvTemp.getCard().Clone(); return card; } if (InvTemp.type[0] == Enums.Type.Spirit) { Spirit card = new Spirit(InvTemp.name); card.name = (string)InvTemp.name.Clone(); card.manaCost = new Dictionary<Enums.Mana, int>(InvTemp.manaCost); card.type = InvTemp.type[0]; card.subtype = InvTemp.subType[0]; card.powers = new List<Power>(InvTemp.powers); card.castLimit = InvTemp.castLimit; card.card = (string)InvTemp.getCard().Clone(); Spirit SpiritTemp = new Spirit(this.name); SpiritTemp.name = (string)InvTemp.name.Clone(); SpiritTemp.manaCost = new Dictionary<Enums.Mana, int>(InvTemp.manaCost); SpiritTemp.type = InvTemp.type[0]; SpiritTemp.subtype = InvTemp.subType[0]; SpiritTemp.powers = new List<Power>(InvTemp.powers); SpiritTemp.castLimit = InvTemp.castLimit; SpiritTemp.card = InvTemp.getCard(); SpiritTemp.essence = InvTemp.essence; SpiritTemp.onAppear = new List<string>(InvTemp.onAppear); SpiritTemp.onDeath = new List<string>(InvTemp.onDeath); return card; } return null; }