mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-17 00:44:49 +01:00
65 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|