This commit is contained in:
MuHua-123
2025-07-21 18:14:40 +08:00
parent 2b349081e2
commit a7eb4f7bbb
12 changed files with 338 additions and 109 deletions
@@ -7,17 +7,30 @@ using UnityEngine;
/// </summary>
public class DataAttribute {
/// <summary> 力量(strength) </summary>
public int Str;
public virtual int Str { get; set; }
/// <summary> 敏捷(dexterity) </summary>
public int Dex;
public virtual int Dex { get; set; }
/// <summary> 体质(constitution) </summary>
public int Con;
public virtual int Con { get; set; }
/// <summary> 智力(intelligence) </summary>
public int Int;
public virtual int Int { get; set; }
/// <summary> 感知(wisdom) </summary>
public int Wis;
public virtual int Wis { get; set; }
/// <summary> 魅力(charisma) </summary>
public int Cha;
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() {
@@ -8,60 +8,49 @@ using UnityEngine;
public class DataCharacter : DataAttribute {
/// <summary> 角色名字 </summary>
public string name;
/// <summary> 战斗等级 </summary>
public int level = 0;
/// <summary> 护甲等级 </summary>
public int armorClass = 0;
/// <summary> 经验点 </summary>
public Vector2Int expPoint;
/// <summary> 生命点 </summary>
public Vector2Int hitPoint;
/// <summary> 基础属性 </summary>
public DataAttribute basic = Initial();
public int expPoint;
/// <summary> 种族 </summary>
public DataRace race = DataRace.None();
public DataRace race;
/// <summary> 属性 </summary>
public DataAttribute basis;
/// <summary> 职业 </summary>
public DataProfession profession;
/// <summary> 装备栏 </summary>
public DataEquipmentSlot equipmentSlot = new DataEquipmentSlot();
public DataEquipmentSlot equipmentSlot;
/// <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 int Level => GetLevel();
/// <summary> 生命点 </summary>
public int HitPoint => GetHitPoint();
/// <summary> 护甲等级 </summary>
public int ArmorClass => GetArmorClass();
public DataCharacter() {
profession = DataProfession.None(this);
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 Update() {
UpdateAttribute();
// 战斗等级
level = profession.level;
// 护甲等级
armorClass = GetArmorClass();
// 升级经验 = 100 * 3^level
expPoint.y = 100 * (int)Mathf.Pow(3, level);
// 最大生命值
hitPoint.y = profession.HitPoint();
/// <summary> 设置职业 </summary>
public void Settings(DataProfession profession) {
this.profession = profession;
profession.character = this;
}
/// <summary> 更新角色属性 </summary>
public void UpdateAttribute() {
// 更新属性
Cover(basic);
// 添加种族属性
if (race != null) { Add(race); }
// 添加职业属性
if (profession != null) { Add(profession); }
/// <summary> 战斗等级 </summary>
public int GetLevel() {
// TODO:需要补充多职业的等级总和
return profession.level;
}
/// <summary> 生命点 </summary>
public int GetHitPoint() {
// TODO:需要补充多职业的生命值加成
return profession.HitPoint();
}
/// <summary> 计算护甲等级(AC </summary>
public int GetArmorClass() {
@@ -69,9 +58,32 @@ public class DataCharacter : DataAttribute {
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($"=== {name} LV{Level} ===");
Debug.Log($"种族: {race.name}");
Debug.Log($"职业: {profession.name}");
Debug.Log($"力量: {Str} ({StrModifier.ToString("+#;-#;+0")})");
@@ -81,7 +93,7 @@ public class DataCharacter : DataAttribute {
Debug.Log($"感知: {Wis} ({WisModifier.ToString("+#;-#;+0")})");
Debug.Log($"魅力: {Cha} ({ChaModifier.ToString("+#;-#;+0")})");
Debug.Log($"经验值: {expPoint}");
Debug.Log($"生命值: {hitPoint}");
Debug.Log($"护甲等级: {armorClass})");
Debug.Log($"生命值: {HitPoint}");
Debug.Log($"护甲等级: {ArmorClass})");
}
}
@@ -6,33 +6,34 @@ using UnityEngine;
/// <summary>
/// 职业 - 数据
/// </summary>
public class DataProfession : DataAttribute {
/// <summary> 绑定角色 </summary>
public readonly DataCharacter character;
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 DataProfession(DataCharacter character, string name, int hitDice) {
this.character = character;
public DataProfession(string name, int hitDice) {
this.name = name;
this.hitDice = hitDice;
character.UpdateAttribute();
}
/// <summary> 初始:满生命骰子 + 体质调整值 </summary>
public void Initial(DataCharacter character) {
this.character = character;
level = 1;
// 初始生命 =
hitPoints = new List<int>();
// 初始生命 = 满生命骰子 + 体质调整值
hitPoints.Add(hitDice + character.ConModifier);
}
/// <summary> 升级:骰生命骰子+体质调整值 </summary>
public void Upgrade(int modifier) {
/// <summary> 升级:骰生命骰子 + 体质调整值 </summary>
public void Upgrade() {
level++;
int hitPoint = Dice.Roll(hitDice) + modifier;
int hitPoint = Dice.Roll(hitDice) + character.ConModifier;
hitPoints.Add(hitPoint);
}
/// <summary> 生命点:每级生命点总和 </summary>
@@ -41,37 +42,37 @@ public class DataProfession : DataAttribute {
}
/// <summary> 无职业 1d4 </summary>
public static DataProfession None(DataCharacter character) {
return new DataProfession(character, "无", 4);
public static DataProfession None() {
return new DataProfession("无", 4);
}
/// <summary> 随机职业 </summary>
public static DataProfession Random(DataCharacter character) {
public static DataProfession Random() {
int index = Dice.Roll(5);
if (index == 1) { return Warrior(character); }
if (index == 2) { return Wizard(character); }
if (index == 3) { return Cleric(character); }
if (index == 4) { return Ranger(character); }
if (index == 5) { return Chanter(character); }
return None(character);
if (index == 1) { return Warrior(); }
if (index == 2) { return Wizard(); }
if (index == 3) { return Cleric(); }
if (index == 4) { return Ranger(); }
if (index == 5) { return Chanter(); }
return None();
}
/// <summary> 战士 1d10 </summary>
public static DataProfession Warrior(DataCharacter character) {
return new DataProfession(character, "战士", 10);
public static DataProfession Warrior() {
return new DataProfession("战士", 10);
}
/// <summary> 法师 1d6 </summary>
public static DataProfession Wizard(DataCharacter character) {
return new DataProfession(character, "法师", 6);
public static DataProfession Wizard() {
return new DataProfession("法师", 6);
}
/// <summary> 牧师 1d8 </summary>
public static DataProfession Cleric(DataCharacter character) {
return new DataProfession(character, "牧师", 8);
public static DataProfession Cleric() {
return new DataProfession("牧师", 8);
}
/// <summary> 游侠 1d8 </summary>
public static DataProfession Ranger(DataCharacter character) {
return new DataProfession(character, "游侠", 8);
public static DataProfession Ranger() {
return new DataProfession("游侠", 8);
}
/// <summary> 歌者 1d6 </summary>
public static DataProfession Chanter(DataCharacter character) {
return new DataProfession(character, "歌者", 6);
public static DataProfession Chanter() {
return new DataProfession("歌者", 6);
}
}