From 281ad2dbc52bb92c01dc7f36d505590c38f63345 Mon Sep 17 00:00:00 2001 From: henriquenakashima Date: Thu, 24 Sep 2020 01:01:21 -0400 Subject: [PATCH] Implement BlindFury --- Assets/Battle/BattleController.cs | 4 +- Assets/Battle/CardsHeroes/BlindFuryHCard.cs | 19 ++++++++++ .../Battle/CardsHeroes/BlindFuryHCard.cs.meta | 11 ++++++ Assets/Battle/CardsHeroes/CoverHCard.cs | 3 +- .../Battle/CardsHeroes/CrashingPunchHCard.cs | 3 +- .../CardsHeroes/IronskinDraughtHCard.cs | 3 +- .../CardsHeroes/LightningStrikeHCard.cs | 3 +- Assets/Battle/CardsHeroes/MeditateHCard.cs | 4 +- Assets/Battle/CardsHeroes/ScarringHCard.cs | 3 +- .../Battle/CardsHeroes/ThunderstormHCard.cs | 7 +++- Assets/Battle/HeroCard.cs | 3 +- Assets/Battle/HeroCardDatabase.cs | 3 ++ Assets/Battle/MonsterAI/AIUtils.cs | 37 ++++++++++++++----- 13 files changed, 82 insertions(+), 21 deletions(-) create mode 100644 Assets/Battle/CardsHeroes/BlindFuryHCard.cs create mode 100644 Assets/Battle/CardsHeroes/BlindFuryHCard.cs.meta diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index 6fb924f..219f9da 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -43,7 +43,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe HCardId[] cardIds = new HCardId[10] { HCardId.CrashingPunch, HCardId.CrashingPunch, - HCardId.CrashingPunch, + HCardId.BlindFury, HCardId.Cover, HCardId.Cover, HCardId.Thunderstorm, @@ -290,7 +290,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe public IEnumerator UseHeroCard(HeroCard card) { this.heroEnergy.PayForCard(card); this.heroDeck.RemoveCardFromHand(card); - yield return card.Use(this, battlePlayerControls); + yield return card.Use(this, this, battlePlayerControls); if (card.IsPermanent()) { this.playArea.AddPlayedHeroPermanent(card); } else { diff --git a/Assets/Battle/CardsHeroes/BlindFuryHCard.cs b/Assets/Battle/CardsHeroes/BlindFuryHCard.cs new file mode 100644 index 0000000..14e8cf1 --- /dev/null +++ b/Assets/Battle/CardsHeroes/BlindFuryHCard.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class BlindFuryHCard : HeroCard +{ + public BlindFuryHCard(BattleParticipant owner) + : base(owner, HCardId.BlindFury, "Blind Fury", 2, CardType.Attack, + "Deals 5 damage to target. -1 insight.") { + } + + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { + BattleParticipant target = AIUtils.GetNearestMonster(viewpoint, this.owner); + effectApplier.Apply(new DealDamageEffect(target, 5)); + effectApplier.Apply(new ModifyInsightEffect(-1)); + yield break; + } +} diff --git a/Assets/Battle/CardsHeroes/BlindFuryHCard.cs.meta b/Assets/Battle/CardsHeroes/BlindFuryHCard.cs.meta new file mode 100644 index 0000000..77abaa9 --- /dev/null +++ b/Assets/Battle/CardsHeroes/BlindFuryHCard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03ee609e768e54b49a0e03d1e417b347 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/CardsHeroes/CoverHCard.cs b/Assets/Battle/CardsHeroes/CoverHCard.cs index a229a62..3f7ab84 100644 --- a/Assets/Battle/CardsHeroes/CoverHCard.cs +++ b/Assets/Battle/CardsHeroes/CoverHCard.cs @@ -10,7 +10,8 @@ public class CoverHCard : HeroCard } - public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { SingleTargeting singleTargeting = new SingleTargeting(new OtherHeroTargetPolicy(this.owner)); yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting)); BattleParticipant target = singleTargeting.GetTarget(); diff --git a/Assets/Battle/CardsHeroes/CrashingPunchHCard.cs b/Assets/Battle/CardsHeroes/CrashingPunchHCard.cs index 3591147..5557915 100644 --- a/Assets/Battle/CardsHeroes/CrashingPunchHCard.cs +++ b/Assets/Battle/CardsHeroes/CrashingPunchHCard.cs @@ -9,7 +9,8 @@ public class CrashingPunchHCard : HeroCard "Deals 3 damage to target.") { } - public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { SingleTargeting singleTargeting = new SingleTargeting(new AnyTargetPolicy()); yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting)); BattleParticipant target = singleTargeting.GetTarget(); diff --git a/Assets/Battle/CardsHeroes/IronskinDraughtHCard.cs b/Assets/Battle/CardsHeroes/IronskinDraughtHCard.cs index 5a44507..b54c9ee 100644 --- a/Assets/Battle/CardsHeroes/IronskinDraughtHCard.cs +++ b/Assets/Battle/CardsHeroes/IronskinDraughtHCard.cs @@ -10,7 +10,8 @@ public class IronskinDraughtHCard : HeroCard } - public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { SingleTargeting singleTargeting = new SingleTargeting(new AnyHeroTargetPolicy()); yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting)); BattleParticipant target = singleTargeting.GetTarget(); diff --git a/Assets/Battle/CardsHeroes/LightningStrikeHCard.cs b/Assets/Battle/CardsHeroes/LightningStrikeHCard.cs index 2a61430..a1faf34 100644 --- a/Assets/Battle/CardsHeroes/LightningStrikeHCard.cs +++ b/Assets/Battle/CardsHeroes/LightningStrikeHCard.cs @@ -9,7 +9,8 @@ public class LightningStrikeHCard : HeroCard "Deals 3 damage to target.") { } - public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { SingleTargeting singleTargeting = new SingleTargeting(new AnyTargetPolicy()); yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting)); BattleParticipant target = singleTargeting.GetTarget(); diff --git a/Assets/Battle/CardsHeroes/MeditateHCard.cs b/Assets/Battle/CardsHeroes/MeditateHCard.cs index b788984..87a6837 100644 --- a/Assets/Battle/CardsHeroes/MeditateHCard.cs +++ b/Assets/Battle/CardsHeroes/MeditateHCard.cs @@ -8,8 +8,8 @@ public class MeditateHCard : HeroCard : base(owner, HCardId.Meditate, "Meditate", 2, CardType.Skill, "+1 insight. Draw a card.") { } - public override IEnumerator Use( - IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { effectApplier.Apply(new ModifyInsightEffect(+1)); yield return new WaitForSeconds(1f); effectApplier.Apply(new DrawCardsEffect(1, TeamChoice.Heroes)); diff --git a/Assets/Battle/CardsHeroes/ScarringHCard.cs b/Assets/Battle/CardsHeroes/ScarringHCard.cs index e66ddf4..fa171f7 100644 --- a/Assets/Battle/CardsHeroes/ScarringHCard.cs +++ b/Assets/Battle/CardsHeroes/ScarringHCard.cs @@ -9,7 +9,8 @@ public class ScarringHCard : HeroCard "Block 4 damage. The next time damage is taken until next turn, gain 1 Max HP.") { } - public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { effectApplier.Apply(new BlockEffect(this.owner, 4)); DamageTrigger trigger = new DamageTrigger( new List() {this.owner}, diff --git a/Assets/Battle/CardsHeroes/ThunderstormHCard.cs b/Assets/Battle/CardsHeroes/ThunderstormHCard.cs index 3111db5..c0a4f1f 100644 --- a/Assets/Battle/CardsHeroes/ThunderstormHCard.cs +++ b/Assets/Battle/CardsHeroes/ThunderstormHCard.cs @@ -9,9 +9,12 @@ public class ThunderstormHCard : HeroCard "Add 1 max energy. Acquire 2 Lightning Strike into draw pile.") { } - public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls) { effectApplier.Apply(new IncreaseMaxEnergyEffect(1)); - effectApplier.Apply(new AcquireCardsEffect(new HCardId[] {HCardId.LightningStrike, HCardId.LightningStrike}, BattleZone.DrawPile, this.owner)); + effectApplier.Apply(new AcquireCardsEffect( + new HCardId[] {HCardId.LightningStrike, HCardId.LightningStrike}, + BattleZone.DrawPile, this.owner)); yield break; } } diff --git a/Assets/Battle/HeroCard.cs b/Assets/Battle/HeroCard.cs index cef515c..09498ac 100644 --- a/Assets/Battle/HeroCard.cs +++ b/Assets/Battle/HeroCard.cs @@ -12,7 +12,8 @@ public abstract class HeroCard : BaseCard this.id = id; } - public abstract IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls); + public abstract IEnumerator Use(IBattleEffectApplier effectApplier, + MonsterViewpoint viewpoint, BattlePlayerControls playerControls); public HCardId GetId() {return this.id;} } diff --git a/Assets/Battle/HeroCardDatabase.cs b/Assets/Battle/HeroCardDatabase.cs index bc17796..afc693f 100644 --- a/Assets/Battle/HeroCardDatabase.cs +++ b/Assets/Battle/HeroCardDatabase.cs @@ -29,6 +29,7 @@ public class HeroCardDatabase : CardDatabase {HCardId.LightningStrike, HeroId.Shaman}, {HCardId.Scarring, HeroId.Brute}, {HCardId.Thunderstorm, HeroId.Shaman}, + {HCardId.BlindFury, HeroId.Brute}, {HCardId.Meditate, HeroId.Shaman}, {HCardId.IronskinDraught, HeroId.Alchemist}, }; @@ -47,6 +48,8 @@ public class HeroCardDatabase : CardDatabase return new ScarringHCard(owner); case HCardId.Thunderstorm: return new ThunderstormHCard(owner); + case HCardId.BlindFury: + return new BlindFuryHCard(owner); case HCardId.Meditate: return new MeditateHCard(owner); case HCardId.IronskinDraught: diff --git a/Assets/Battle/MonsterAI/AIUtils.cs b/Assets/Battle/MonsterAI/AIUtils.cs index 4cd3f4f..ca662c5 100644 --- a/Assets/Battle/MonsterAI/AIUtils.cs +++ b/Assets/Battle/MonsterAI/AIUtils.cs @@ -6,18 +6,29 @@ public class AIUtils { public static BattleHero GetNearestHero(MonsterViewpoint viewpoint, BattleParticipant owner) { int ownerPosition = GetMonsterPosition(viewpoint, owner); + return GetNearestEnemy(ownerPosition, viewpoint.Heroes); + } - int nearestHeroIndex = -1; + public static BattleMonster GetNearestMonster(MonsterViewpoint viewpoint, + BattleParticipant owner) { + int ownerPosition = GetHeroPosition(viewpoint, owner); + return GetNearestEnemy(ownerPosition, viewpoint.Monsters); + } + + private static ParticipantT GetNearestEnemy( + int ownerPosition, ParticipantT[] otherTeam) + where ParticipantT : BattleParticipant{ + int nearestIndex = -1; int nearestDistance = int.MaxValue; - for (int i = 0; i < viewpoint.Heroes.Length; i++) { - if (!viewpoint.Heroes[i].IsAlive()) continue; + for (int i = 0; i < otherTeam.Length; i++) { + if (!otherTeam[i].IsAlive()) continue; int distance = System.Math.Abs(i - ownerPosition); if (distance < nearestDistance) { - nearestHeroIndex = i; + nearestIndex = i; nearestDistance = distance; } } - return HeroAtIndex(nearestHeroIndex, viewpoint); + return ParticipantAtIndex(nearestIndex, otherTeam); } public static BattleHero GetFarthestHero(MonsterViewpoint viewpoint, @@ -34,7 +45,7 @@ public class AIUtils { farthestDistance = distance; } } - return HeroAtIndex(farthestHeroIndex, viewpoint); + return ParticipantAtIndex(farthestHeroIndex, viewpoint.Heroes); } private static int GetMonsterPosition(MonsterViewpoint viewpoint, BattleParticipant monster) { @@ -44,6 +55,13 @@ public class AIUtils { return -1; } + private static int GetHeroPosition(MonsterViewpoint viewpoint, BattleParticipant hero) { + for (int i = 0; i < viewpoint.Heroes.Length; i++) { + if (viewpoint.Heroes[i] == hero) return i; + } + return -1; + } + public static BattleHero GetHeroWithHighestHP(MonsterViewpoint viewpoint) { int highestHPHeroIndex = -1; int highestHP = -1; @@ -55,11 +73,12 @@ public class AIUtils { highestHP = heroHP; } } - return HeroAtIndex(highestHPHeroIndex, viewpoint); + return ParticipantAtIndex(highestHPHeroIndex, viewpoint.Heroes); } - private static BattleHero HeroAtIndex(int index, MonsterViewpoint viewpoint) { + private static ParticipantT ParticipantAtIndex(int index, ParticipantT[] team) + where ParticipantT : BattleParticipant { if (index == -1) return null; - return viewpoint.Heroes[index]; + return team[index]; } }