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.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 {
|
||||
|
|
|
|||
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));
|
||||
yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting));
|
||||
BattleParticipant target = singleTargeting.GetTarget();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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<BattleParticipant>() {this.owner},
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ public class HeroCardDatabase : CardDatabase<HeroCard>
|
|||
{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<HeroCard>
|
|||
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:
|
||||
|
|
|
|||
|
|
@ -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<ParticipantT>(
|
||||
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<ParticipantT>(int index, ParticipantT[] team)
|
||||
where ParticipantT : BattleParticipant {
|
||||
if (index == -1) return null;
|
||||
return viewpoint.Heroes[index];
|
||||
return team[index];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue