This commit is contained in:
MuHua-123
2025-07-19 17:50:04 +08:00
parent d4574f4bd7
commit 2b349081e2
24 changed files with 1247 additions and 204 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e350f02da82dedd459ba3280f586d116
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,16 @@
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;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 451b46f5359088a46bc1efc7fcf7ff7b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -22,7 +22,7 @@ public class DataCharacter : DataAttribute {
/// <summary> 种族 </summary>
public DataRace race = DataRace.None();
/// <summary> 职业 </summary>
public DataProfession profession = DataProfession.None();
public DataProfession profession;
/// <summary> 装备栏 </summary>
public DataEquipmentSlot equipmentSlot = new DataEquipmentSlot();
@@ -39,35 +39,35 @@ public class DataCharacter : DataAttribute {
/// <summary> 魅力调整值(charisma) </summary>
public int ChaModifier => Modifier(Cha);
public DataCharacter() {
profession = DataProfession.None(this);
}
/// <summary> 更新角色状态 </summary>
public void Update() {
// 更新属性
Cover(basic);
// 添加种族属性
Add(race);
// 添加职业属性
Add(profession);
UpdateAttribute();
// 战斗等级
level = profession.level;
// 护甲等级
armorClass = 10 + DexModifier;
armorClass = GetArmorClass();
// 升级经验 = 100 * 3^level
expPoint.y = 100 * (int)Mathf.Pow(3, level);
// 最大生命值
hitPoint.y = race.HitPoint() + profession.HitPoint();
hitPoint.y = profession.HitPoint();
}
/// <summary> 更新角色属性 </summary>
public void UpdateAttribute() {
// 更新属性
Cover(basic);
// 添加种族属性
if (race != null) { Add(race); }
// 添加职业属性
if (profession != null) { Add(profession); }
}
/// <summary> 计算护甲等级(AC </summary>
public int GetArmorClass() {
// TODO:需要补充专长,技能,熟练之类的加值
return equipmentSlot.GetArmorClass(DexModifier);
}
// 计算护甲等级(AC
// 无甲基础AC = 10
// 护甲
// 重甲 敏捷加值无效‌
// 中甲 敏捷加值上限‌+2
// 轻甲 敏捷加值全额生效
// 盾牌 直接增加
// 法术 直接增加
// 打印角色卡
public void PrintCharacterSheet() {
@@ -7,15 +7,28 @@ using UnityEngine;
/// 职业 - 数据
/// </summary>
public class DataProfession : DataAttribute {
/// <summary> 绑定角色 </summary>
public readonly DataCharacter character;
/// <summary> 职业名称 </summary>
public string name;
public readonly string name;
/// <summary> 生命骰子 </summary>
public readonly int hitDice = 0;
/// <summary> 职业等级 </summary>
public int level = 0;
/// <summary> 生命骰子 </summary>
public int hitDice = 0;
/// <summary> 累计生命点 </summary>
public List<int> hitPoints = new List<int>();
public DataProfession(DataCharacter character, string name, int hitDice) {
this.character = character;
this.name = name;
this.hitDice = hitDice;
character.UpdateAttribute();
level = 1;
hitPoints = new List<int>();
// 初始生命 = 满生命骰子 + 体质调整值
hitPoints.Add(hitDice + character.ConModifier);
}
/// <summary> 升级:骰生命骰子+体质调整值 </summary>
public void Upgrade(int modifier) {
level++;
@@ -27,47 +40,38 @@ public class DataProfession : DataAttribute {
return hitPoints.Sum();
}
/// <summary> 无职业 </summary>
public static DataProfession None() {
return new DataProfession() { name = "无" };
/// <summary> 无职业 1d4 </summary>
public static DataProfession None(DataCharacter character) {
return new DataProfession(character, "无", 4);
}
/// <summary> 战士职业 </summary>
public static DataProfession Warrior(int modifier) {
DataProfession profession = new DataProfession();
// 战士,初始1级,1d10生命骰子,初始生命=满生命骰子+体质调整值
profession.name = "战士";
profession.level = 1;
profession.hitDice = 10;
profession.hitPoints.Add(profession.hitDice + modifier);
// 职业属性加成
profession.Str = 2;
profession.Con = 1;
return profession;
/// <summary> 随机职业 </summary>
public static DataProfession Random(DataCharacter character) {
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);
}
/// <summary> 法师职业 </summary>
public static DataProfession Wizard(int modifier) {
DataProfession profession = new DataProfession();
// 法师,初始1级,1d6生命骰子,初始生命=满生命骰子+体质调整值
profession.name = "法师";
profession.level = 1;
profession.hitDice = 6;
profession.hitPoints.Add(profession.hitDice + modifier);
// 职业属性加成
profession.Int = 2;
profession.Dex = 1;
return profession;
/// <summary> 战士 1d10 </summary>
public static DataProfession Warrior(DataCharacter character) {
return new DataProfession(character, "战士", 10);
}
/// <summary> 牧师职业 </summary>
public static DataProfession Cleric(int modifier) {
DataProfession profession = new DataProfession();
// 牧师,初始1级,1d8生命骰子,初始生命=满生命骰子+体质调整值
profession.name = "牧师";
profession.level = 1;
profession.hitDice = 8;
profession.hitPoints.Add(profession.hitDice + modifier);
// 职业属性加成
profession.Wis = 2;
profession.Con = 1;
return profession;
/// <summary> 法师 1d6 </summary>
public static DataProfession Wizard(DataCharacter character) {
return new DataProfession(character, "法师", 6);
}
/// <summary> 牧师 1d8 </summary>
public static DataProfession Cleric(DataCharacter character) {
return new DataProfession(character, "牧师", 8);
}
/// <summary> 游侠 1d8 </summary>
public static DataProfession Ranger(DataCharacter character) {
return new DataProfession(character, "游侠", 8);
}
/// <summary> 歌者 1d6 </summary>
public static DataProfession Chanter(DataCharacter character) {
return new DataProfession(character, "歌者", 6);
}
}
+51 -8
View File
@@ -7,18 +7,61 @@ using UnityEngine;
/// </summary>
public class DataRace : DataAttribute {
/// <summary> 种族名称 </summary>
public string name;
/// <summary> 基础生命点 </summary>
public int hitPoint = 10;
public readonly string name;
/// <summary> 生命点:每级生命点总和 </summary>
public int HitPoint() {
return hitPoint;
public DataRace(string name) {
this.name = name;
}
// 混血人类,木精灵,丘陵矮人(Hill Dwarf),龙裔,半精灵
/// <summary> 无种族 </summary>
public static DataRace None() {
// 初始生命值10点
return new DataRace() { name = "无" };
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;
}
}
@@ -7,17 +7,17 @@ using UnityEngine;
/// </summary>
public class DataEquipmentSlot : DataInventory {
/// <summary> 武器1 </summary>
public DataWeapon Weapon1;
public DataWeapon weapon1;
/// <summary> 武器2 </summary>
public DataWeapon Weapon2;
public DataWeapon weapon2;
/// <summary> 护甲 </summary>
public DataArmor Armor;
public DataArmor armor;
/// <summary> 头盔 </summary>
public DataEquipment Helmets;
public DataEquipment helmets;
/// <summary> 手套 </summary>
public DataEquipment Gloves;
public DataEquipment gloves;
/// <summary> 鞋子 </summary>
public DataEquipment Shoes;
public DataEquipment shoes;
public override bool Add(DataItem item) {
// 如果是武器,则尝试装备
@@ -32,18 +32,56 @@ public class DataEquipmentSlot : DataInventory {
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;
weapon1 = weapon;
return true;
}
private bool Wear(DataArmor armor) {
Armor = 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; }
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
}
@@ -0,0 +1,24 @@
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;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 062eefbb65fcc2e44aa8f4fe25fe7ab8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+24 -14
View File
@@ -2,24 +2,34 @@ 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;
}
}
/// <summary>
/// 武器 - 数据
/// </summary>
public class DataWeapon : DataEquipment {
/// <summary> 武器类型 </summary>
public WeaponType weaponType;
}
/// <summary>
/// 护甲 - 数据
/// </summary>
public class DataArmor : DataEquipment {
/// <summary> 护甲类型 </summary>
public ArmorType armorType;
}
+10 -35
View File
@@ -2,6 +2,15 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 物品类型。
/// </summary>
public enum ItemType {
/// <summary> 材料 </summary>
Material,
/// <summary> 装备 </summary>
Equipment
}
/// <summary>
/// 物品 - 数据
/// </summary>
@@ -11,38 +20,4 @@ public class DataItem {
/// <summary> 物品类型 </summary>
public ItemType itemType;
}
/// <summary>
/// 物品类型。
/// </summary>
public enum ItemType {
Material, // 材料
Equipment // 装备
}
/// <summary>
/// 装备类型。
/// </summary>
public enum EquipmentType {
Weapon, // 武器
Armor, // 护甲
Helmets, //头盔
Gloves, // 手套
Shoes, // 鞋子
}
/// <summary>
/// 武器类型。
/// </summary>
public enum WeaponType {
LightWeapon, // 轻型武器
MediumWeapon, // 中型武器
HeavyWeapon, //重型武器
Shield, // 盾牌
}
/// <summary>
/// 护甲类型。
/// </summary>
public enum ArmorType {
ClothArmor, // 布甲
LightArmor, // 轻甲
MediumArmor, // 中甲
HeavyArmor, // 重甲
}
@@ -0,0 +1,24 @@
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;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0be9cb0c2accc804eb824de0e8ca3fa5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: