Files
Continentis/Assets/Scripts/MainGame/Character/CharacterData/CharacterAttributeCollection.cs
SoulliesOfficial d09b58fd80 架构大更
2026-03-20 11:56:50 -04:00

81 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using Sirenix.OdinInspector;
using SLSUtilities.General;
using UnityEngine;
namespace Continentis.MainGame.Character
{
/// <summary>
/// 使用新版 SerializedDictionary 和 CharacterAttributePair 的全新配置集合类。
/// (目前不替换旧的 CharacterAttributesDefaultCollection请按需测试本版本
/// </summary>
[CreateAssetMenu(fileName = "CharacterAttributeCollection",
menuName = "Continentis/MainGame/Character/CharacterAttributeCollection", order = 1)]
public class CharacterAttributeCollection : ScriptableObject
{
[Title("Attributes新特性架构测试版")] [Tooltip("角色的通常属性:支持下拉菜单/手写自由切换的优雅 UI 交互!")]
public SerializedDictionary<string, float, CharacterAttributePair> originalAttributes;
[Tooltip("初始化时赋予给CurrentAttributes的属性\n" +
"留空则默认为0填数字则使用数字。")]
public SerializedDictionary<string, string> runtimeAttributes;
}
/// <summary>
/// 自定义的带有极简美学 UI 的字典序列化结构体。
/// 可以同时包含“下拉菜单安全输入”以及“纯手写高级输入”两种状态。
/// </summary>
[Serializable]
public struct CharacterAttributePair : ISerializedPair<string, float>
{
[SerializeField] [HideInInspector] public string attributeKey;
[SerializeField] [HideInInspector] private bool useManualInput;
[ShowInInspector]
[PropertyOrder(0)]
[HideIf("useManualInput")]
[HorizontalGroup("H")]
[HideLabel]
[ValueDropdown("@Continentis.MainGame.Base.EditorBaseCollection.GetCharacterAttributesDropdown($property)",
IsUniqueList = true, DropdownHeight = 400)]
[InlineButton("ToggleMode", Icon = SdfIconType.ListUl, Label = "")]
public string DropdownKey
{
get => attributeKey;
set => attributeKey = value;
}
[ShowInInspector]
[PropertyOrder(0)]
[ShowIf("useManualInput")]
[HorizontalGroup("H")]
[HideLabel]
[InlineButton("ToggleMode", Icon = SdfIconType.PencilSquare, Label = "")]
public string ManualKey
{
get => attributeKey;
set => attributeKey = value;
}
[PropertyOrder(10)] [HorizontalGroup("H", MarginLeft = 10, Width = 100)] [HideLabel]
public float attributeValue;
// 供 SLSUtilities.General 的接口实现
public string Key
{
get => attributeKey;
set => attributeKey = value;
}
public float Value
{
get => attributeValue;
set => attributeValue = value;
}
private void ToggleMode()
{
useManualInput = !useManualInput;
}
}
}