public InternalCardData(CardInstance card, int zonePosition) { Guid = card.Guid; Zone = card.Zone; ZonePosition = zonePosition; OwnerPlayerIndex = card.Owner.Index; Model = card.Model; var manaCost = card.Behaviors.Get<Behaviors.ManaCost>(); SummonCost = manaCost != null ? manaCost.Cost : -1; var warrior = card.Warrior; IsWarrior = warrior != null; AttackAndInitialAttack = new Tuple<int, int>(warrior != null ? warrior.Attack : -1, warrior != null ? warrior.InitialAttack : -1); LifeAndInitialLife = new Tuple<int, int>(warrior != null ? warrior.Life : -1, warrior != null ? warrior.InitialLife : -1); IsWarriorCoolingDown = warrior != null && warrior.State == Behaviors.WarriorState.CoolingDown; IsAssist = card.Behaviors.Has<Behaviors.Assist>(); IsAssistActivated = card.IsActivatedAssist; IsInstant = card.Behaviors.Has<Behaviors.Instant>(); IsTrap = card.Behaviors.Has<Behaviors.Trap>(); var counters = card.Counters; var statusEffects = card.Behaviors.OfType<Behaviors.IStatusEffect>(); var counterArray = new InternalCounterData[counters.Count() + statusEffects.Count()]; int i = 0; foreach (var counter in counters) { counterArray[i++] = new InternalCounterData(counter.Text, counter.IconUri, card.GetCounterCount(counter.GetType())); } foreach (var statusEffect in statusEffects) { counterArray[i++] = new InternalCounterData(statusEffect.Text, statusEffect.IconUri, 0); } Counters = counterArray.ToIndexable(); }