Implement GolemFist
This commit is contained in:
parent
4ca7b7537a
commit
d1af817bc6
11 changed files with 106 additions and 19 deletions
|
|
@ -333,4 +333,5 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
|||
|
||||
// MonsterViewpoint
|
||||
public BattleHero[] Heroes {get => this.heroes;}
|
||||
public BattleMonster[] Monsters {get => this.monsters;}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,10 @@ public class BattleParticipant
|
|||
return this.maxHP;
|
||||
}
|
||||
|
||||
public bool IsAlive() {
|
||||
return this.hp > 0;
|
||||
}
|
||||
|
||||
public int DealDamage(int damage) {
|
||||
int blockedDamage = Math.Min(damage, this.block);
|
||||
if (blockedDamage > 0) {
|
||||
|
|
@ -43,6 +47,10 @@ public class BattleParticipant
|
|||
}
|
||||
|
||||
public int Heal(int amount) {
|
||||
if (!IsAlive()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
amount = Math.Min(this.maxHP - this.hp, amount);
|
||||
this.hp += amount;
|
||||
return amount;
|
||||
|
|
|
|||
18
Assets/Battle/CardsMonsters/GolemFistMCard.cs
Normal file
18
Assets/Battle/CardsMonsters/GolemFistMCard.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class GolemFistMCard : MonsterCard
|
||||
{
|
||||
public GolemFistMCard(BattleParticipant owner)
|
||||
: base(owner, MCardId.GolemFist, "Golem Fist", 2, CardType.Attack,
|
||||
"Deals 3 damage to target. Target: nearest hero.") {
|
||||
}
|
||||
|
||||
public override IEnumerator Use(IBattleEffectApplier effectApplier, MonsterViewpoint monsterViewpoint) {
|
||||
BattleParticipant target = AIUtils.GetNearestHero(monsterViewpoint, this.owner);
|
||||
DealDamageEffect damageEffect = new DealDamageEffect(target, 3);
|
||||
effectApplier.Apply(damageEffect);
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
11
Assets/Battle/CardsMonsters/GolemFistMCard.cs.meta
Normal file
11
Assets/Battle/CardsMonsters/GolemFistMCard.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f42a2de2b37632b489b9f6aebbf55b54
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -5,12 +5,12 @@ using UnityEngine;
|
|||
public class VampireFangsMCard : MonsterCard
|
||||
{
|
||||
public VampireFangsMCard(BattleParticipant owner)
|
||||
: base(owner, MCardId.VampireFangs, "VampireFangs", 2, CardType.Attack,
|
||||
: base(owner, MCardId.VampireFangs, "Vampire Fangs", 2, CardType.Attack,
|
||||
"Steals 2 HP from target. Target: highest HP hero.") {
|
||||
}
|
||||
|
||||
public override IEnumerator Use(IBattleEffectApplier effectApplier, MonsterViewpoint monsterViewpoint) {
|
||||
BattleParticipant target = DetermineTarget(monsterViewpoint);
|
||||
BattleParticipant target = AIUtils.GetHeroWithHighestHP(monsterViewpoint);
|
||||
DealDamageEffect damageEffect = new DealDamageEffect(target, 2);
|
||||
effectApplier.Apply(damageEffect);
|
||||
if (damageEffect.AmountDealt > 0) {
|
||||
|
|
@ -19,21 +19,4 @@ public class VampireFangsMCard : MonsterCard
|
|||
}
|
||||
yield break;
|
||||
}
|
||||
|
||||
private BattleParticipant DetermineTarget(MonsterViewpoint monsterViewpoint) {
|
||||
return GetHeroWithHighestHP(monsterViewpoint);
|
||||
}
|
||||
|
||||
private BattleHero GetHeroWithHighestHP(MonsterViewpoint monsterViewpoint) {
|
||||
int highestHPHeroIndex = -1;
|
||||
int highestHP = -1;
|
||||
for (int i = 0; i < monsterViewpoint.Heroes.Length; i++) {
|
||||
int heroHP = monsterViewpoint.Heroes[i].GetHP();
|
||||
if (heroHP > highestHP) {
|
||||
highestHPHeroIndex = i;
|
||||
highestHP = heroHP;
|
||||
}
|
||||
}
|
||||
return monsterViewpoint.Heroes[highestHPHeroIndex];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
8
Assets/Battle/MonsterAI.meta
Normal file
8
Assets/Battle/MonsterAI.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ea3ae8263c16c404e8dc33782de382a9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
43
Assets/Battle/MonsterAI/AIUtils.cs
Normal file
43
Assets/Battle/MonsterAI/AIUtils.cs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class AIUtils {
|
||||
public static BattleHero GetNearestHero(MonsterViewpoint monsterViewpoint,
|
||||
BattleParticipant owner) {
|
||||
int ownerPosition = GetMonsterPosition(monsterViewpoint, owner);
|
||||
|
||||
int nearestHeroIndex = -1;
|
||||
int nearestDistance = int.MaxValue;
|
||||
for (int i = 0; i < monsterViewpoint.Heroes.Length; i++) {
|
||||
if (!monsterViewpoint.Heroes[i].IsAlive()) continue;
|
||||
int distance = System.Math.Abs(i - ownerPosition);
|
||||
if (distance < nearestDistance) {
|
||||
nearestHeroIndex = i;
|
||||
nearestDistance = distance;
|
||||
}
|
||||
}
|
||||
return monsterViewpoint.Heroes[nearestHeroIndex];
|
||||
}
|
||||
|
||||
public static int GetMonsterPosition(MonsterViewpoint monsterViewpoint, BattleParticipant monster) {
|
||||
for (int i = 0; i < monsterViewpoint.Monsters.Length; i++) {
|
||||
if (monsterViewpoint.Monsters[i] == monster) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static BattleHero GetHeroWithHighestHP(MonsterViewpoint monsterViewpoint) {
|
||||
int highestHPHeroIndex = -1;
|
||||
int highestHP = -1;
|
||||
for (int i = 0; i < monsterViewpoint.Heroes.Length; i++) {
|
||||
if (!monsterViewpoint.Heroes[i].IsAlive()) continue;
|
||||
int heroHP = monsterViewpoint.Heroes[i].GetHP();
|
||||
if (heroHP > highestHP) {
|
||||
highestHPHeroIndex = i;
|
||||
highestHP = heroHP;
|
||||
}
|
||||
}
|
||||
return monsterViewpoint.Heroes[highestHPHeroIndex];
|
||||
}
|
||||
}
|
||||
11
Assets/Battle/MonsterAI/AIUtils.cs.meta
Normal file
11
Assets/Battle/MonsterAI/AIUtils.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 69cce7f2fac935f429b1a72da0b465bd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -4,4 +4,5 @@ using UnityEngine;
|
|||
|
||||
public interface MonsterViewpoint {
|
||||
BattleHero[] Heroes {get;}
|
||||
BattleMonster[] Monsters {get;}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ using UnityEngine;
|
|||
|
||||
public enum MCardId {
|
||||
VampireFangs,
|
||||
GolemFist,
|
||||
}
|
||||
|
||||
public class MonsterCardDatabase : CardDatabase<MonsterCard>
|
||||
|
|
@ -14,6 +15,8 @@ public class MonsterCardDatabase : CardDatabase<MonsterCard>
|
|||
{
|
||||
case MCardId.VampireFangs:
|
||||
return new VampireFangsMCard(owner);
|
||||
case MCardId.GolemFist:
|
||||
return new GolemFistMCard(owner);
|
||||
default:
|
||||
throw new System.ArgumentException("MCardId unknown", "id");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue