迁移数据表到 Luban,移除 JsonNet、EnumUtility

This commit is contained in:
2026-09-13 14:08:14 +08:00
parent 4003b3aaba
commit de53890de6
607 changed files with 18515 additions and 3257 deletions
@@ -1,33 +1,40 @@
using SepCore.DataTable;
using System.Collections.Generic;
namespace SepCore.Definition
{
public class PropItem
{
private readonly StatModifier[] _modifiers;
private readonly List<modifier> _modifiers = new();
public string Title { get; private set; }
public string IconAssetName { get; private set; }
public ItemRarity Rarity { get; private set; }
public StatModifier[] Modifiers => _modifiers;
public Rarity Rarity { get; private set; }
public IReadOnlyList<modifier> Modifiers => _modifiers;
public PropItem(DRProp prop)
public PropItem(PropConfig prop)
{
if (prop == null) return;
_modifiers = prop.Modifiers;
if (prop.Modifiers != null)
{
_modifiers.AddRange(prop.Modifiers);
}
Title = prop.Title;
Rarity = prop.Rarity;
IconAssetName = prop.IconAssetName;
}
public PropItem(StatModifier[] modifiers)
public PropItem(IEnumerable<modifier> modifiers)
{
_modifiers = modifiers;
if (modifiers != null)
{
_modifiers.AddRange(modifiers);
}
}
public PropItem(StatModifier[] modifiers, ItemRarity rarity, string title, string iconAssetName)
public PropItem(IEnumerable<modifier> modifiers, Rarity rarity, string title, string iconAssetName)
{
_modifiers = modifiers;
if (modifiers != null)
{
_modifiers.AddRange(modifiers);
}
Title = title;
Rarity = rarity;
IconAssetName = iconAssetName;
@@ -1,42 +0,0 @@
using System;
using SepCore.Definition;
using SepCore.CustomUtility;
using UnityGameFramework.Runtime;
namespace SepCore.Definition
{
public class StatModifier
{
public StatType StatType;
public float Value;
public bool IsPercent;
public static StatModifier StringToModifier(string input)
{
if (string.IsNullOrEmpty(input))
{
Log.Warning("Invalid modifier: {0}", input);
return null;
}
if (!input.StartsWith('[') || !input.EndsWith(']'))
{
throw new ArgumentException("Input must be enclosed in square brackets.");
}
string inner = input.Substring(1, input.Length - 2);
// 如果是空列表 "[]"
if (inner.Length == 0) return null;
string[] property = inner.Split(",");
int propertyIndex = 0;
return new StatModifier
{
StatType = EnumUtility<StatType>.Get(property[propertyIndex++]),
Value = float.Parse(property[propertyIndex++]),
IsPercent = bool.Parse(property[propertyIndex++])
};
}
}
}
@@ -0,0 +1,70 @@
using System;
using UnityEngine;
namespace SepCore.Definition
{
public sealed partial class modifier
{
public StatType StatType => Key;
/// <summary>
/// 实际参与数值计算的浮点数值。
/// 1. 百分比加成(IsPercent == true):表内千分比(如 200 代表 20%),转换为 0.2f。
/// 2. 非百分比加成(IsPercent == false):移动速度原为 float 放大了 1000 倍(如 800 代表 0.8f),除以 1000f;其余(如生命+53、攻击+10)直接使用原值。
/// </summary>
public float RealValue
{
get
{
if (IsPercent)
{
return Value / 1000f;
}
if (Key == StatType.MovementSpeed)
{
return Value / 1000f;
}
return Value;
}
}
public modifier()
{
}
public modifier(StatType key, int value, bool isPercent)
{
Key = key;
Value = value;
IsPercent = isPercent;
}
public modifier(StatType key, float value, bool isPercent)
{
Key = key;
Value = (isPercent || key == StatType.MovementSpeed)
? Mathf.RoundToInt(value * 1000f)
: Mathf.RoundToInt(value);
IsPercent = isPercent;
}
public string ToDisplayString()
{
if (IsPercent)
{
float percent = Value / 10f;
return $"{Key} +{percent:0.##}%";
}
if (Key == StatType.MovementSpeed)
{
float speed = Value / 1000f;
return $"{Key} +{speed:0.##}";
}
return $"{Key} +{Value}";
}
}
}