Implement BlindFury
This commit is contained in:
parent
626f465ca0
commit
281ad2dbc5
13 changed files with 82 additions and 21 deletions
|
|
@ -43,7 +43,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
HCardId[] cardIds = new HCardId[10] {
|
HCardId[] cardIds = new HCardId[10] {
|
||||||
HCardId.CrashingPunch,
|
HCardId.CrashingPunch,
|
||||||
HCardId.CrashingPunch,
|
HCardId.CrashingPunch,
|
||||||
HCardId.CrashingPunch,
|
HCardId.BlindFury,
|
||||||
HCardId.Cover,
|
HCardId.Cover,
|
||||||
HCardId.Cover,
|
HCardId.Cover,
|
||||||
HCardId.Thunderstorm,
|
HCardId.Thunderstorm,
|
||||||
|
|
@ -290,7 +290,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
public IEnumerator UseHeroCard(HeroCard card) {
|
public IEnumerator UseHeroCard(HeroCard card) {
|
||||||
this.heroEnergy.PayForCard(card);
|
this.heroEnergy.PayForCard(card);
|
||||||
this.heroDeck.RemoveCardFromHand(card);
|
this.heroDeck.RemoveCardFromHand(card);
|
||||||
yield return card.Use(this, battlePlayerControls);
|
yield return card.Use(this, this, battlePlayerControls);
|
||||||
if (card.IsPermanent()) {
|
if (card.IsPermanent()) {
|
||||||
this.playArea.AddPlayedHeroPermanent(card);
|
this.playArea.AddPlayedHeroPermanent(card);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
19
Assets/Battle/CardsHeroes/BlindFuryHCard.cs
Normal file
19
Assets/Battle/CardsHeroes/BlindFuryHCard.cs
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/Battle/CardsHeroes/BlindFuryHCard.cs.meta
Normal file
11
Assets/Battle/CardsHeroes/BlindFuryHCard.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 03ee609e768e54b49a0e03d1e417b347
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -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));
|
SingleTargeting singleTargeting = new SingleTargeting(new OtherHeroTargetPolicy(this.owner));
|
||||||
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
||||||
BattleParticipant target = singleTargeting.GetTarget();
|
BattleParticipant target = singleTargeting.GetTarget();
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ public class CrashingPunchHCard : HeroCard
|
||||||
"Deals 3 damage to target.") {
|
"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());
|
SingleTargeting singleTargeting = new SingleTargeting(new AnyTargetPolicy());
|
||||||
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
||||||
BattleParticipant target = singleTargeting.GetTarget();
|
BattleParticipant target = singleTargeting.GetTarget();
|
||||||
|
|
|
||||||
|
|
@ -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());
|
SingleTargeting singleTargeting = new SingleTargeting(new AnyHeroTargetPolicy());
|
||||||
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
||||||
BattleParticipant target = singleTargeting.GetTarget();
|
BattleParticipant target = singleTargeting.GetTarget();
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ public class LightningStrikeHCard : HeroCard
|
||||||
"Deals 3 damage to target.") {
|
"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());
|
SingleTargeting singleTargeting = new SingleTargeting(new AnyTargetPolicy());
|
||||||
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
||||||
BattleParticipant target = singleTargeting.GetTarget();
|
BattleParticipant target = singleTargeting.GetTarget();
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ public class MeditateHCard : HeroCard
|
||||||
: base(owner, HCardId.Meditate, "Meditate", 2, CardType.Skill, "+1 insight. Draw a card.") {
|
: base(owner, HCardId.Meditate, "Meditate", 2, CardType.Skill, "+1 insight. Draw a card.") {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerator Use(
|
public override IEnumerator Use(IBattleEffectApplier effectApplier,
|
||||||
IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) {
|
MonsterViewpoint viewpoint, BattlePlayerControls playerControls) {
|
||||||
effectApplier.Apply(new ModifyInsightEffect(+1));
|
effectApplier.Apply(new ModifyInsightEffect(+1));
|
||||||
yield return new WaitForSeconds(1f);
|
yield return new WaitForSeconds(1f);
|
||||||
effectApplier.Apply(new DrawCardsEffect(1, TeamChoice.Heroes));
|
effectApplier.Apply(new DrawCardsEffect(1, TeamChoice.Heroes));
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ public class ScarringHCard : HeroCard
|
||||||
"Block 4 damage. The next time damage is taken until next turn, gain 1 Max HP.") {
|
"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));
|
effectApplier.Apply(new BlockEffect(this.owner, 4));
|
||||||
DamageTrigger trigger = new DamageTrigger(
|
DamageTrigger trigger = new DamageTrigger(
|
||||||
new List<BattleParticipant>() {this.owner},
|
new List<BattleParticipant>() {this.owner},
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,12 @@ public class ThunderstormHCard : HeroCard
|
||||||
"Add 1 max energy. Acquire 2 Lightning Strike into draw pile.") {
|
"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 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;
|
yield break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ public abstract class HeroCard : BaseCard
|
||||||
this.id = id;
|
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;}
|
public HCardId GetId() {return this.id;}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ public class HeroCardDatabase : CardDatabase<HeroCard>
|
||||||
{HCardId.LightningStrike, HeroId.Shaman},
|
{HCardId.LightningStrike, HeroId.Shaman},
|
||||||
{HCardId.Scarring, HeroId.Brute},
|
{HCardId.Scarring, HeroId.Brute},
|
||||||
{HCardId.Thunderstorm, HeroId.Shaman},
|
{HCardId.Thunderstorm, HeroId.Shaman},
|
||||||
|
{HCardId.BlindFury, HeroId.Brute},
|
||||||
{HCardId.Meditate, HeroId.Shaman},
|
{HCardId.Meditate, HeroId.Shaman},
|
||||||
{HCardId.IronskinDraught, HeroId.Alchemist},
|
{HCardId.IronskinDraught, HeroId.Alchemist},
|
||||||
};
|
};
|
||||||
|
|
@ -47,6 +48,8 @@ public class HeroCardDatabase : CardDatabase<HeroCard>
|
||||||
return new ScarringHCard(owner);
|
return new ScarringHCard(owner);
|
||||||
case HCardId.Thunderstorm:
|
case HCardId.Thunderstorm:
|
||||||
return new ThunderstormHCard(owner);
|
return new ThunderstormHCard(owner);
|
||||||
|
case HCardId.BlindFury:
|
||||||
|
return new BlindFuryHCard(owner);
|
||||||
case HCardId.Meditate:
|
case HCardId.Meditate:
|
||||||
return new MeditateHCard(owner);
|
return new MeditateHCard(owner);
|
||||||
case HCardId.IronskinDraught:
|
case HCardId.IronskinDraught:
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,29 @@ public class AIUtils {
|
||||||
public static BattleHero GetNearestHero(MonsterViewpoint viewpoint,
|
public static BattleHero GetNearestHero(MonsterViewpoint viewpoint,
|
||||||
BattleParticipant owner) {
|
BattleParticipant owner) {
|
||||||
int ownerPosition = GetMonsterPosition(viewpoint, 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<ParticipantT>(
|
||||||
|
int ownerPosition, ParticipantT[] otherTeam)
|
||||||
|
where ParticipantT : BattleParticipant{
|
||||||
|
int nearestIndex = -1;
|
||||||
int nearestDistance = int.MaxValue;
|
int nearestDistance = int.MaxValue;
|
||||||
for (int i = 0; i < viewpoint.Heroes.Length; i++) {
|
for (int i = 0; i < otherTeam.Length; i++) {
|
||||||
if (!viewpoint.Heroes[i].IsAlive()) continue;
|
if (!otherTeam[i].IsAlive()) continue;
|
||||||
int distance = System.Math.Abs(i - ownerPosition);
|
int distance = System.Math.Abs(i - ownerPosition);
|
||||||
if (distance < nearestDistance) {
|
if (distance < nearestDistance) {
|
||||||
nearestHeroIndex = i;
|
nearestIndex = i;
|
||||||
nearestDistance = distance;
|
nearestDistance = distance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return HeroAtIndex(nearestHeroIndex, viewpoint);
|
return ParticipantAtIndex(nearestIndex, otherTeam);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BattleHero GetFarthestHero(MonsterViewpoint viewpoint,
|
public static BattleHero GetFarthestHero(MonsterViewpoint viewpoint,
|
||||||
|
|
@ -34,7 +45,7 @@ public class AIUtils {
|
||||||
farthestDistance = distance;
|
farthestDistance = distance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return HeroAtIndex(farthestHeroIndex, viewpoint);
|
return ParticipantAtIndex(farthestHeroIndex, viewpoint.Heroes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int GetMonsterPosition(MonsterViewpoint viewpoint, BattleParticipant monster) {
|
private static int GetMonsterPosition(MonsterViewpoint viewpoint, BattleParticipant monster) {
|
||||||
|
|
@ -44,6 +55,13 @@ public class AIUtils {
|
||||||
return -1;
|
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) {
|
public static BattleHero GetHeroWithHighestHP(MonsterViewpoint viewpoint) {
|
||||||
int highestHPHeroIndex = -1;
|
int highestHPHeroIndex = -1;
|
||||||
int highestHP = -1;
|
int highestHP = -1;
|
||||||
|
|
@ -55,11 +73,12 @@ public class AIUtils {
|
||||||
highestHP = heroHP;
|
highestHP = heroHP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return HeroAtIndex(highestHPHeroIndex, viewpoint);
|
return ParticipantAtIndex(highestHPHeroIndex, viewpoint.Heroes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BattleHero HeroAtIndex(int index, MonsterViewpoint viewpoint) {
|
private static ParticipantT ParticipantAtIndex<ParticipantT>(int index, ParticipantT[] team)
|
||||||
|
where ParticipantT : BattleParticipant {
|
||||||
if (index == -1) return null;
|
if (index == -1) return null;
|
||||||
return viewpoint.Heroes[index];
|
return team[index];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue