64 lines
2.3 KiB
C#
64 lines
2.3 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using Sirenix.OdinInspector;
|
||
using SLSUtilities.General;
|
||
using UnityEngine;
|
||
|
||
namespace Cielonos.MainGame.Characters
|
||
{
|
||
[CreateAssetMenu(fileName = "AttributeCollection", menuName = "Cielonos/Characters/AttributeCollection", order = 1)]
|
||
public class AttributeCollection : SerializedScriptableObject
|
||
{
|
||
[Title("Attributes")]
|
||
[Tooltip("角色的通常属性:第一栏是属性名,第二栏是属性值")]
|
||
public SerializedDictionary<string, float, CharacterAttributePair> originalAttributes;
|
||
|
||
[Tooltip("初始化时赋予给CurrentAttributes的属性:\n" +
|
||
"第一栏是属性名,第二栏是初始化时使用对应名称的originalAttributes的数据,留空则默认为0,如果是float数字则直接使用该数字")]
|
||
public SerializedDictionary<string, string> runtimeAttributes;
|
||
}
|
||
|
||
[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("@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;
|
||
|
||
public string Key => attributeKey;
|
||
public float Value => attributeValue;
|
||
|
||
private void ToggleMode()
|
||
{
|
||
useManualInput = !useManualInput;
|
||
}
|
||
}
|
||
} |