diff --git a/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs b/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs
index 7a76e7e..eb11ee7 100644
--- a/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs
@@ -34,4 +34,9 @@ public class BattleCharacter : DataAttribute {
hitPoint = new Vector2Int(character.HitPoint, character.HitPoint);
armorClass = character.ArmorClass;
}
+
+ /// 攻击目标
+ public bool AttackTarget(BattleCharacter target) {
+ return team != target.team && target.hitPoint.x > 0;
+ }
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs
index 9ac3326..b1dc613 100644
--- a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs
@@ -16,9 +16,9 @@ public class PhaseAction : BattlePhase {
// 选择行动目标,没有行动目标则进入结算阶段
if (!BattleQueue.Dequeue(out BattleCharacter character)) { simulator.Transition(PhaseType.结算阶段); return; }
// 判断是否可以行动
-
- // 选择一个目标
-
+ if (ActionPredicate(character)) { return; }
+ // 选择一个可以攻击的目标
+ BattleCharacter target = BattleQueue.FirstOrDefault(obj => character.AttackTarget(obj));
// 对目标进行攻击
// TODO:记录器
@@ -27,4 +27,10 @@ public class PhaseAction : BattlePhase {
public override void QuitPhase() {
// throw new System.NotImplementedException();
}
+
+ /// 行动判断
+ private bool ActionPredicate(BattleCharacter character) {
+ return character.hitPoint.x > 0;
+ }
+
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattleQueue.cs b/Assets/ModuleCore/ModuleBattle/BattleQueue.cs
index b70baff..354d94e 100644
--- a/Assets/ModuleCore/ModuleBattle/BattleQueue.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattleQueue.cs
@@ -29,6 +29,14 @@ public class BattleQueue {
public void OrderByDescending(Func func) {
characters = characters.OrderByDescending(func).ToList();
}
+ /// 根据条件查询元素
+ public List Where(Func predicate) {
+ return characters.Where(predicate).ToList();
+ }
+ /// 根据条件查询第一个匹配的元素
+ public BattleCharacter FirstOrDefault(Func predicate) {
+ return characters.FirstOrDefault(predicate);
+ }
/// 更新队列
public void UpdateQueue() {
queue = new Queue(characters);