public static MoreSpecificMobCardType GetMoreSpecificCardType(Handcard hc, SpecificCardType specificCardType) { switch (specificCardType) { case SpecificCardType.MobsRanger: return((IsShortDistance(hc)) ? MoreSpecificMobCardType.ShortDistance : MoreSpecificMobCardType.LongDistance); case SpecificCardType.MobsTank: return(IsMobsBuildingAttacker(hc) ? MoreSpecificMobCardType.BuildingAttacker : IsFlying(hc) ? MoreSpecificMobCardType.Flying : MoreSpecificMobCardType.NotFlying); case SpecificCardType.MobsFlying: return(IsMobsDamageDealer(hc) ? MoreSpecificMobCardType.DamageDealer : MoreSpecificMobCardType.Flying); case SpecificCardType.MobsDamageDealer: return((IsMobsAOE(hc)) ? MoreSpecificMobCardType.AOEGround : (IsMobsFlyingAttack(hc)) ? MoreSpecificMobCardType.FlyingAttack : (IsFlying(hc)) ? MoreSpecificMobCardType.Flying : MoreSpecificMobCardType.NotFlying); case SpecificCardType.MobsBigGroup: break; case SpecificCardType.MobsAOE: return((IsAOEAll(hc)) ? MoreSpecificMobCardType.AOEAll : MoreSpecificMobCardType.AOEGround); case SpecificCardType.MobsBuildingAttacker: break; case SpecificCardType.MobsFlyingAttack: break; } return(MoreSpecificMobCardType.None); }
public static IEnumerable <Handcard> GetOwnHandCards(Playfield p, boardObjType cardType, SpecificCardType sCardType, MoreSpecificMobCardType msCardType = MoreSpecificMobCardType.None) { var cardsOfType = p.ownHandCards.Where(n => n.card.type == cardType).ToArray(); if (cardsOfType.Length == 0) { return(cardsOfType); } Func <Handcard, bool> @delegate = (n) => true; Func <Handcard, bool> @msDelegate = (n) => true; switch (sCardType) { case SpecificCardType.All: break; // Mobs case SpecificCardType.MobsTank: @delegate = IsMobsTank; break; case SpecificCardType.MobsRanger: @delegate = IsMobsRanger; break; case SpecificCardType.MobsBigGroup: @delegate = IsMobsBigGroup; break; case SpecificCardType.MobsDamageDealer: @delegate = IsMobsDamageDealer; break; case SpecificCardType.MobsBuildingAttacker: @delegate = IsMobsBuildingAttacker; break; case SpecificCardType.MobsFlyingAttack: @delegate = IsMobsFlyingAttack; break; // Buildings case SpecificCardType.BuildingsDefense: @delegate = IsBuildingsDefense; // TODO: Define break; case SpecificCardType.BuildingsAttack: @delegate = IsBuildingsAttack; // TODO: Define break; case SpecificCardType.BuildingsSpawning: @delegate = IsBuildingsSpawning; break; case SpecificCardType.BuildingsMana: @delegate = (n) => false; break; // TODO: ManaProduction // Spells case SpecificCardType.SpellsDamaging: @delegate = IsSpellsDamaging; break; case SpecificCardType.SpellsNonDamaging: @delegate = IsSpellsNonDamaging; break; case SpecificCardType.SpellsTroopSpawning: @delegate = IsSpellsTroopSpawning; // TODO: Check break; case SpecificCardType.SpellsBuffs: @delegate = IsSpellBuff; // TODO: Check break; default: @delegate = (n) => false; break; } switch (msCardType) { case MoreSpecificMobCardType.None: break; case MoreSpecificMobCardType.ShortDistance: @msDelegate = IsShortDistance; break; case MoreSpecificMobCardType.LongDistance: @msDelegate = IsLongDistance; break; case MoreSpecificMobCardType.BuildingAttacker: @msDelegate = IsBuildingsAttack; break; case MoreSpecificMobCardType.AOEGround: @msDelegate = IsAOEGround; break; case MoreSpecificMobCardType.AOEAll: @msDelegate = IsAOEAll; break; case MoreSpecificMobCardType.FlyingAttack: @msDelegate = IsMobsFlyingAttack; break; case MoreSpecificMobCardType.Flying: @msDelegate = IsFlying; break; case MoreSpecificMobCardType.NotFlying: @msDelegate = IsNotFlying; break; case MoreSpecificMobCardType.DamageDealer: @msDelegate = IsMobsDamageDealer; break; case MoreSpecificMobCardType.NoBigGroup: @msDelegate = IsNoBigGroup; break; } if (@msDelegate == null) { return(cardsOfType.Where(@delegate).ToArray()); } else { return(cardsOfType.Where(@delegate).Where(msDelegate).ToArray()); } }