This commit is contained in:
MuHua-123
2025-07-23 18:01:18 +08:00
parent 8ebd3864c6
commit 5ca97fb0b1
54 changed files with 749 additions and 704 deletions
@@ -1,16 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 附加 - 数据
/// </summary>
public class DataAddition {
/// <summary> 护甲等级 </summary>
public int armorClass = 0;
/// <summary> 添加属性 </summary>
public void Add(DataAddition value) {
armorClass += value.armorClass;
}
}
-8
View File
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: f600b7e509b166244a37c240ffee12ba
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,77 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 属性 - 数据
/// </summary>
public class DataAttribute {
/// <summary> 力量(strength) </summary>
public virtual int Str { get; set; }
/// <summary> 敏捷(dexterity) </summary>
public virtual int Dex { get; set; }
/// <summary> 体质(constitution) </summary>
public virtual int Con { get; set; }
/// <summary> 智力(intelligence) </summary>
public virtual int Int { get; set; }
/// <summary> 感知(wisdom) </summary>
public virtual int Wis { get; set; }
/// <summary> 魅力(charisma) </summary>
public virtual int Cha { get; set; }
/// <summary> 力量调整值(strength) </summary>
public int StrModifier => Modifier(Str);
/// <summary> 敏捷调整值(dexterity) </summary>
public int DexModifier => Modifier(Dex);
/// <summary> 体质调整值(constitution) </summary>
public int ConModifier => Modifier(Con);
/// <summary> 智力调整值(intelligence) </summary>
public int IntModifier => Modifier(Int);
/// <summary> 感知调整值(wisdom) </summary>
public int WisModifier => Modifier(Wis);
/// <summary> 魅力调整值(charisma) </summary>
public int ChaModifier => Modifier(Cha);
/// <summary> 创建初始属性 </summary>
public static DataAttribute Initial() {
DataAttribute attribute = new DataAttribute();
attribute.Str = Dice.RollAttribute();
attribute.Dex = Dice.RollAttribute();
attribute.Con = Dice.RollAttribute();
attribute.Int = Dice.RollAttribute();
attribute.Wis = Dice.RollAttribute();
attribute.Cha = Dice.RollAttribute();
return attribute;
}
// 计算属性调整值(属性值-10)/2 向下取整
public int Modifier(int value) {
return (int)System.Math.Floor((value - 10) / 2.0);
}
/// <summary> 添加属性 </summary>
public void Add(DataAttribute value) {
Str += value.Str;
Dex += value.Dex;
Con += value.Con;
Int += value.Int;
Wis += value.Wis;
Cha += value.Cha;
}
/// <summary> 减少属性 </summary>
public void Sub(DataAttribute value) {
Str -= value.Str;
Dex -= value.Dex;
Con -= value.Con;
Int -= value.Int;
Wis -= value.Wis;
Cha -= value.Cha;
}
/// <summary> 覆盖属性 </summary>
public void Cover(DataAttribute value) {
Str = value.Str;
Dex = value.Dex;
Con = value.Con;
Int = value.Int;
Wis = value.Wis;
Cha = value.Cha;
}
}
@@ -1,99 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 角色 - 数据
/// </summary>
public class DataCharacter : DataAttribute {
/// <summary> 角色名字 </summary>
public string name;
/// <summary> 经验点 </summary>
public int expPoint;
/// <summary> 种族 </summary>
public DataRace race;
/// <summary> 属性 </summary>
public DataAttribute basis;
/// <summary> 职业 </summary>
public DataProfession profession;
/// <summary> 装备栏 </summary>
public DataEquipmentSlot equipmentSlot;
/// <summary> 战斗等级 </summary>
public int Level => GetLevel();
/// <summary> 生命点 </summary>
public int HitPoint => GetHitPoint();
/// <summary> 护甲等级 </summary>
public int ArmorClass => GetArmorClass();
public override int Str { get => basis.Str + race.Str; }
public override int Dex { get => basis.Dex + race.Dex; }
public override int Con { get => basis.Con + race.Con; }
public override int Int { get => basis.Int + race.Int; }
public override int Wis { get => basis.Wis + race.Wis; }
public override int Cha { get => basis.Cha + race.Cha; }
/// <summary> 设置职业 </summary>
public void Settings(DataRace race) {
this.race = race;
}
/// <summary> 设置职业 </summary>
public void Settings(DataProfession profession) {
this.profession = profession;
profession.character = this;
}
/// <summary> 战斗等级 </summary>
public int GetLevel() {
// TODO:需要补充多职业的等级总和
return profession.level;
}
/// <summary> 生命点 </summary>
public int GetHitPoint() {
// TODO:需要补充多职业的生命值加成
return profession.HitPoint();
}
/// <summary> 计算护甲等级(AC </summary>
public int GetArmorClass() {
// TODO:需要补充专长,技能,熟练之类的加值
return equipmentSlot.GetArmorClass(DexModifier);
}
/// <summary> 创建默认角色 </summary>
public static DataCharacter Create(string name) {
DataCharacter character = new DataCharacter();
character.name = name;
character.race = DataRace.None();
character.basis = Initial();
character.profession = DataProfession.None();
character.profession.Initial(character);
character.equipmentSlot = new DataEquipmentSlot();
return character;
}
/// <summary> 创建默认角色 </summary>
public static DataCharacter Create(string name, DataRace race, DataProfession profession) {
DataCharacter character = new DataCharacter();
character.name = name;
character.race = race;
character.basis = Initial();
character.profession = profession;
character.profession.Initial(character);
character.equipmentSlot = new DataEquipmentSlot();
return character;
}
// 打印角色卡
public void PrintCharacterSheet() {
Debug.Log($"=== {name} LV{Level} ===");
Debug.Log($"种族: {race.name}");
Debug.Log($"职业: {profession.name}");
Debug.Log($"力量: {Str} ({StrModifier.ToString("+#;-#;+0")})");
Debug.Log($"敏捷: {Dex} ({DexModifier.ToString("+#;-#;+0")})");
Debug.Log($"体质: {Con} ({ConModifier.ToString("+#;-#;+0")})");
Debug.Log($"智力: {Int} ({IntModifier.ToString("+#;-#;+0")})");
Debug.Log($"感知: {Wis} ({WisModifier.ToString("+#;-#;+0")})");
Debug.Log($"魅力: {Cha} ({ChaModifier.ToString("+#;-#;+0")})");
Debug.Log($"经验值: {expPoint}");
Debug.Log($"生命值: {HitPoint}");
Debug.Log($"护甲等级: {ArmorClass})");
}
}
@@ -1,67 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 种族 - 数据
/// </summary>
public class DataRace : DataAttribute {
/// <summary> 种族名称 </summary>
public readonly string name;
public DataRace(string name) {
this.name = name;
}
// 混血人类,木精灵,丘陵矮人(Hill Dwarf),龙裔,半精灵
/// <summary> 无种族 </summary>
public static DataRace None() {
return new DataRace("未知");
}
/// <summary> 随机职业 </summary>
public static DataRace Random() {
int index = Dice.Roll(5);
if (index == 1) { return Human(); }
if (index == 2) { return Elven(); }
if (index == 3) { return Dwarf(); }
if (index == 4) { return Orc(); }
if (index == 5) { return Halfling(); }
return None();
}
/// <summary> 人类(Human) </summary>
public static DataRace Human() {
DataRace race = new DataRace("人类");
// 种族属性加成 全属性+1
race.Str = 1; race.Dex = 1; race.Con = 1;
race.Int = 1; race.Wis = 1; race.Cha = 1;
return race;
}
/// <summary> 精灵(Elven) </summary>
public static DataRace Elven() {
DataRace race = new DataRace("精灵");
// 种族属性加成 敏捷+2 智力+2 感知+1
race.Dex = 2; race.Int = 2; race.Int = 1;
return race;
}
/// <summary> 矮人(Dwarf) </summary>
public static DataRace Dwarf() {
DataRace race = new DataRace("矮人");
// 种族属性加成 力量+2 体质+2 感知+1
race.Str = 2; race.Con = 2; race.Wis = 1;
return race;
}
/// <summary> 半兽人(Orc) </summary>
public static DataRace Orc() {
DataRace race = new DataRace("半兽人");
// 种族属性加成 力量+3 体质+2
race.Str = 3; race.Con = 2;
return race;
}
/// <summary> 半身人(Halfling) </summary>
public static DataRace Halfling() {
DataRace race = new DataRace("半身人");
// 种族属性加成 敏捷+2 魅力+2 体质+1
race.Dex = 2; race.Cha = 2; race.Con = 1;
return race;
}
}
+93
View File
@@ -0,0 +1,93 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 属性 - 数据
/// </summary>
public class DataAttribute {
/// <summary> 力量(strength) </summary>
public virtual int Str { get; set; }
/// <summary> 敏捷(dexterity) </summary>
public virtual int Dex { get; set; }
/// <summary> 体质(constitution) </summary>
public virtual int Con { get; set; }
/// <summary> 智力(intelligence) </summary>
public virtual int Int { get; set; }
/// <summary> 感知(wisdom) </summary>
public virtual int Wis { get; set; }
/// <summary> 魅力(charisma) </summary>
public virtual int Cha { get; set; }
/// <summary> 力量调整值(strength) </summary>
public int StrModifier => AttributeTool.Modifier(Str);
/// <summary> 敏捷调整值(dexterity) </summary>
public int DexModifier => AttributeTool.Modifier(Dex);
/// <summary> 体质调整值(constitution) </summary>
public int ConModifier => AttributeTool.Modifier(Con);
/// <summary> 智力调整值(intelligence) </summary>
public int IntModifier => AttributeTool.Modifier(Int);
/// <summary> 感知调整值(wisdom) </summary>
public int WisModifier => AttributeTool.Modifier(Wis);
/// <summary> 魅力调整值(charisma) </summary>
public int ChaModifier => AttributeTool.Modifier(Cha);
}
/// <summary>
/// 角色 - 数据
/// </summary>
public class DataCharacter : DataAttribute {
/// <summary> 名字 </summary>
public string name;
/// <summary> 经验 </summary>
public int expPoint;
/// <summary> 种族 </summary>
public DataRace race;
/// <summary> 属性 </summary>
public DataAttribute basis;
/// <summary> 职业 </summary>
public DataProfession profession;
/// <summary> 装备 </summary>
public DataEquipment equipment;
/// <summary> 战斗等级 </summary>
public int Level => CharacterTool.GetLevel(this);
/// <summary> 生命点 </summary>
public int HitPoint => CharacterTool.GetHitPoint(this);
/// <summary> 护甲等级 </summary>
public int ArmorClass => CharacterTool.GetArmorClass(this);
/// <summary> 力量(strength) 基础值 + 种族加值 </summary>
public override int Str { get => basis.Str + race.Str; }
/// <summary> 敏捷(dexterity) 基础值 + 种族加值 </summary>
public override int Dex { get => basis.Dex + race.Dex; }
/// <summary> 体质(constitution) 基础值 + 种族加值 </summary>
public override int Con { get => basis.Con + race.Con; }
/// <summary> 智力(intelligence) 基础值 + 种族加值 </summary>
public override int Int { get => basis.Int + race.Int; }
/// <summary> 感知(wisdom) 基础值 + 种族加值 </summary>
public override int Wis { get => basis.Wis + race.Wis; }
/// <summary> 魅力(charisma) 基础值 + 种族加值 </summary>
public override int Cha { get => basis.Cha + race.Cha; }
}
/// <summary>
/// 种族 - 数据
/// </summary>
public class DataRace : DataAttribute {
/// <summary> 种族名称 </summary>
public string name;
}
/// <summary>
/// 职业 - 数据
/// </summary>
public class DataProfession {
/// <summary> 职业名称 </summary>
public string name;
/// <summary> 生命骰子 </summary>
public int hitDice = 0;
/// <summary> 角色 </summary>
public DataCharacter character;
/// <summary> 职业等级 </summary>
public int level = 0;
/// <summary> 累计生命点 </summary>
public List<int> hitPoints = new List<int>();
}
+51
View File
@@ -0,0 +1,51 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备栏 - 库存
/// </summary>
public class DataEquipment {
/// <summary> 武器1 </summary>
public DataWeapon weapon1;
/// <summary> 武器2 </summary>
public DataWeapon weapon2;
/// <summary> 护甲 </summary>
public DataArmor armor;
/// <summary> 头盔 </summary>
public DataWear helmets;
/// <summary> 手套 </summary>
public DataWear gloves;
/// <summary> 鞋子 </summary>
public DataWear shoes;
/// <summary> 附加效果 </summary>
public DataAddition addition = new DataAddition();
}
/// <summary>
/// 附加 - 数据
/// </summary>
public class DataAddition {
/// <summary> 护甲等级 </summary>
public int armorClass = 0;
/// <summary> 伤害骰子 </summary>
public List<DataDamageDice> damageDices = new List<DataDamageDice>();
}
/// <summary>
/// 伤害类型
/// </summary>
public enum DamageType { 穿, , }
/// <summary>
/// 伤害 - 数据
/// </summary>
public class DataDamageDice {
/// <summary> 伤害骰子 </summary>
public readonly int dice;
/// <summary> 伤害类型 </summary>
public readonly DamageType damageType;
public DataDamageDice(int dice, DamageType damageType) {
this.dice = dice;
this.damageType = damageType;
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c500c73626d889c4c8cac76a53f95b2d
guid: 62fae57d4dbef374ba92424caa7b6885
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -2,19 +2,26 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 库存类型枚举,区分背包、仓库等不同库存。
/// </summary>
public enum InventoryType { EquipmentSlot, Backpack, Storage }
/// <summary>
/// 物品库存 - 数据
/// </summary>
public abstract class DataInventory {
/// <summary> 库存类型 </summary>
public InventoryType inventoryType;
/// <summary> 添加物品 </summary>
public abstract bool Add(DataItem item);
/// <summary> 移除物品 </summary>
public abstract bool Remove(DataItem item);
}
/// <summary>
/// 库存类型枚举,区分背包、仓库等不同库存
/// 仓库 - 库存
/// </summary>
public enum InventoryType { EquipmentSlot, Backpack, Storage }
public class DataStorage : DataInventory {
}
/// <summary>
/// 背包 - 库存
/// </summary>
public class DataBackpack : DataInventory {
}
+64
View File
@@ -0,0 +1,64 @@
using System.Collections;
using System.Collections.Generic;
using UnityEditor.EditorTools;
using UnityEngine;
/// <summary>
/// 物品类型
/// </summary>
public enum ItemType { , }
/// <summary>
/// 物品 - 数据
/// </summary>
public class DataItem {
/// <summary> 物品名称 </summary>
public string name;
/// <summary> 物品类型 </summary>
public ItemType itemType;
}
/// <summary>
/// 材料 - 数据
/// </summary>
public class DataMaterial : DataItem {
/// <summary> 物品数量 </summary>
public int quantity;
/// <summary> 堆叠上限 </summary>
public int maxStack;
}
/// <summary>
/// 穿戴类型
/// </summary>
public enum WearType { , , , , , }
/// <summary>
/// 穿戴 - 数据
/// </summary>
public class DataWear : DataItem {
/// <summary> 装备类型 </summary>
public WearType wearType;
/// <summary> 附加列表 </summary>
public List<DataAddition> additions = new List<DataAddition>();
/// <summary> 附加效果 </summary>
public virtual DataAddition Addition => EquipmentTool.Merge(additions);
}
/// <summary>
/// 武器类型。
/// </summary>
public enum WeaponType { , , , , }
/// <summary>
/// 武器 - 数据
/// </summary>
public class DataWeapon : DataWear {
/// <summary> 武器类型 </summary>
public WeaponType weaponType;
}
/// <summary>
/// 护甲类型。
/// </summary>
public enum ArmorType { , , , , }
/// <summary>
/// 护甲 - 数据
/// </summary>
public class DataArmor : DataWear {
/// <summary> 护甲类型 </summary>
public ArmorType armorType;
}
@@ -1,18 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataBackpack : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 6f54ab1b3cd1a8f4d9ec1fb975e05ef6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,87 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备栏 - 数据
/// </summary>
public class DataEquipmentSlot : DataInventory {
/// <summary> 武器1 </summary>
public DataWeapon weapon1;
/// <summary> 武器2 </summary>
public DataWeapon weapon2;
/// <summary> 护甲 </summary>
public DataArmor armor;
/// <summary> 头盔 </summary>
public DataEquipment helmets;
/// <summary> 手套 </summary>
public DataEquipment gloves;
/// <summary> 鞋子 </summary>
public DataEquipment shoes;
public override bool Add(DataItem item) {
// 如果是武器,则尝试装备
if (item is DataWeapon weapon) { return Wear(weapon); }
// 如果是护甲,则尝试装备
if (item is DataArmor armor) { return Wear(armor); }
// 如果是其他,则尝试装备
if (item is DataEquipment equipment) { return Wear(equipment); }
return false;
}
public override bool Remove(DataItem item) {
throw new System.NotImplementedException();
}
/// <summary> 获取护甲等级 </summary>
public int GetArmorClass(int modifier) {
int addValue = GetAddValue();
// 无甲 基础AC = 10,调整值全额生效
if (armor == null) { return 10 + modifier + addValue; }
// 布甲 调整值全额生效
if (armor.armorType == ArmorType.ClothArmor) { }
// 轻甲 调整值全额生效
if (armor.armorType == ArmorType.LightArmor) { }
// 中甲 调整值上限=2
if (armor.armorType == ArmorType.MediumArmor) { modifier = Mathf.Min(modifier, 2); }
// 重甲 调整值无效‌
if (armor.armorType == ArmorType.HeavyArmor) { modifier = 0; }
// 基础AC + 调整值 + 附加值
return GetArmorClass(armor) + modifier + addValue;
}
/// <summary> 获取护甲等级 </summary>
public int GetArmorClass(DataEquipment equipment) {
return equipment.Addition().armorClass;
}
/// <summary> 获取护甲加值 </summary>
public int GetAddValue() {
int addValue = 0;
// 武器1 加值
if (weapon1 != null) { addValue += GetArmorClass(weapon1); }
// 武器2 加值
if (weapon2 != null) { addValue += GetArmorClass(weapon2); }
// 头盔 加值
if (helmets != null) { addValue += GetArmorClass(helmets); }
// 手套 加值
if (gloves != null) { addValue += GetArmorClass(gloves); }
// 鞋子 加值
if (shoes != null) { addValue += GetArmorClass(shoes); }
return addValue;
}
#region 穿
private bool Wear(DataWeapon weapon) {
weapon1 = weapon;
return true;
}
private bool Wear(DataArmor armor) {
this.armor = armor;
return true;
}
private bool Wear(DataEquipment equipment) {
if (equipment.equipmentType == EquipmentType.Helmets) { helmets = equipment; return true; }
if (equipment.equipmentType == EquipmentType.Gloves) { gloves = equipment; return true; }
if (equipment.equipmentType == EquipmentType.Shoes) { shoes = equipment; return true; }
return false;
}
#endregion
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 83edeb48630d62a44a8d7c7551e9f0fb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,18 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataStorage : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 943f05d3866fd8e4cb463a4f0597d0c5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-8
View File
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: da6831802283b3643bf03d784ccc5813
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,24 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 护甲类型。
/// </summary>
public enum ArmorType {
/// <summary> 布甲 </summary>
ClothArmor,
/// <summary> 轻甲 </summary>
LightArmor,
/// <summary> 中甲 </summary>
MediumArmor,
/// <summary> 重甲 </summary>
HeavyArmor,
}
/// <summary>
/// 护甲 - 数据
/// </summary>
public class DataArmor : DataEquipment {
/// <summary> 护甲类型 </summary>
public ArmorType armorType;
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 062eefbb65fcc2e44aa8f4fe25fe7ab8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,35 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备类型。
/// </summary>
public enum EquipmentType {
/// <summary> 武器 </summary>
Weapon,
/// <summary> 护甲 </summary>
Armor,
/// <summary> 头盔 </summary>
Helmets,
/// <summary> 手套 </summary>
Gloves,
/// <summary> 鞋子 </summary>
Shoes,
}
/// <summary>
/// 装备 - 数据
/// </summary>
public class DataEquipment : DataItem {
/// <summary> 装备类型 </summary>
public EquipmentType equipmentType;
/// <summary> 附加效果 </summary>
public List<DataAddition> additions;
/// <summary> 附加效果 </summary>
public DataAddition Addition() {
DataAddition addition = new DataAddition();
additions.ForEach(obj => addition.Add(obj));
return addition;
}
}
-23
View File
@@ -1,23 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 物品类型。
/// </summary>
public enum ItemType {
/// <summary> 材料 </summary>
Material,
/// <summary> 装备 </summary>
Equipment
}
/// <summary>
/// 物品 - 数据
/// </summary>
public class DataItem {
/// <summary> 物品名称 </summary>
public string name;
/// <summary> 物品类型 </summary>
public ItemType itemType;
}
@@ -1,13 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 材料 - 数据
/// </summary>
public class DataMaterial : DataItem {
/// <summary> 物品数量 </summary>
public int quantity;
/// <summary> 堆叠上限 </summary>
public int maxStack;
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: d8fb2ebbb537271478ec399677a1b08a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,24 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 武器类型。
/// </summary>
public enum WeaponType {
/// <summary> 轻型武器 </summary>
LightWeapon,
/// <summary> 中型武器 </summary>
MediumWeapon,
/// <summary> 重型武器 </summary>
HeavyWeapon,
/// <summary> 盾牌 </summary>
Shield,
}
/// <summary>
/// 武器 - 数据
/// </summary>
public class DataWeapon : DataEquipment {
/// <summary> 武器类型 </summary>
public WeaponType weaponType;
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 0be9cb0c2accc804eb824de0e8ca3fa5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -26,7 +26,7 @@ public class BattleCharacter : DataAttribute {
public BattleCharacter(DataCharacter character, int team) {
this.character = character;
Cover(character);
AttributeTool.Cover(this, character);
this.team = team;
name = character.name;
level = character.Level;
@@ -35,8 +35,12 @@ public class BattleCharacter : DataAttribute {
armorClass = character.ArmorClass;
}
/// <summary> 攻击目标 </summary>
public bool AttackTarget(BattleCharacter target) {
/// <summary> 是否允许行动 </summary>
public bool IsAction() {
return hitPoint.x > 0;
}
/// <summary> 是否敌对目标 </summary>
public bool IsHostility(BattleCharacter target) {
return team != target.team && target.hitPoint.x > 0;
}
}
@@ -6,6 +6,10 @@ using UnityEngine;
/// 行动阶段
/// </summary>
public class PhaseAction : BattlePhase {
/// <summary> 当前行动 </summary>
private BattleCharacter currentAction;
/// <summary> 当前目标 </summary>
private BattleCharacter currentTarget;
public PhaseAction(BattleSimulator simulator) : base(simulator) { }
@@ -13,14 +17,23 @@ public class PhaseAction : BattlePhase {
// throw new System.NotImplementedException();
}
public override void UpdatePhase() {
// 选择行动目标,没有行动目标则进入结算阶段
if (!BattleQueue.Dequeue(out BattleCharacter character)) { simulator.Transition(PhaseType.); return; }
// 判断是否可以行动
if (ActionPredicate(character)) { return; }
// 选择一个可以攻击的目标
BattleCharacter target = BattleQueue.FirstOrDefault(obj => character.AttackTarget(obj));
// 对目标进行攻击
// 选择行动的角色,如果没有则进入下一轮
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}");
}
@@ -28,9 +41,20 @@ public class PhaseAction : BattlePhase {
// throw new System.NotImplementedException();
}
/// <summary> 行动判断 </summary>
private bool ActionPredicate(BattleCharacter character) {
return character.hitPoint.x > 0;
/// <summary> 选择当前行动角色 </summary>
private bool SelectAction() {
// 选择行动的角色,如果没有则进入下一回合
if (!BattleQueue.Dequeue(out currentAction)) { simulator.Transition(PhaseType.); return false; }
// 判断是否可以行动
if (!currentAction.IsAction()) { return false; }
return true;
}
/// <summary> 选择当前目标角色 </summary>
private bool SelectTarget() {
// 选择一个可以攻击的目标
currentTarget = BattleQueue.FirstOrDefault(obj => currentAction.IsHostility(obj));
// 如果没有可以攻击的目标则结算战斗
if (currentTarget == null) { simulator.Transition(PhaseType.); }
return currentTarget != null;
}
}
@@ -10,12 +10,12 @@ public class PhaseAssault : BattlePhase {
public PhaseAssault(BattleSimulator simulator) : base(simulator) { }
public override void StartPhase() {
throw new System.NotImplementedException();
// throw new System.NotImplementedException();
}
public override void UpdatePhase() {
throw new System.NotImplementedException();
// throw new System.NotImplementedException();
}
public override void QuitPhase() {
throw new System.NotImplementedException();
// throw new System.NotImplementedException();
}
}
@@ -10,12 +10,16 @@ public class PhaseFinish : BattlePhase {
public PhaseFinish(BattleSimulator simulator) : base(simulator) { }
public override void StartPhase() {
throw new System.NotImplementedException();
// TODO:记录器
Debug.Log("结束战斗!");
}
public override void UpdatePhase() {
throw new System.NotImplementedException();
// TODO:需要添加结算判断
// simulator.Transition(PhaseType.回合阶段);
// TODO:记录器
}
public override void QuitPhase() {
throw new System.NotImplementedException();
// throw new System.NotImplementedException();
}
}
@@ -20,6 +20,9 @@ public class PhaseFormal : BattlePhase {
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();
@@ -18,7 +18,9 @@ public class PhaseInitiative : BattlePhase {
// TODO:需要添加突袭阶段
simulator.Transition(PhaseType.);
// TODO:记录器
Debug.Log("先攻");
string message = "先攻";
BattleQueue.ForEach(obj => message += $" {obj.name}({obj.sequence})");
Debug.Log(message);
}
public override void QuitPhase() {
// throw new System.NotImplementedException();
@@ -9,7 +9,6 @@ using UnityEngine;
/// 战斗 - 模拟器
/// </summary>
public class BattleSimulator {
/// <summary> 战斗队列 </summary>
public BattleQueue battleQueue = new BattleQueue();
@@ -19,6 +18,9 @@ public class BattleSimulator {
public Dictionary<PhaseType, IPhase> dictionary = new Dictionary<PhaseType, IPhase>();
public BattleSimulator(BattleTeam team1, BattleTeam team2) {
team1.Initial(1);
team2.Initial(2);
battleQueue.Add(team1.battles);
battleQueue.Add(team2.battles);
@@ -27,6 +29,8 @@ public class BattleSimulator {
dictionary.Add(PhaseType., new PhaseFormal(this));
dictionary.Add(PhaseType., new PhaseAction(this));
dictionary.Add(PhaseType., new PhaseFinish(this));
Transition(PhaseType.);
}
public void Update() {
currentPhase?.UpdatePhase();
@@ -40,7 +44,7 @@ public class BattleSimulator {
currentPhase?.QuitPhase();
currentPhase = newPhase;
currentPhase?.StartPhase();
Debug.Log($"战斗阶段已转换为: {phaseType}");
// Debug.Log($"战斗阶段已转换为: {phaseType}");
}
else {
// 不存在时输出警告信息
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e350f02da82dedd459ba3280f586d116
guid: 1f85c0d8dce903b4eb5fb0aca37d2040
folderAsset: yes
DefaultImporter:
externalObjects: {}
@@ -0,0 +1,48 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 属性 - 工具
/// </summary>
public static class AttributeTool {
#region
/// <summary> 随机初始属性 </summary>
public static DataAttribute Random() {
DataAttribute attribute = new DataAttribute();
attribute.Str = Dice.RollAttribute();
attribute.Dex = Dice.RollAttribute();
attribute.Con = Dice.RollAttribute();
attribute.Int = Dice.RollAttribute();
attribute.Wis = Dice.RollAttribute();
attribute.Cha = Dice.RollAttribute();
return attribute;
}
#endregion
#region
// 计算属性调整值(属性值-10)/2 向下取整
public static int Modifier(int value) {
return (int)System.Math.Floor((value - 10) / 2.0);
}
/// <summary> 添加属性 </summary>
public static void Add(this DataAttribute a, DataAttribute b) {
a.Str += b.Str; a.Dex += b.Dex;
a.Con += b.Con; a.Int += b.Int;
a.Wis += b.Wis; a.Cha += b.Cha;
}
/// <summary> 减少属性 </summary>
public static void Sub(this DataAttribute a, DataAttribute b) {
a.Str -= b.Str; a.Dex -= b.Dex;
a.Con -= b.Con; a.Int -= b.Int;
a.Wis -= b.Wis; a.Cha -= b.Cha;
}
/// <summary> 覆盖属性 </summary>
public static void Cover(this DataAttribute a, DataAttribute b) {
a.Str = b.Str; a.Dex = b.Dex;
a.Con = b.Con; a.Int = b.Int;
a.Wis = b.Wis; a.Cha = b.Cha;
}
#endregion
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 9fd9942ce333fa94aa2297f3569a4939
guid: f6a814b3a3b754241ae35753e6d7c7f8
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -0,0 +1,81 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 角色工具
/// </summary>
public static class CharacterTool {
#region
/// <summary> 设置职业 </summary>
public static void Settings(this DataCharacter character, DataRace race) {
character.race = race;
}
/// <summary> 设置职业 </summary>
public static void Settings(this DataCharacter character, DataProfession profession) {
character.profession = profession;
profession.character = character;
}
#endregion
#region
/// <summary> 战斗等级 </summary>
public static int GetLevel(this DataCharacter character) {
// TODO:需要补充多职业的等级总和
return character.profession.level;
}
/// <summary> 生命点 </summary>
public static int GetHitPoint(this DataCharacter character) {
// TODO:需要补充多职业的生命值加成
return character.profession.HitPoint();
}
/// <summary> 计算护甲等级(AC </summary>
public static int GetArmorClass(this DataCharacter character) {
// TODO:需要补充专长,技能,熟练之类的加值
int modifier = character.DexModifier;
return character.equipment.ArmorClass(modifier);
}
#endregion
#region
/// <summary> 创建默认角色 </summary>
public static DataCharacter Create(string name) {
DataCharacter character = new DataCharacter();
character.name = name;
character.race = RaceTool.None();
character.basis = AttributeTool.Random();
character.profession = ProfessionTool.None();
character.profession.Initial(character);
character.equipment = new DataEquipment();
return character;
}
/// <summary> 创建默认角色 </summary>
public static DataCharacter Create(string name, DataRace race, DataProfession profession) {
DataCharacter character = new DataCharacter();
character.name = name;
character.race = race;
character.basis = AttributeTool.Random();
character.profession = profession;
character.profession.Initial(character);
character.equipment = new DataEquipment();
return character;
}
#endregion
// 打印角色卡
public static void PrintCharacterSheet(this DataCharacter character) {
Debug.Log($"=== {character.name} LV{character.Level} ===");
Debug.Log($"种族: {character.race.name}");
Debug.Log($"职业: {character.profession.name}");
Debug.Log($"力量: {character.Str} ({character.StrModifier.ToString("+#;-#;+0")})");
Debug.Log($"敏捷: {character.Dex} ({character.DexModifier.ToString("+#;-#;+0")})");
Debug.Log($"体质: {character.Con} ({character.ConModifier.ToString("+#;-#;+0")})");
Debug.Log($"智力: {character.Int} ({character.IntModifier.ToString("+#;-#;+0")})");
Debug.Log($"感知: {character.Wis} ({character.WisModifier.ToString("+#;-#;+0")})");
Debug.Log($"魅力: {character.Cha} ({character.ChaModifier.ToString("+#;-#;+0")})");
Debug.Log($"经验值: {character.expPoint}");
Debug.Log($"生命值: {character.HitPoint}");
Debug.Log($"护甲等级: {character.ArmorClass})");
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: fb070bc540efae048ae79c8319c0c0e2
guid: a6bdd4c70e0068d4dbe460c7a6961901
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -4,46 +4,42 @@ using System.Linq;
using UnityEngine;
/// <summary>
/// 职业 - 数据
/// 种族 - 工具
/// </summary>
public class DataProfession {
/// <summary> 职业名称 </summary>
public readonly string name;
/// <summary> 生命骰子 </summary>
public readonly int hitDice = 0;
/// <summary> 角色 </summary>
public DataCharacter character;
/// <summary> 职业等级 </summary>
public int level = 0;
/// <summary> 累计生命点 </summary>
public List<int> hitPoints = new List<int>();
public static class ProfessionTool {
public DataProfession(string name, int hitDice) {
this.name = name;
this.hitDice = hitDice;
}
#region
/// <summary> 初始:满生命骰子 + 体质调整值 </summary>
public void Initial(DataCharacter character) {
this.character = character;
level = 1;
// 初始生命 =
hitPoints = new List<int>();
hitPoints.Add(hitDice + character.ConModifier);
public static void Initial(this DataProfession profession, DataCharacter character) {
profession.character = character;
int hitPoint = profession.hitDice + character.ConModifier;
profession.level = 1;
profession.hitPoints = new List<int> { hitPoint };
}
/// <summary> 升级:骰生命骰子 + 体质调整值 </summary>
public void Upgrade() {
level++;
int hitPoint = Dice.Roll(hitDice) + character.ConModifier;
hitPoints.Add(hitPoint);
public static void Upgrade(this DataProfession profession) {
profession.level++;
int hitPoint = Dice.Roll(profession.hitDice);
int modifier = profession.character.ConModifier;
profession.hitPoints.Add(hitPoint + modifier);
}
/// <summary> 生命点:每级生命点总和 </summary>
public int HitPoint() {
return hitPoints.Sum();
public static int HitPoint(this DataProfession profession) {
return profession.hitPoints.Sum();
}
#endregion
#region
/// <summary> 创建 </summary>
public static DataProfession Create(string name, int hitDice) {
DataProfession profession = new DataProfession { name = name, hitDice = hitDice };
profession.name = name;
profession.hitDice = hitDice;
return profession;
}
/// <summary> 无职业 1d4 </summary>
public static DataProfession None() {
return new DataProfession("无", 4);
return Create("无", 4);
}
/// <summary> 随机职业 </summary>
public static DataProfession Random() {
@@ -57,22 +53,23 @@ public class DataProfession {
}
/// <summary> 战士 1d10 </summary>
public static DataProfession Warrior() {
return new DataProfession("战士", 10);
return Create("战士", 10);
}
/// <summary> 法师 1d6 </summary>
public static DataProfession Wizard() {
return new DataProfession("法师", 6);
return Create("法师", 6);
}
/// <summary> 牧师 1d8 </summary>
public static DataProfession Cleric() {
return new DataProfession("牧师", 8);
return Create("牧师", 8);
}
/// <summary> 游侠 1d8 </summary>
public static DataProfession Ranger() {
return new DataProfession("游侠", 8);
return Create("游侠", 8);
}
/// <summary> 歌者 1d6 </summary>
public static DataProfession Chanter() {
return new DataProfession("歌者", 6);
return Create("歌者", 6);
}
#endregion
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 451b46f5359088a46bc1efc7fcf7ff7b
guid: bd48318dcbe216449a81d70622f8ba35
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -0,0 +1,47 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 种族 - 工具
/// </summary>
public static class RaceTool {
#region
// 混血人类,木精灵,丘陵矮人(Hill Dwarf),龙裔,半精灵
/// <summary> 无种族 </summary>
public static DataRace None() {
return new DataRace { name = "未知" };
}
/// <summary> 随机职业 </summary>
public static DataRace Random() {
int index = Dice.Roll(5);
if (index == 1) { return Human(); }
if (index == 2) { return Elven(); }
if (index == 3) { return Dwarf(); }
if (index == 4) { return Orc(); }
if (index == 5) { return Halfling(); }
return None();
}
/// <summary> 人类(Human) 全属性+1 </summary>
public static DataRace Human() {
return new DataRace { name = "人类", Str = 1, Dex = 1, Con = 1, Int = 1, Wis = 1, Cha = 1 };
}
/// <summary> 精灵(Elven) 敏捷+2 智力+2 感知+1 </summary>
public static DataRace Elven() {
return new DataRace { name = "精灵", Dex = 2, Int = 2, Wis = 1 };
}
/// <summary> 矮人(Dwarf) 力量+2 体质+2 感知+1 </summary>
public static DataRace Dwarf() {
return new DataRace { name = "矮人", Str = 2, Con = 2, Wis = 1 };
}
/// <summary> 半兽人(Orc) 力量+3 体质+2 </summary>
public static DataRace Orc() {
return new DataRace { name = "半兽人", Str = 3, Con = 2 };
}
/// <summary> 半身人(Halfling) 敏捷+2 魅力+2 体质+1 </summary>
public static DataRace Halfling() {
return new DataRace { name = "半身人", Dex = 2, Cha = 2, Con = 1 };
}
#endregion
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e444293bdefc67346a3d80901305e4c7
guid: 9694db834fdbe8744882901e02003034
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 31e213ee804e43848b56cd336a8025d4
guid: c29e0b5bff9f654439aa3e867ac20484
folderAsset: yes
DefaultImporter:
externalObjects: {}
@@ -0,0 +1,42 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备 - 字典
/// </summary>
public static class ArmorDictionary {
/// <summary> 武器 </summary>
public static DataArmor Armor(string name, ArmorType armorType) {
DataArmor armor = new DataArmor();
armor.name = name;
armor.itemType = ItemType.;
armor.wearType = WearType.;
armor.armorType = armorType;
return armor;
}
/// <summary> 法师袍 ac10 </summary>
public static DataArmor Armor101() {
DataArmor armor = Armor("法师袍", ArmorType.);
armor.additions.Add(new DataAddition { armorClass = 10 });
return armor;
}
/// <summary> 皮甲 ac11 </summary>
public static DataArmor Armor201() {
DataArmor armor = Armor("皮甲", ArmorType.);
armor.additions.Add(new DataAddition { armorClass = 11 });
return armor;
}
/// <summary> 链甲 ac15 </summary>
public static DataArmor Armor301() {
DataArmor armor = Armor("链甲", ArmorType.);
armor.additions.Add(new DataAddition { armorClass = 15 });
return armor;
}
/// <summary> 板甲 ac18 </summary>
public static DataArmor Armor401() {
DataArmor armor = Armor("板甲", ArmorType.);
armor.additions.Add(new DataAddition { armorClass = 18 });
return armor;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f13627182bd77434991f32751b8c15f7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,106 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备栏 - 工具
/// </summary>
public static class EquipmentTool {
#region
/// <summary> 添加属性 </summary>
public static void Add(this DataAddition a, DataAddition b) {
a.armorClass += b.armorClass;
a.damageDices.AddRange(b.damageDices);
}
/// <summary> 合并属性 </summary>
public static DataAddition Merge(List<DataAddition> additions) {
DataAddition addition = new DataAddition();
additions.ForEach(obj => addition.Add(obj));
return addition;
}
/// <summary> 更新附加值 </summary>
public static void UpdateAddition(this DataEquipment equipment) {
DataAddition addition = new DataAddition();
if (equipment.weapon1 != null) { addition.Add(equipment.weapon1.Addition); }
if (equipment.weapon2 != null) { addition.Add(equipment.weapon2.Addition); }
if (equipment.armor != null) { addition.Add(equipment.armor.Addition); }
if (equipment.helmets != null) { addition.Add(equipment.helmets.Addition); }
if (equipment.gloves != null) { addition.Add(equipment.gloves.Addition); }
if (equipment.shoes != null) { addition.Add(equipment.shoes.Addition); }
equipment.addition = addition;
}
/// <summary> 获取护甲等级 </summary>
public static int ArmorClass(this DataEquipment equipment, int modifier) {
int addValue = equipment.addition.armorClass;
// 无甲 基础AC = 10 + 调整值 + 附加值
if (equipment.armor == null) { return 10 + modifier + addValue; }
// 布甲/轻甲 调整值全额生效
if (equipment.armor.armorType == ArmorType.) { }
// 调整值全额生效
if (equipment.armor.armorType == ArmorType.) { }
// 中甲 调整值上限=2
if (equipment.armor.armorType == ArmorType.) { modifier = Mathf.Min(modifier, 2); }
// 重甲 调整值无效‌
if (equipment.armor.armorType == ArmorType.) { modifier = 0; }
// 调整值 + 附加值
return modifier + addValue;
}
#endregion
#region 穿
/// <summary> 穿戴装备 </summary>
public static bool Wear(this DataEquipment equipment, DataWear wear, out DataWear old) {
old = wear; bool isWear = false;
if (wear.wearType == WearType.) { isWear = WearWeapon(equipment, wear, out old); }
if (wear.wearType == WearType.) { isWear = WearArmor(equipment, wear, out old); }
if (wear.wearType == WearType.) { isWear = WearHelmets(equipment, wear, out old); }
if (wear.wearType == WearType.) { isWear = WearGloves(equipment, wear, out old); }
if (wear.wearType == WearType.) { isWear = WearShoes(equipment, wear, out old); }
equipment.UpdateAddition();
return isWear;
}
/// <summary> 穿戴武器 </summary>
public static bool WearWeapon(this DataEquipment equipment, DataWear wear, out DataWear old) {
old = null;
// 校验是否为武器类型
if (!(wear is DataWeapon newWeapon)) { return false; }
// 情况1:主手为空,直接装备主手
if (equipment.weapon1 == null) { equipment.weapon1 = newWeapon; return true; }
// 情况2:副手为空,直接装备副手
if (equipment.weapon2 == null) { equipment.weapon2 = newWeapon; return true; }
// 情况3:主手副手都不为空,默认替换主手
old = equipment.weapon1;
equipment.weapon1 = newWeapon;
equipment.UpdateAddition();
return true;
}
/// <summary> 穿戴护甲 </summary>
public static bool WearArmor(this DataEquipment equipment, DataWear wear, out DataWear old) {
old = null;
// 校验是否为护甲类型
if (!(wear is DataArmor newArmor)) { return false; }
old = equipment.armor;
equipment.armor = newArmor;
return true;
}
/// <summary> 穿戴头盔 </summary>
public static bool WearHelmets(this DataEquipment equipment, DataWear wear, out DataWear old) {
old = equipment.helmets;
equipment.helmets = wear;
return true;
}
/// <summary> 穿戴手套 </summary>
public static bool WearGloves(this DataEquipment equipment, DataWear wear, out DataWear old) {
old = equipment.gloves;
equipment.gloves = wear;
return true;
}
/// <summary> 穿戴鞋子 </summary>
public static bool WearShoes(this DataEquipment equipment, DataWear wear, out DataWear old) {
old = equipment.shoes;
equipment.shoes = wear;
return true;
}
#endregion
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1fd627b70f23dd44493bf8fb1e577370
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,49 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 武器 - 字典
/// </summary>
public static class WeaponDictionary {
/// <summary> 武器 </summary>
public static DataWeapon Weapon(string name, WeaponType weaponType) {
DataWeapon weapon = new DataWeapon();
weapon.name = name;
weapon.itemType = ItemType.;
weapon.wearType = WearType.;
weapon.weaponType = weaponType;
return weapon;
}
/// <summary> 伤害骰子 </summary>
public static DataAddition DamageDice(int value, DamageType type) {
DataDamageDice dice = new DataDamageDice(value, type);
DataAddition addition = new DataAddition();
addition.damageDices.Add(dice);
return addition;
}
/// <summary> 匕首 1d4 </summary>
public static DataWeapon Weapon101() {
DataWeapon weapon = Weapon("匕首", WeaponType.);
weapon.additions.Add(DamageDice(4, DamageType.穿));
return weapon;
}
/// <summary> 木棒 1d6 </summary>
public static DataWeapon Weapon201() {
DataWeapon weapon = Weapon("木棒", WeaponType.);
weapon.additions.Add(DamageDice(6, DamageType.));
return weapon;
}
/// <summary> 巨棒 1d8 </summary>
public static DataWeapon Weapon301() {
DataWeapon weapon = Weapon("巨棒", WeaponType.);
weapon.additions.Add(DamageDice(8, DamageType.));
return weapon;
}
/// <summary> 木盾 ac1 </summary>
public static DataWeapon Weapon401() {
DataWeapon weapon = Weapon("木盾", WeaponType.);
weapon.additions.Add(new DataAddition { armorClass = 1 });
return weapon;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 32522aef438403f4d9ed01fe6650243b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -33,6 +33,6 @@ public class ManagerSimulator : ModuleSingle<ManagerSimulator> {
}
private DataCharacter RandomCharacter(string name) {
return DataCharacter.Create(name, DataRace.Random(), DataProfession.Random());
return CharacterTool.Create(name, RaceTool.Random(), ProfessionTool.Random());
}
}
+14
View File
@@ -12,6 +12,20 @@ public static class Dice {
public static int Roll(int value) {
return Random.Range(1, value + 1);
}
/// <summary> d6 + 调整值 + 加值 </summary>
public static int Roll6(int modifier = 0, int addValue = 0, DiceGrade grade = DiceGrade.) {
int d1 = Roll(6); int d2 = Roll(6);
if (grade == DiceGrade.) { d1 = d1 >= d2 ? d1 : d2; }
if (grade == DiceGrade.) { d1 = d1 <= d2 ? d1 : d2; }
return d1 + modifier + addValue;
}
/// <summary> d8 + 调整值 + 加值 </summary>
public static int Roll8(int modifier = 0, int addValue = 0, DiceGrade grade = DiceGrade.) {
int d1 = Roll(8); int d2 = Roll(8);
if (grade == DiceGrade.) { d1 = d1 >= d2 ? d1 : d2; }
if (grade == DiceGrade.) { d1 = d1 <= d2 ? d1 : d2; }
return d1 + modifier + addValue;
}
/// <summary> d20 + 调整值 + 加值 </summary>
public static int Roll20(int modifier = 0, int addValue = 0, DiceGrade grade = DiceGrade.) {
int d1 = Roll(20); int d2 = Roll(20);
@@ -122,50 +122,6 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &169597751
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 169597752}
- component: {fileID: 169597753}
m_Layer: 0
m_Name: ManagerSimulator
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &169597752
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 169597751}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1439912283}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &169597753
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 169597751}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3ce4cafcd40fff3428928289fa060de4, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &670296962
GameObject:
m_ObjectHideFlags: 0
@@ -437,7 +393,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1439912283}
- component: {fileID: 1439912284}
- component: {fileID: 1439912285}
m_Layer: 0
m_Name: "----\u5168\u5C40\u7BA1\u7406----"
m_TagString: Untagged
@@ -461,10 +417,9 @@ Transform:
- {fileID: 963194228}
- {fileID: 705507995}
- {fileID: 1586181182}
- {fileID: 169597752}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1439912284
--- !u!114 &1439912285
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -473,7 +428,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1439912282}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 50f6b4ec374a86846b626668e0b5627e, type: 3}
m_Script: {fileID: 11500000, guid: 3ce4cafcd40fff3428928289fa060de4, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1586181179