Files
Convention-Unity-Demo/Assets/Scripts/Volume/Updatement/BaseVolumeUpdatement.cs
2025-12-17 15:50:03 +08:00

76 lines
2.4 KiB
C#

using Convention;
using Demo.Game.Attr;
using System.Collections;
using System.IO;
using UnityEngine;
namespace Demo.Game
{
namespace ConfigType
{
public class BaseVolumeUpdatementConfig:ScriptLoadableConfig
{
public int target;
public string updateOverride;
public string updateField;
public override void Deserialize(BinaryReader reader)
{
target = BinarySerializeUtility.ReadInt(reader);
updateOverride = BinarySerializeUtility.ReadString(reader);
updateField = BinarySerializeUtility.ReadString(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteInt(writer, target);
BinarySerializeUtility.WriteString(writer, updateOverride);
BinarySerializeUtility.WriteString(writer, updateField);
base.Serialize(writer);
}
}
}
public abstract class BaseVolumeUpdatement<T> : Updatement<T> where T : unmanaged
{
[Content, SerializeField] private BaseVolume target;
[Content, SerializeField] private string updateOverride;
[Content, SerializeField] private string updateField;
protected override IEnumerator DoSomethingDuringApplyScript()
{
yield return base.DoSomethingDuringApplyScript();
if (target == null)
{
target = this.UpdateTarget.SeekComponent<BaseVolume>();
}
}
protected override void UpdateData(T data)
{
target.TrySetOverrideField<T>(updateOverride, updateField, data);
}
[Convention.RScript.Variable.Attr.Method]
public void SetUpdateOverrideAndField(string updateOverride, string updateField)
{
this.updateOverride = updateOverride;
this.updateField = updateField;
}
/// <summary>
/// 新增
/// </summary>
/// <param name="time">插值时间</param>
/// <param name="value">值</param>
/// <param name="curveType">缓动曲线</param>
[Convention.RScript.Variable.Attr.Method]
public void Add(float time, T value, MathExtension.EaseCurveType curveType)
{
ManualAddEntry(time, value, curveType);
}
}
}