81 lines
2.9 KiB
C#
81 lines
2.9 KiB
C#
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;
|
||
}
|
||
}
|
||
} |