diff --git a/Assets/ModuleCore/Module/DataCharacter.cs b/Assets/ModuleCore/Module/DataCharacter.cs
index 514143f..6eda4ff 100644
--- a/Assets/ModuleCore/Module/DataCharacter.cs
+++ b/Assets/ModuleCore/Module/DataCharacter.cs
@@ -90,4 +90,32 @@ public class DataProfession {
public int level = 0;
/// 累计生命点
public List hitPoints = new List();
+}
+///
+/// 战斗角色 - 数据
+///
+public class DataCombatRole : DataAttribute {
+ /// 角色数据
+ public readonly DataCharacter character;
+ /// 战斗角色
+ public DataCombatRole(DataCharacter character) => this.character = character;
+
+ /// 归属队伍
+ public int team;
+ /// 角色名字
+ public string name;
+ /// 战斗等级
+ public int level;
+ /// 战场位置
+ public int position;
+ /// 先攻顺序
+ public int sequence;
+ /// 护甲等级
+ public int armorClass;
+ /// 生命点
+ public Vector2Int hitPoint;
+ /// 武器1
+ public DataWeapon weapon1;
+ /// 武器2
+ public DataWeapon weapon2;
}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs b/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs
deleted file mode 100644
index b96dd2e..0000000
--- a/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-///
-/// 战斗角色
-///
-public class BattleCharacter : DataAttribute {
- /// 角色数据
- public readonly DataCharacter character;
-
- /// 归属队伍
- public int team;
- /// 角色名字
- public string name;
- /// 战斗等级
- public int level;
- /// 战场位置
- public int position;
- /// 先攻顺序
- public int sequence;
- /// 护甲等级
- public int armorClass;
- /// 生命点
- public Vector2Int hitPoint;
-
- public BattleCharacter(DataCharacter character, int team) {
- this.character = character;
- AttributeTool.Cover(this, character);
- this.team = team;
- name = character.name;
- level = character.Level;
- position = 1;
- hitPoint = new Vector2Int(character.HitPoint, character.HitPoint);
- armorClass = character.ArmorClass;
- }
-
- /// 是否允许行动
- public bool IsAction() {
- return hitPoint.x > 0;
- }
- /// 是否敌对目标
- public bool IsHostility(BattleCharacter target) {
- return team != target.team && target.hitPoint.x > 0;
- }
-}
diff --git a/Assets/ModuleCore/ModuleBattle/BattlePhase/BattlePhase.cs b/Assets/ModuleCore/ModuleBattle/BattlePhase/BattlePhase.cs
index b7e117c..8b7f873 100644
--- a/Assets/ModuleCore/ModuleBattle/BattlePhase/BattlePhase.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattlePhase/BattlePhase.cs
@@ -6,22 +6,15 @@ using UnityEngine;
/// 阶段类型
///
public enum PhaseType {
- 先攻阶段,
- 突袭阶段,
- 回合阶段,
- 行动阶段,
- 结算阶段,
+ 先攻阶段, 突袭阶段, 回合阶段, 行动阶段, 结算阶段,
+ 选择角色, 角色攻击
}
///
/// 阶段
///
public interface IPhase {
- /// 开始阶段
- public void StartPhase();
- /// 更新阶段
- public void UpdatePhase();
- /// 退出阶段
- public void QuitPhase();
+ /// 执行阶段
+ public void Execute();
}
///
/// 战斗阶段
@@ -30,12 +23,12 @@ public abstract class BattlePhase : IPhase {
/// 模拟器
public readonly BattleSimulator simulator;
+ /// 行动角色
+ public DataCombatRole ActionRole => simulator.actionRole;
/// 战斗队列
public BattleQueue BattleQueue => simulator.battleQueue;
public BattlePhase(BattleSimulator simulator) => this.simulator = simulator;
- public abstract void StartPhase();
- public abstract void UpdatePhase();
- public abstract void QuitPhase();
+ public abstract void Execute();
}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs
index ccaca18..2fdbcc1 100644
--- a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAction.cs
@@ -6,55 +6,70 @@ using UnityEngine;
/// 行动阶段
///
public class PhaseAction : BattlePhase {
- /// 当前行动
- private BattleCharacter currentAction;
- /// 当前目标
- private BattleCharacter currentTarget;
public PhaseAction(BattleSimulator simulator) : base(simulator) { }
- public override void StartPhase() {
- // throw new System.NotImplementedException();
- }
- public override void UpdatePhase() {
- // 选择行动的角色,如果没有则进入下一轮
- if (!SelectAction()) { return; }
- // 选择攻击的目标,如果没有目标则结算战斗
- if (!SelectTarget()) { return; }
- // 命中检定
- int hit = Dice.Roll20(currentAction.DexModifier);
- int ac = currentTarget.armorClass;
- bool isHit = hit > ac;
- // 伤害计算
- if (isHit) {
- int damage = Dice.Roll8(currentAction.StrModifier);
- currentTarget.hitPoint.x -= damage;
- Debug.Log($"{currentAction.name}使用 普通攻击({hit}) 对 {currentTarget.name}({ac}) 造成 {damage} 点伤害!");
- }
- else {
- Debug.Log($"{currentAction.name}使用 普通攻击({hit}) 对 {currentTarget.name}({ac}) 未命中!");
- }
- // TODO:记录器
- // Debug.Log($"正式回合:{roundCount}");
- }
- public override void QuitPhase() {
- // throw new System.NotImplementedException();
- }
+ public override void Execute() {
- /// 选择当前行动角色
- private bool SelectAction() {
- // 选择行动的角色,如果没有则进入下一回合
- if (!BattleQueue.Dequeue(out currentAction)) { simulator.Transition(PhaseType.回合阶段); return false; }
- // 判断是否可以行动
- if (!currentAction.IsAction()) { return false; }
- return true;
- }
- /// 选择当前目标角色
- private bool SelectTarget() {
- // 选择一个可以攻击的目标
- currentTarget = BattleQueue.FirstOrDefault(obj => currentAction.IsHostility(obj));
- // 如果没有可以攻击的目标则结算战斗
- if (currentTarget == null) { simulator.Transition(PhaseType.结算阶段); }
- return currentTarget != null;
}
}
+///
+/// 行动角色选择
+///
+public class PhaseActionRoleSelect : BattlePhase {
+
+ public PhaseActionRoleSelect(BattleSimulator simulator) : base(simulator) { }
+
+ public override void Execute() {
+ // 选择行动的角色,如果没有则进入下一回合
+ PhaseType phase = BattleQueue.Dequeue(out simulator.actionRole) ? PhaseType.角色攻击 : PhaseType.回合阶段;
+ simulator.Transition(phase);
+ }
+}
+///
+/// 行动角色攻击
+///
+public class PhaseActionRoleAttack : BattlePhase {
+
+ public PhaseActionRoleAttack(BattleSimulator simulator) : base(simulator) { }
+
+ public override void Execute() {
+ // 判断是否可以行动
+ if (ActionRole.hitPoint.x <= 0) { simulator.Transition(PhaseType.选择角色); return; }
+ // 选择可以攻击的目标
+ List roles = AttackTarget();
+ // 如果没有可以攻击的目标则结算战斗
+ if (roles.Count == 0) { simulator.Transition(PhaseType.结算阶段); return; }
+ // 攻击单体目标
+ int randomIndex = Random.Range(0, roles.Count);
+ DataCombatRole target = roles[randomIndex];
+ // 武器判断
+ // ActionRole.weapon1
+ // 命中检定
+ int hit = Dice.Roll20(ActionRole.StrModifier);
+ int armorClass = target.armorClass;
+ // 伤害计算
+ int damage = Dice.Roll8(ActionRole.StrModifier);
+ if (hit > armorClass) { target.hitPoint.x -= damage; }
+ // 生成战斗消息
+ MessageNormalAttack message = new MessageNormalAttack();
+ message.Settings(ActionRole, hit, damage);
+ message.Settings(target, armorClass);
+ Debug.Log(message);
+ simulator.Transition(PhaseType.选择角色);
+ }
+ /// 攻击目标
+ private List AttackTarget() {
+ return BattleQueue.Where(Hostility);
+ }
+ /// 敌对目标
+ public bool Hostility(DataCombatRole role) {
+ return role.team != ActionRole.team && role.hitPoint.x > 0;
+ }
+}
+///
+/// 战斗行动
+///
+public class BattleAction {
+
+}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAssault.cs b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAssault.cs
index bd2b051..95b2108 100644
--- a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAssault.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseAssault.cs
@@ -9,13 +9,7 @@ public class PhaseAssault : BattlePhase {
public PhaseAssault(BattleSimulator simulator) : base(simulator) { }
- public override void StartPhase() {
- // throw new System.NotImplementedException();
- }
- public override void UpdatePhase() {
- // throw new System.NotImplementedException();
- }
- public override void QuitPhase() {
- // throw new System.NotImplementedException();
+ public override void Execute() {
+
}
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFinish.cs b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFinish.cs
index 1c5c1a5..1944f4d 100644
--- a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFinish.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFinish.cs
@@ -9,17 +9,10 @@ public class PhaseFinish : BattlePhase {
public PhaseFinish(BattleSimulator simulator) : base(simulator) { }
- public override void StartPhase() {
- // TODO:记录器
- Debug.Log("结束战斗!");
- }
- public override void UpdatePhase() {
+ public override void Execute() {
// TODO:需要添加结算判断
// simulator.Transition(PhaseType.回合阶段);
// TODO:记录器
-
- }
- public override void QuitPhase() {
- // throw new System.NotImplementedException();
+ Debug.Log("结束战斗!");
}
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFormal.cs b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFormal.cs
index a971522..0ddeefb 100644
--- a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFormal.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseFormal.cs
@@ -11,20 +11,14 @@ public class PhaseFormal : BattlePhase {
public PhaseFormal(BattleSimulator simulator) : base(simulator) { }
- public override void StartPhase() {
- // throw new System.NotImplementedException();
- }
- public override void UpdatePhase() {
+ public override void Execute() {
roundCount++;
BattleQueue.UpdateQueue();
- simulator.Transition(PhaseType.行动阶段);
// TODO:记录器
Debug.Log($"正式回合:{roundCount}");
string message = "存活";
BattleQueue.ForEach(obj => message += $" {obj.name}({obj.hitPoint.x})");
Debug.Log(message);
- }
- public override void QuitPhase() {
- // throw new System.NotImplementedException();
+ simulator.Transition(PhaseType.选择角色);
}
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseInitiative.cs b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseInitiative.cs
index c35dee4..915ddd7 100644
--- a/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseInitiative.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattlePhase/PhaseInitiative.cs
@@ -9,20 +9,14 @@ public class PhaseInitiative : BattlePhase {
public PhaseInitiative(BattleSimulator simulator) : base(simulator) { }
- public override void StartPhase() {
- // throw new System.NotImplementedException();
- }
- public override void UpdatePhase() {
+ public override void Execute() {
BattleQueue.ForEach(obj => obj.sequence = Dice.Roll20(obj.DexModifier));
BattleQueue.OrderByDescending(c => c.sequence);
// TODO:需要添加突袭阶段
- simulator.Transition(PhaseType.回合阶段);
// TODO:记录器
string message = "先攻";
BattleQueue.ForEach(obj => message += $" {obj.name}({obj.sequence})");
Debug.Log(message);
- }
- public override void QuitPhase() {
- // throw new System.NotImplementedException();
+ simulator.Transition(PhaseType.回合阶段);
}
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattleQueue.cs b/Assets/ModuleCore/ModuleBattle/BattleQueue.cs
index 354d94e..fb0be48 100644
--- a/Assets/ModuleCore/ModuleBattle/BattleQueue.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattleQueue.cs
@@ -9,40 +9,40 @@ using UnityEngine;
///
public class BattleQueue {
/// 执行队列
- public Queue queue = new Queue();
+ public Queue queue = new Queue();
/// 战斗合集
- public List characters = new List();
+ public List characters = new List();
/// 添加角色
- public void Add(List list) {
+ public void Add(List list) {
characters.AddRange(list);
}
/// 添加角色
- public void Add(BattleCharacter character) {
+ public void Add(DataCombatRole character) {
characters.Add(character);
}
/// 遍历角色
- public void ForEach(Action action) {
+ public void ForEach(Action action) {
characters.ForEach(action);
}
// /// 排序:大到小
- public void OrderByDescending(Func func) {
+ public void OrderByDescending(Func func) {
characters = characters.OrderByDescending(func).ToList();
}
/// 根据条件查询元素
- public List Where(Func predicate) {
+ public List Where(Func predicate) {
return characters.Where(predicate).ToList();
}
/// 根据条件查询第一个匹配的元素
- public BattleCharacter FirstOrDefault(Func predicate) {
+ public DataCombatRole FirstOrDefault(Func predicate) {
return characters.FirstOrDefault(predicate);
}
/// 更新队列
public void UpdateQueue() {
- queue = new Queue(characters);
+ queue = new Queue(characters);
}
/// 取出一个
- public bool Dequeue(out BattleCharacter battle) {
+ public bool Dequeue(out DataCombatRole battle) {
battle = queue.Count > 0 ? queue.Dequeue() : null;
return battle != null;
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattleReport.cs b/Assets/ModuleCore/ModuleBattle/BattleReport.cs
new file mode 100644
index 0000000..447160c
--- /dev/null
+++ b/Assets/ModuleCore/ModuleBattle/BattleReport.cs
@@ -0,0 +1,81 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 战斗报告
+///
+public class BattleReport {
+ /// 战斗消息
+ public List messages;
+}
+///
+/// 战斗消息
+///
+public class BattleMessage {
+
+}
+///
+/// 普通攻击 - 战斗消息
+///
+public class MessageNormalAttack : BattleMessage {
+ /// 攻击者
+ public DataCombatRole attacker;
+ /// 命中值
+ public int hit;
+ /// 伤害值
+ public int damage;
+
+ /// 被攻击者
+ public DataCombatRole attacked;
+ /// 护甲等级
+ public int armorClass;
+
+ /// 设置攻击者
+ public void Settings(DataCombatRole attacker, int hit, int damage) {
+ this.attacker = attacker;
+ this.hit = hit;
+ this.damage = damage;
+ }
+ /// 设置被攻击者
+ public void Settings(DataCombatRole attacked, int armorClass) {
+ this.attacked = attacked;
+ this.armorClass = armorClass;
+ }
+ public override string ToString() {
+ return $"{attacker.name}{Dynamics()}{attacked.name}({armorClass}),{attacked.name}{Result()}";
+ }
+
+ /// 动态修饰词
+ private string Dynamics() {
+ return $"使用长剑劈向({hit})";
+ }
+ /// 结果修饰词
+ private string Result() {
+ return hit <= armorClass ? Miss() : Hit();
+ }
+ // 未命中的多种情况
+ private string Miss() {
+ string[] missText = new string[] {
+ "轻松避开了这一击!",
+ "巧妙地闪开了!",
+ "险之又险地躲过了!",
+ "成功格挡住了!"
+ };
+ return RandomChoice(missText);
+ }
+ // 命中的情况,可根据伤害量或是否暴击细分
+ private string Hit() {
+ string[] hitText = new string[] {
+ $"躲避不及遭受到了{damage}点伤害!",
+ $"被狠狠击中,承受了{damage}点伤害!",
+ $"格挡失败受到了{damage}点伤害!",
+ };
+ return RandomChoice(hitText);
+ }
+ // 辅助方法:随机选择一个字符串,增加多样性
+ private string RandomChoice(params string[] options) {
+ if (options.Length == 0) return "";
+ return options[Random.Range(0, options.Length)];
+ }
+}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs.meta b/Assets/ModuleCore/ModuleBattle/BattleReport.cs.meta
similarity index 83%
rename from Assets/ModuleCore/ModuleBattle/BattleCharacter.cs.meta
rename to Assets/ModuleCore/ModuleBattle/BattleReport.cs.meta
index d4b0bd2..0002efb 100644
--- a/Assets/ModuleCore/ModuleBattle/BattleCharacter.cs.meta
+++ b/Assets/ModuleCore/ModuleBattle/BattleReport.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: b4cb406221da1364f97a333bf1e3442c
+guid: 26a3fb20ae1a54143ab478049f4acd8e
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/ModuleCore/ModuleBattle/BattleSimulator.cs b/Assets/ModuleCore/ModuleBattle/BattleSimulator.cs
index 5af8cdf..3efe9db 100644
--- a/Assets/ModuleCore/ModuleBattle/BattleSimulator.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattleSimulator.cs
@@ -9,6 +9,8 @@ using UnityEngine;
/// 战斗 - 模拟器
///
public class BattleSimulator {
+ /// 当前行动
+ public DataCombatRole actionRole;
/// 战斗队列
public BattleQueue battleQueue = new BattleQueue();
@@ -18,8 +20,11 @@ public class BattleSimulator {
public Dictionary dictionary = new Dictionary();
public BattleSimulator(BattleTeam team1, BattleTeam team2) {
- team1.Initial(1);
- team2.Initial(2);
+ team1.Initial();
+ team2.Initial();
+
+ team1.Settings(1, 1);
+ team2.Settings(2, 1);
battleQueue.Add(team1.battles);
battleQueue.Add(team2.battles);
@@ -28,27 +33,16 @@ public class BattleSimulator {
dictionary.Add(PhaseType.突袭阶段, new PhaseAssault(this));
dictionary.Add(PhaseType.回合阶段, new PhaseFormal(this));
dictionary.Add(PhaseType.行动阶段, new PhaseAction(this));
+ dictionary.Add(PhaseType.选择角色, new PhaseActionRoleSelect(this));
+ dictionary.Add(PhaseType.角色攻击, new PhaseActionRoleAttack(this));
dictionary.Add(PhaseType.结算阶段, new PhaseFinish(this));
-
- Transition(PhaseType.先攻阶段);
- }
- public void Update() {
- currentPhase?.UpdatePhase();
}
/// 阶段过渡
public void Transition(PhaseType phaseType) {
// 检查阶段字典中是否存在指定的阶段类型
- if (dictionary.TryGetValue(phaseType, out IPhase newPhase)) {
- // 如果存在则更新当前阶段
- currentPhase?.QuitPhase();
- currentPhase = newPhase;
- currentPhase?.StartPhase();
- // Debug.Log($"战斗阶段已转换为: {phaseType}");
- }
- else {
- // 不存在时输出警告信息
- Debug.LogWarning($"阶段字典中不存在 {phaseType} 对应的阶段实现");
- }
+ if (!dictionary.TryGetValue(phaseType, out IPhase newPhase)) { return; }
+ currentPhase = newPhase;
+ currentPhase?.Execute();
}
}
diff --git a/Assets/ModuleCore/ModuleBattle/BattleSkill.cs b/Assets/ModuleCore/ModuleBattle/BattleSkill.cs
new file mode 100644
index 0000000..3985f62
--- /dev/null
+++ b/Assets/ModuleCore/ModuleBattle/BattleSkill.cs
@@ -0,0 +1,10 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 战斗技能
+///
+public class BattleSkill {
+
+}
diff --git a/Assets/ModuleCore/ModuleBattle/BattleSkill.cs.meta b/Assets/ModuleCore/ModuleBattle/BattleSkill.cs.meta
new file mode 100644
index 0000000..6f2b63d
--- /dev/null
+++ b/Assets/ModuleCore/ModuleBattle/BattleSkill.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f4f5e0db8e96cfd4d8d9243f4057f99a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleBattle/BattleTeam.cs b/Assets/ModuleCore/ModuleBattle/BattleTeam.cs
index ca3b013..ed9b4e2 100644
--- a/Assets/ModuleCore/ModuleBattle/BattleTeam.cs
+++ b/Assets/ModuleCore/ModuleBattle/BattleTeam.cs
@@ -11,7 +11,7 @@ public class BattleTeam {
/// 原始数据
public List characters = new List();
/// 战斗数据
- public List battles = new List();
+ public List battles = new List();
/// 添加角色
public void Add(List list) {
@@ -26,8 +26,18 @@ public class BattleTeam {
characters.Remove(character);
}
- /// 战斗初始化
- public void Initial(int id) {
- characters.ForEach(obj => battles.Add(new BattleCharacter(obj, id)));
+ /// 初始化
+ public void Initial() {
+ characters.ForEach(Initial);
+ }
+ /// 初始化
+ public void Initial(DataCharacter character) {
+ DataCombatRole role = new DataCombatRole(character);
+ role.Initial();
+ battles.Add(role);
+ }
+ /// 战斗编队
+ public void Settings(int team, int position) {
+ battles.ForEach(obj => obj.Settings(team, position));
}
}
\ No newline at end of file
diff --git a/Assets/ModuleCore/ModuleCharacter/CharacterDictionary.cs b/Assets/ModuleCore/ModuleCharacter/CharacterDictionary.cs
index aba5a40..921820c 100644
--- a/Assets/ModuleCore/ModuleCharacter/CharacterDictionary.cs
+++ b/Assets/ModuleCore/ModuleCharacter/CharacterDictionary.cs
@@ -15,6 +15,10 @@ public static class CharacterDictionary {
character.profession = ProfessionTool.Wizard();
character.profession.Initial(character);
character.equipment = new DataEquipment();
+ // 装备法杖
+ character.equipment.Wear(WeaponDictionary.Weapon302(), out DataWear old1);
+ // 装备法袍
+ character.equipment.Wear(ArmorDictionary.Armor101(), out DataWear old2);
return character;
}
/// 托尔吉 兽人 战士
@@ -26,6 +30,11 @@ public static class CharacterDictionary {
character.profession = ProfessionTool.Warrior();
character.profession.Initial(character);
character.equipment = new DataEquipment();
+ // 装备木棒和木盾
+ character.equipment.Wear(WeaponDictionary.Weapon201(), out DataWear old1);
+ character.equipment.Wear(WeaponDictionary.Weapon401(), out DataWear old2);
+ // 装备板甲
+ character.equipment.Wear(ArmorDictionary.Armor401(), out DataWear old3);
return character;
}
/// 格伦布林 矮人 牧师
@@ -37,6 +46,11 @@ public static class CharacterDictionary {
character.profession = ProfessionTool.Cleric();
character.profession.Initial(character);
character.equipment = new DataEquipment();
+ // 装备木棒和木盾
+ character.equipment.Wear(WeaponDictionary.Weapon201(), out DataWear old1);
+ character.equipment.Wear(WeaponDictionary.Weapon401(), out DataWear old2);
+ // 装备链甲
+ character.equipment.Wear(ArmorDictionary.Armor301(), out DataWear old3);
return character;
}
}
diff --git a/Assets/ModuleCore/ModuleCharacter/CombatRoleTool.cs b/Assets/ModuleCore/ModuleCharacter/CombatRoleTool.cs
new file mode 100644
index 0000000..12f2a92
--- /dev/null
+++ b/Assets/ModuleCore/ModuleCharacter/CombatRoleTool.cs
@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 战斗角色 - 工具
+///
+public static class CombatRoleTool {
+
+ #region 设置参数
+ /// 初始角色
+ public static void Initial(this DataCombatRole role) {
+ AttributeTool.Cover(role, role.character);
+ role.name = role.character.name;
+ role.level = role.character.Level;
+ role.hitPoint = new Vector2Int(role.character.HitPoint, role.character.HitPoint);
+ role.armorClass = role.character.ArmorClass;
+ role.weapon1 = role.character.equipment.weapon1;
+ role.weapon2 = role.character.equipment.weapon2;
+ }
+ /// 设置队伍
+ public static void Settings(this DataCombatRole role, int team, int position) {
+ role.team = team;
+ role.position = position;
+ }
+ #endregion
+
+}
diff --git a/Assets/ModuleCore/ModuleCharacter/CombatRoleTool.cs.meta b/Assets/ModuleCore/ModuleCharacter/CombatRoleTool.cs.meta
new file mode 100644
index 0000000..4cd2698
--- /dev/null
+++ b/Assets/ModuleCore/ModuleCharacter/CombatRoleTool.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2eb2cecc8838b1445a24dce7aa669bd3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/ModuleCore/ModuleInventory/ArmorDictionary.cs b/Assets/ModuleCore/ModuleInventory/ArmorDictionary.cs
index aae7721..be211f5 100644
--- a/Assets/ModuleCore/ModuleInventory/ArmorDictionary.cs
+++ b/Assets/ModuleCore/ModuleInventory/ArmorDictionary.cs
@@ -6,7 +6,7 @@ using UnityEngine;
/// 装备 - 字典
///
public static class ArmorDictionary {
- /// 武器
+ /// 护甲
public static DataArmor Armor(string name, ArmorType armorType) {
DataArmor armor = new DataArmor();
armor.name = name;
diff --git a/Assets/ModuleCore/ModuleInventory/WeaponDictionary.cs b/Assets/ModuleCore/ModuleInventory/WeaponDictionary.cs
index 6e58ffc..d97364e 100644
--- a/Assets/ModuleCore/ModuleInventory/WeaponDictionary.cs
+++ b/Assets/ModuleCore/ModuleInventory/WeaponDictionary.cs
@@ -22,28 +22,50 @@ public static class WeaponDictionary {
addition.damageDices.Add(dice);
return addition;
}
+
/// 匕首 1d4
public static DataWeapon Weapon101() {
DataWeapon weapon = Weapon("匕首", WeaponType.轻型武器);
weapon.additions.Add(DamageDice(4, DamageType.穿刺));
return weapon;
}
+ /// 短弓 1d6
+ public static DataWeapon Weapon102() {
+ DataWeapon weapon = Weapon("短弓", WeaponType.轻型武器);
+ weapon.additions.Add(DamageDice(6, DamageType.穿刺));
+ return weapon;
+ }
+
/// 木棒 1d6
public static DataWeapon Weapon201() {
DataWeapon weapon = Weapon("木棒", WeaponType.中型武器);
weapon.additions.Add(DamageDice(6, DamageType.挥砍));
return weapon;
}
+
/// 巨棒 1d8
public static DataWeapon Weapon301() {
DataWeapon weapon = Weapon("巨棒", WeaponType.重型武器);
weapon.additions.Add(DamageDice(8, DamageType.钝击));
return weapon;
}
+ /// 法杖 1d6
+ public static DataWeapon Weapon302() {
+ DataWeapon weapon = Weapon("法杖", WeaponType.重型武器);
+ weapon.additions.Add(DamageDice(6, DamageType.钝击));
+ return weapon;
+ }
+
/// 木盾 ac1
public static DataWeapon Weapon401() {
DataWeapon weapon = Weapon("木盾", WeaponType.盾牌);
weapon.additions.Add(new DataAddition { armorClass = 1 });
return weapon;
}
+ /// 箭袋 +20
+ public static DataWeapon Weapon402() {
+ DataWeapon weapon = Weapon("箭袋", WeaponType.盾牌);
+ weapon.additions.Add(new DataAddition { armorClass = 1 });
+ return weapon;
+ }
}
diff --git a/Assets/ModuleCore/ModuleSingle/ManagerSimulator.cs b/Assets/ModuleCore/ModuleSingle/ManagerSimulator.cs
index c914148..68f65c1 100644
--- a/Assets/ModuleCore/ModuleSingle/ManagerSimulator.cs
+++ b/Assets/ModuleCore/ModuleSingle/ManagerSimulator.cs
@@ -19,20 +19,16 @@ public class ManagerSimulator : ModuleSingle {
private void Start() {
team1 = new BattleTeam();
- team1.Add(RandomCharacter("艾薇拉"));
- team1.Add(RandomCharacter("托尔吉"));
+ team1.Add(CharacterDictionary.Character001());
+ team1.Add(CharacterDictionary.Character002());
+ team1.Add(CharacterDictionary.Character003());
team2 = new BattleTeam();
- team2.Add(RandomCharacter("哥布林射手"));
- team2.Add(RandomCharacter("哥布林战士"));
+ team2.Add(MonsterDictionary.Monster001());
+ team2.Add(MonsterDictionary.Monster002());
+ team2.Add(MonsterDictionary.Monster002());
battleSimulator = new BattleSimulator(team1, team2);
- }
- private void Update() {
- battleSimulator.Update();
- }
-
- private DataCharacter RandomCharacter(string name) {
- return CharacterTool.Create(name, RaceTool.Random(), ProfessionTool.Random());
+ battleSimulator.Transition(PhaseType.先攻阶段);
}
}