protected override void Activate(Player owner, Player opponent, int damageTaken, GameField game) { PokemonCard sourcePokemon = null; do { var response = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new SelectFromYourPokemonMessage("Select a pokemon to move energy from").ToNetworkMessage(NetworkId.Generate())); var selectedId = response.Cards.First(); sourcePokemon = game.Cards[selectedId] as PokemonCard; } while (sourcePokemon == null || sourcePokemon.Id.Equals(PokemonOwner.Id) || sourcePokemon.AttachedEnergy.Count(energy => EnergyType == EnergyTypes.All || EnergyType == energy.EnergyType) == 0); PokemonCard newPokemon; if (attachToSelf) { newPokemon = PokemonOwner; } else { var newPokemonResponse = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new SelectFromYourPokemonMessage("Select pokemon to receive the energy").ToNetworkMessage(NetworkId.Generate())); newPokemon = (PokemonCard)game.Cards[newPokemonResponse.Cards.First()]; } if (sourcePokemon.AttachedEnergy.Count == 1) { var energyCard = sourcePokemon.AttachedEnergy.First(); sourcePokemon.AttachedEnergy.Clear(); game?.SendEventToPlayers(new AttachedEnergyDiscardedEvent { FromPokemonId = sourcePokemon.Id, DiscardedCard = energyCard }); newPokemon.AttachEnergy(energyCard, game); } else { var selectedEnergyId = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new PickFromListMessage(sourcePokemon.AttachedEnergy.Where(energy => EnergyType == EnergyTypes.All || EnergyType == energy.EnergyType).OfType <Card>().ToList(), 1).ToNetworkMessage(owner.Id)); var energyCard = (EnergyCard)game.Cards[selectedEnergyId.Cards.First()]; sourcePokemon.AttachedEnergy.Remove(energyCard); game?.SendEventToPlayers(new AttachedEnergyDiscardedEvent { FromPokemonId = sourcePokemon.Id, DiscardedCard = energyCard }); newPokemon.AttachEnergy(energyCard, game); } }
public void Blastoise_2_Extra() { var attack = new ExtraForUnusedEnergy() { Damage = 40, MaxExtraDamage = 20, AmountPerEnergy = 10, EnergyType = EnergyTypes.Water, Cost = new ObservableCollection <Energy> { new Energy(EnergyTypes.Water, 3) } }; var owner = new PokemonCard() { Attacks = new ObservableCollection <Attack> { attack } }; owner.AttachedEnergy.Add(new EnergyCard() { Amount = 1, EnergyType = EnergyTypes.Water }); owner.AttachedEnergy.Add(new EnergyCard() { Amount = 1, EnergyType = EnergyTypes.Water }); owner.AttachedEnergy.Add(new EnergyCard() { Amount = 1, EnergyType = EnergyTypes.Water }); owner.AttachedEnergy.Add(new EnergyCard() { Amount = 1, EnergyType = EnergyTypes.Water }); owner.AttachedEnergy.Add(new EnergyCard() { Amount = 1, EnergyType = EnergyTypes.Water }); var player = new Player(); player.ActivePokemonCard = owner; var damage = attack.GetDamage(player, null, null); Assert.Equal(60, damage.NormalDamage); }
public void Bounce_EvolvedPokemon() { var effect = new BouncePokemonEffect() { ShuffleIntoDeck = false, ReturnAttachedToHand = true, TargetingMode = TargetingMode.OpponentActive }; var opponent = new Player(); var pokemon = new PokemonCard(opponent) { Name = "Pokemon1", Stage = 0, Hp = 100 }; var evolution = new PokemonCard(opponent) { Name = "Evo", Stage = 1, EvolvesFrom = "Pokemon1", Hp = 100 }; opponent.ActivePokemonCard = evolution; pokemon.Evolve(evolution); var other = new PokemonCard(opponent); opponent.BenchedPokemon.Add(other); var sub = Substitute.For <INetworkPlayer>(); sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage { Cards = new List <NetworkId> { other.Id } }); opponent.SetNetworkPlayer(sub); var game = new GameField(); game.AddPlayer(new Player() { Id = NetworkId.Generate() }); game.AddPlayer(opponent); opponent.Id = NetworkId.Generate(); effect.Process(game, game.Players[0], opponent, null); Assert.Equal(2, opponent.Hand.Count); }
public PokemonCardCreatorPage(PokemonCard card, INavigation navigation, bool canDelete) { InitializeComponent(); ConfirmCommand = new DelegateCommand(_Confirm); DeleteCommand = new DelegateCommand(_Delete); TakePhotoCommand = new DelegateCommand(_TakePhoto); ToggleCropCommand = new DelegateCommand(_ToggleOriginalPhoto); Card = card; BindingContext = this; _tcs = new TaskCompletionSource <bool>(); CanDelete = canDelete; }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } game.TemporaryPassiveAbilities.Add(new StopTrainerCastsAbility(caster.ActivePokemonCard) { LimitedByTime = true, TurnsLeft = 2, IsBuff = true }); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource, "Select Pokémon to move damage to"); foreach (var pokemon in caster.GetAllPokemonCards()) { if (pokemon.DamageCounters > 0) { int damage = Math.Min(pokemon.DamageCounters, DamageToMove); pokemon.Heal(damage, game); target.DealDamage(damage, game, pokemon, false); } } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (RuleType == game.EnergyRule.GetType()) { return; } if (OnlyReplaceIfOldAllows && !game.EnergyRule.CanPlayEnergyCard(new EnergyCard(), new PokemonCard())) { return; } game.EnergyRule = (IEnergyRule)Activator.CreateInstance(RuleType); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (game.FlipCoins(1) == 0) { return; } var damage = game.FlipCoins(1) == 1 ? 20 : 10; foreach (var pokemon in opponent.BenchedPokemon.ValidPokemonCards) { pokemon.DealDamage(damage, game, pokemonSource, false); } }
public bool Remove(PokemonCard pokemon) { for (int i = 0; i < Pokemons.Length; i++) { if (Pokemons[i] == pokemon) { Pokemons[i] = null; allValidPokemons.Remove(pokemon); return(true); } } return(false); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var selector = OpponentPicks ? opponent : caster; var other = OpponentPicks ? caster : opponent; if (!CoinflipConditional.IsOk(game, caster)) { return; } PokemonCard target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, selector, other, selector.ActivePokemonCard); target?.Heal(Amount, game); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (CoinflipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, caster.ActivePokemonCard); target?.TemporaryAbilities.Add(new RetreatStopper(target, Turns) { IsBuff = true }); }
public void Add(PokemonCard pokemon) { for (int i = 0; i < Pokemons.Length; i++) { if (Pokemons[i] != null) { continue; } Pokemons[i] = pokemon; allValidPokemons.Add(pokemon); break; } }
public int GetModifiedDamage(int damageTaken, PokemonCard damageSource, GameField game) { if (damageTaken < minimumDamageBeforePrevent) { return(damageTaken); } if (OnlyPreventFromBasic && damageSource != null && damageSource.Stage > 0) { return(damageTaken); } return(newDamage); }
public void ScoopUp_TargetIsEvolved_AttachedToHand() { var effect = new BouncePokemonEffect { TargetingMode = TargetingMode.YourPokemon, ReturnAttachedToHand = true, ShuffleIntoDeck = false }; var player = new Player(); var activePokemon = new PokemonCard() { Stage = 1, Owner = player, Hp = 100 }; var basicPokemon = new PokemonCard(); var targetPokemon = new PokemonCard() { Stage = 1, Hp = 200, AttachedEnergy = new List <EnergyCard> { new EnergyCard(), new EnergyCard() }, Owner = player, EvolvedFrom = basicPokemon }; var sub = Substitute.For <INetworkPlayer>(); sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage { Cards = new List <NetworkId> { targetPokemon.Id } }); player.SetNetworkPlayer(sub); player.ActivePokemonCard = activePokemon; player.BenchedPokemon.Add(targetPokemon); var game = new GameField(); game.AddPlayer(player); game.AddPlayer(new Player()); game.ActivePlayerIndex = 0; effect.Process(game, player, game.NonActivePlayer, null); Assert.Equal(0, player.BenchedPokemon.Count); Assert.Empty(player.DiscardPile); Assert.Equal(4, player.Hand.Count); }
public void KillActivePokemon_StageOne_NoEnergy() { var player = new Player(); var abra = new PokemonCard(player); var kadabra = new PokemonCard(player); abra.Evolve(kadabra); player.ActivePokemonCard = kadabra; player.KillActivePokemon(); Assert.Null(player.ActivePokemonCard); Assert.Equal(2, player.DiscardPile.Count); }
public void ProcessEffectsTest_Poison() { var attack = new ApplyEffectTarget() { StatusEffect = StatusEffect.Poison }; var target = new PokemonCard(); attack.ProcessEffects(new GameField(), null, new Player { ActivePokemonCard = target }); Assert.True(target.IsPoisoned); }
private void TryEvolvePokemon(CardRenderer cardRenderer) { PokemonCard pokemon = cardRenderer.card as PokemonCard; if (pokemon == null) { return; } NetworkManager.Instance.gameService.EvolvePokemon(gameField.Id, pokemon.Id, currentEvolvingCard.Id); currentEvolvingCard = null; SpecialState = SpecialGameState.None; infoText.text = string.Empty; EnableButtons(); }
public void ForceRetreatActivePokemon_No_replacement() { var player = new Player(); var pokemon = new PokemonCard { Owner = player }; player.ActivePokemonCard = pokemon; player.ForceRetreatActivePokemon(null, new GameField()); Assert.Null(player.ActivePokemonCard); Assert.Equal(pokemon, player.BenchedPokemon.GetFirst()); }
public void ForceRetreatActivePokemon(PokemonCard replacementPokemon, GameField game) { var oldActivePokemon = ActivePokemonCard; ActivePokemonCard = replacementPokemon; BenchedPokemon.ReplaceWith(replacementPokemon, oldActivePokemon); ClearAbilitiesWhenBenched(oldActivePokemon); oldActivePokemon.ClearStatusEffects(); game?.SendEventToPlayers(new PokemonBecameActiveEvent { NewActivePokemonId = replacementPokemon == null ? null : replacementPokemon.Id, ReplacedPokemonId = oldActivePokemon.Id }); }
public void ProcessEffectsTest_Tails() { var attack = new FlipCoinApplyEffectTarget() { StatusEffect = StatusEffect.Poison }; var target = new PokemonCard(); attack.ProcessEffects(new GameField().WithFlips(CoinFlipper.TAILS), null, new Player { ActivePokemonCard = target }); Assert.False(target.IsPoisoned); }
public void ProcessEffectsTest_Burn() { var attack = new FlipCoinApplyEffectTarget() { StatusEffect = StatusEffect.Burn }; var target = new PokemonCard(); attack.ProcessEffects(new GameField().WithFlips(CoinFlipper.HEADS), null, new Player { ActivePokemonCard = target }); Assert.True(target.IsBurned); }
private void OnTryAttachEnergy(CardRenderer cardRenderer) { PokemonCard pokemon = cardRenderer.card as PokemonCard; if (pokemon == null || Player.Hand.Contains(pokemon) || !pokemon.Owner.Id.Equals(myId)) { return; } NetworkManager.Instance.gameService.AttachEnergy(gameField.Id, pokemon.Id, currentEnergyCard.Id); currentEnergyCard = null; SpecialState = SpecialGameState.None; infoText.text = string.Empty; EnableButtons(); }
public PokemonViewModel(PokemonCard pokemon) { Card = pokemon; AddAttackCommand = new RelayCommand(CanAddAttack, AddAttack); SetAbilityCommand = new RelayCommand(CanAddAttack, SetAbility); AddEffectCommand = new RelayCommand(CanAddEffect, AddEffect); AddAbilityEffectCommand = new RelayCommand(CanAddAbilityEffect, AddAbilityEffect); DeleteSelectedAttack = new RelayCommand(CanAddAttack, DeleteAttack); DeleteSelectedEffect = new RelayCommand(CanAddAttack, DeleteEffect); MoveEffectUpCommand = new RelayCommand(CanMoveEffectUp, MoveEffectUp); MoveEffectDownCommand = new RelayCommand(CanMoveEffectDown, MoveEffectDown); MoveAttackUpCommand = new RelayCommand(CanMoveAttackUp, MoveAttackUp); MoveAttackDownCommand = new RelayCommand(CanMoveAttackDown, MoveAttackDown); DeleteAbilitySelectedEffect = new RelayCommand(CanAddAttack, DeleteAbilityEffect); }
public void GetDamageTest_No_Damage() { var attack = new DamageMultipliedByDamage() { Damage = 10 }; var target = new PokemonCard(); Assert.Equal(0, attack.GetDamage(new Player { ActivePokemonCard = new PokemonCard() }, new Player { ActivePokemonCard = target }, null).NormalDamage); }
public void CardShuffledIntoDeck() { var effect = new BouncePokemonEffect() { ShuffleIntoDeck = true, TargetingMode = TargetingMode.OpponentActive }; var opponent = new Player(); var pokemon = new PokemonCard(opponent) { AttachedEnergy = new List <EnergyCard> { new EnergyCard() }, Hp = 100 }; opponent.ActivePokemonCard = pokemon; var other = new PokemonCard(opponent); opponent.BenchedPokemon.Add(other); var sub = Substitute.For <INetworkPlayer>(); sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage { Cards = new List <NetworkId> { other.Id } }); opponent.SetNetworkPlayer(sub); var game = new GameField(); game.AddPlayer(new Player() { Id = NetworkId.Generate() }); game.AddPlayer(opponent); opponent.Id = NetworkId.Generate(); effect.Process(game, game.Players[0], opponent, null); Assert.Equal(2, opponent.Deck.Cards.Count); Assert.Equal(other, opponent.ActivePokemonCard); }
/// <summary> /// Display pkmn info and Controls for back button /// </summary> /// <param name="e"></param> protected override void OnNavigatedTo(NavigationEventArgs e) { if (e.Parameter is PokemonCard && e.Parameter != null) { SelectedCard = (PokemonCard)e.Parameter; } base.OnNavigatedTo(e); //Display back button SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; //Call About_BackRequested function to navigate to Main Page SystemNavigationManager.GetForCurrentView().BackRequested += About_BackRequested; //Display info of the selected pkmn DescriptiontBox.Text = DescriptionString(); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { int damage = 0; foreach (var energy in caster.ActivePokemonCard.AttachedEnergy) { if (EnergyType == EnergyTypes.All || energy.EnergyType == EnergyType) { damage += Amount; } } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); target.DealDamage(damage, game, pokemonSource, true); }
public void GetDamageTest_No_Damage() { var attack = new ExtraPerDamageOnTarget() { Damage = 10, ExtraPerDamageCounter = 10 }; var target = new PokemonCard(); Assert.Equal(10, attack.GetDamage(new Player { ActivePokemonCard = new PokemonCard() }, new Player { ActivePokemonCard = target }, null).NormalDamage); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); var ability = Ability.Clone(); ability.Source = game.CurrentTrainerCard; ability.PokemonOwner = target; ability.IsBuff = true; target.TemporaryAbilities.Add(ability); if (game.CurrentTrainerCard != null) { target.AttachedTools.Add(game.CurrentTrainerCard); } }
public void DamageAppliedToSelf() { var effect = new DamageEffect() { Amount = 10 }; var pokemon = new PokemonCard() { Owner = new Player() }; effect.OnAttachedTo(pokemon, true, null); Assert.Equal(10, pokemon.DamageCounters); }