Files
BH3/Assets/Scripts/Assembly-CSharp/MoleMole/Config/DynamicFloatConverter.cs
2025-08-13 09:26:42 +08:00

65 lines
1.7 KiB
C#

using System;
using FullSerializer;
namespace MoleMole.Config
{
public class DynamicFloatConverter : fsConverter
{
public override object CreateInstance(fsData data, Type storageType)
{
return new DynamicFloat();
}
public override bool CanProcess(Type type)
{
return type == typeof(DynamicFloat);
}
public override bool RequestInheritanceSupport(Type storageType)
{
return false;
}
public override fsResult TryDeserialize(fsData data, ref object instance, Type storageType)
{
DynamicFloat dynamicFloat = (DynamicFloat)instance;
if (data.IsDouble)
{
dynamicFloat.isDynamic = false;
dynamicFloat.fixedValue = (float)data.AsDouble;
return fsResult.Success;
}
if (data.IsInt64)
{
dynamicFloat.isDynamic = false;
dynamicFloat.fixedValue = data.AsInt64;
return fsResult.Success;
}
if (data.IsString)
{
string asString = data.AsString;
if (!asString.StartsWith("%"))
{
return fsResult.Fail("DynamicFloat key needs to be like '%key' .");
}
dynamicFloat.isDynamic = true;
dynamicFloat.dynamicKey = asString.TrimStart('%');
return fsResult.Success;
}
return fsResult.Fail("DynamicFloat fields needs to be either a '%key' or a float value");
}
public override fsResult TrySerialize(object instance, out fsData serialized, Type storageType)
{
DynamicFloat dynamicFloat = instance as DynamicFloat;
if (dynamicFloat == null)
{
serialized = new fsData();
return fsResult.Fail("Failed to convert field to DynamicFloat on serialization.");
}
serialized = ((!dynamicFloat.isDynamic) ? new fsData(dynamicFloat.fixedValue) : new fsData("%" + dynamicFloat.dynamicKey));
return fsResult.Success;
}
}
}