Kursach_StealthAction/Assets/Tremble/IO/FGD/FgdFieldFactory.cs
2026-10-11 19:16:11 +03:00

86 lines
2.0 KiB
C#

//
// This file is part of the Tremble package by Tiny Goose.
// Copyright (c) 2024-2026 TinyGoose Ltd., All Rights Reserved.
//
using System.Globalization;
using UnityEngine;
namespace TinyGoose.Tremble
{
public static class FgdFieldFactory
{
public static FgdFieldBase CreateField(string typename, string name, string description, string defaultValue)
{
switch (typename.ToLowerInvariant())
{
case "float":
return new FgdFloatField
{
Name = name,
Description = description,
DefaultValue = defaultValue != null ? float.Parse(defaultValue, NumberStyles.Any, CultureInfo.InvariantCulture) : 0f
};
case "integer":
return new FgdIntegerField
{
Name = name,
Description = description,
DefaultValue = defaultValue != null ? int.Parse(defaultValue, NumberStyles.Any, CultureInfo.InvariantCulture) : 0
};
case "vector":
if (defaultValue == null || !defaultValue.TryParseQ3Vector(out Vector3 vector))
{
vector = Vector3.zero;
}
return new FgdVectorField
{
Name = name,
Description = description,
DefaultValue = vector
};
case "color":
if (!defaultValue.TryParseQ3Colour(out Color colour))
{
colour = Color.white;
}
return new FgdColourField
{
Name = name,
Description = description,
DefaultColour = colour
};
case "string":
return new FgdStringField
{
Name = name,
Description = description,
DefaultValue = defaultValue
};
case "target_source":
return new FgdTargetSourceField
{
Name = name,
Description = description,
DefaultValue = defaultValue
};
case "target_destination":
return new FgdTargetDestinationField
{
Name = name,
Description = description,
DefaultValue = defaultValue
};
}
return new FgdStringField
{
Name = name,
Description = description,
DefaultValue = defaultValue
};
}
}
}