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