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.先攻阶段); } }