using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 角色 - 数据
///
public class DataCharacter : DataAttribute {
/// 角色名字
public string name;
/// 战斗等级
public int level = 0;
/// 护甲等级
public int armorClass = 0;
/// 经验点
public Vector2Int expPoint;
/// 生命点
public Vector2Int hitPoint;
/// 基础属性
public DataAttribute basic = Initial();
/// 种族
public DataRace race = DataRace.None();
/// 职业
public DataProfession profession = DataProfession.None();
/// 装备栏
public DataEquipmentSlot equipmentSlot = new DataEquipmentSlot();
/// 力量调整值(strength)
public int StrModifier => Modifier(Str);
/// 敏捷调整值(dexterity)
public int DexModifier => Modifier(Dex);
/// 体质调整值(constitution)
public int ConModifier => Modifier(Con);
/// 智力调整值(intelligence)
public int IntModifier => Modifier(Int);
/// 感知调整值(wisdom)
public int WisModifier => Modifier(Wis);
/// 魅力调整值(charisma)
public int ChaModifier => Modifier(Cha);
/// 更新角色状态
public void Update() {
// 更新属性
Cover(basic);
// 添加种族属性
Add(race);
// 添加职业属性
Add(profession);
// 战斗等级
level = profession.level;
// 护甲等级
armorClass = 10 + DexModifier;
// 升级经验 = 100 * 3^level
expPoint.y = 100 * (int)Mathf.Pow(3, level);
// 最大生命值
hitPoint.y = race.HitPoint() + profession.HitPoint();
}
// 计算护甲等级(AC)
// 无甲基础AC = 10
// 护甲
// 重甲 敏捷加值无效
// 中甲 敏捷加值上限+2
// 轻甲 敏捷加值全额生效
// 盾牌 直接增加
// 法术 直接增加
// 打印角色卡
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})");
}
}