private void ClearDeaths(Board defenderBoard) { Dictionary <IMinion, int> deaths = new Dictionary <IMinion, int>(); for (int i = 0; i < PlayedMinions.Count; i++) { var minion = PlayedMinions[i]; if (minion.IsDead) { deaths[minion] = i; int index = PlayedMinions.IndexOf(minion); PlayedMinions.Remove(minion); Graveyard.Add(minion); } } foreach (var kv in deaths) { kv.Key.OnDeath(new TriggerParams() { Activator = kv.Key, Board = this, RivalBoard = defenderBoard, Index = kv.Value }); OnMinionDied(kv.Key, defenderBoard); } }
public IMinion RemoveSmallestMinion() { var minion = PlayedMinions.OrderBy(m => m.Health).ThenBy(m => m.Attack).First(); Remove(minion); return(minion); }
private void ClearDeaths() { Dictionary <IMinion, int> deaths = new Dictionary <IMinion, int>(); for (int i = 0; i < PlayedMinions.Count; i++) { var minion = PlayedMinions[i]; if (minion.IsDead) { deaths[minion] = i; int index = PlayedMinions.IndexOf(minion); Remove(minion); Graveyard.Add(minion); } } foreach (var kv in deaths) { int auraLevel = BoardAuras.Where(a => a.Value == AuraType.Deathrattle).Select(b => b.Key.Level).DefaultIfEmpty().Max() + 1; for (int i = 0; i < auraLevel; i++) { kv.Key.OnDeath(new TriggerParams() { Activator = kv.Key, Board = this, RivalBoard = RivalBoard, Index = kv.Value }); } OnMinionDied(kv.Key); } }
public IMinion RemoveRandomMinion() { int index = RandomNumber(0, PlayedMinions.Count); var minion = PlayedMinions[index]; PlayedMinions.Remove(minion); return(minion); }
public Board Clone() { var board = this.MemberwiseClone() as Board; board.PlayedMinions = new ObservableCollection <IMinion>(PlayedMinions.Select(m => m.Clone()).ToList()); board.BoardAuras.Clear(); board.Graveyard = new List <IMinion>(); return(board); }
private void OnMinionTookDamage(IMinion tookDamage) { foreach (var minion in PlayedMinions.Where(m => m != tookDamage)) { minion.OnMinionDamaged(new TriggerParams() { Activator = minion, Board = this, Target = tookDamage }); } }
public void BuffAllOfType(IMinion buffer, MinionType type, int attack = 0, int health = 0, Attribute attributes = Attribute.None, Action <TriggerParams> deathRattle = null, bool aura = false) { foreach (var minion in PlayedMinions.Where(m => m != buffer)) { if ((type & minion.MinionType) != 0) { Buff(buffer, minion, attack, health, attributes, deathRattle, aura); } } }
public void Remove(IMinion defendingMinion) { int i = PlayedMinions.IndexOf(defendingMinion); if (i < NextAttacker) { NextAttacker--; } PlayedMinions.Remove(defendingMinion); }
private void OnMinionDied(IMinion deadMinion, Board defenderBoard) { foreach (var minion in PlayedMinions.Where(m => m != deadMinion)) { minion.OnMinionDied(new TriggerParams() { Activator = minion, Target = deadMinion, Board = this, RivalBoard = defenderBoard }); } }
public IMinion GetMinionWithMinAttack() { List <IMinion> targets = PlayedMinions.GroupBy(m => m.Attack).OrderBy(g => g.Key).FirstOrDefault()?.Select(m => m).ToList(); if (targets != null) { return(targets[RandomNumber(0, targets.Count)]); } return(null); }
public void Play(IMinion minion, int index = 0, IMinion target = null) { OnMinionSummon(minion, index); PlayedMinions.Insert(index, minion); for (int j = 0; j < minion.Level; j++) { minion.OnPlayed(new TriggerParams() { Activator = minion, Index = index, Target = target, Board = this, Player = Player }); } }
public IMinion GetRandomMinion(MinionType type = MinionType.All, List <IMinion> excludes = null) { var minions = PlayedMinions.Except(excludes ?? new List <IMinion>()).Where(m => (m.MinionType & type) != 0).ToArray(); if (!minions.Any()) { return(null); } var minion = minions[RandomNumber(0, minions.Length)]; return(minion); }
public void Summon(string minionName, int index, Direction direction = Direction.Right, int amount = 1) { for (int i = 0; i < amount; i++) { if (IsFull) { return; } var summoned = Pool.Instance.GetFreshCopy(minionName); PlayedMinions.Insert(index + (int)direction, summoned); OnMinionSummon(summoned, index); } }
private void ActivateSummonAura(int index, Direction direction, IMinion summoned) { int auraLevel = BoardAuras.Where(a => a.Value == AuraType.Summon).Select(b => b.Key.Level).DefaultIfEmpty().Max(); for (int j = 0; j < auraLevel; j++) { if (IsFull) { break; } var copy = summoned.Clone(); PlayedMinions.Insert(index + (int)direction, copy); } }
public IMinion GetRandomDefender() { if (IsEmpty) { return(null); } var taunters = PlayedMinions.Where(m => m.Attributes.HasFlag(Attribute.Taunt)).ToArray(); if (taunters.Any()) { return(taunters[RandomNumber(0, taunters.Length)]); } return(PlayedMinions[RandomNumber(0, PlayedMinions.Count)]); }
private List <IMinion> GetAdjacentMinions(IMinion minion) { List <IMinion> adjacent = new List <IMinion>(); int index = PlayedMinions.IndexOf(minion); int right = index - 1; int left = index + 1; if (right >= 0) { adjacent.Add(PlayedMinions[right]); } if (left < PlayedMinions.Count) { adjacent.Add(PlayedMinions[left]); } return(adjacent); }
public void Play(IMinion minion, int index = 0, IMinion target = null) { OnMinionSummon(minion, index); minion.OnApplyAura(new TriggerParams() { Activator = minion, Index = index, Board = this, Player = Player }); int auraLevel = BoardAuras.Where(a => a.Value == AuraType.BattleCry).Select(b => b.Key.Level).DefaultIfEmpty().Max() + 1; PlayedMinions.Insert(index, minion); for (int j = 0; j < auraLevel; j++) { minion.OnPlayed(new TriggerParams() { Activator = minion, Index = index, Target = target, Board = this, Player = Player }); } }
public void TryMagnet(IMinion magnetic, int index) { if (index++ > PlayedMinions.Count) { return; } var minion = PlayedMinions[index]; if ((magnetic.ValidTargets & minion.MinionType) != 0) { minion.Attack += magnetic.Attack; minion.Health += magnetic.Health; minion.Attributes |= magnetic.Attributes; PlayedMinions.Remove(magnetic); Pool.Instance.Return(magnetic); } }
public bool Controls(MinionType murloc, IMinion exclude = null) { return(PlayedMinions.Any(m => (m.MinionType & MinionType.Murloc) != 0 && (exclude == null || m != exclude))); }
public List <IMinion> GetValidTargets(MinionType validTargets) { return(PlayedMinions.Where(m => (validTargets & m.MinionType) != 0).ToList()); }
public void Remove(IMinion minion) { RemoveAuras(minion); PlayedMinions.Remove(minion); }