Editor settings holder for Model Pro. Stores user preferences for VMDL and FBX import/export (scale, units, alignment, collision, default material) and loads/saves them as JSON in the editor config folder.
using ModelPro.Vmdl;
namespace ModelPro.Editor;
/// <summary>
/// Remembers the last values used in Model Pro so the next time the app is
/// opened the controls are pre-filled. Persisted to the editor config folder.
/// </summary>
public class ModelProSettings
{
const string Path = "modelpro/modelpro.json";
// VMDL tab
public string VmdlScale { get; set; } = "1.0";
public ScaleUnit VmdlScaleUnit { get; set; } = ScaleUnit.Inches;
public AlignOrigin VmdlAlignX { get; set; } = AlignOrigin.None;
public AlignOrigin VmdlAlignY { get; set; } = AlignOrigin.None;
public AlignOrigin VmdlAlignZ { get; set; } = AlignOrigin.None;
public string VmdlDefaultMaterial { get; set; } = "";
// FBX tab
public CollisionMode FbxCollision { get; set; } = CollisionMode.Hull;
public string FbxScale { get; set; } = "1.0";
public ScaleUnit FbxScaleUnit { get; set; } = ScaleUnit.Inches;
public AlignOrigin FbxAlignX { get; set; } = AlignOrigin.None;
public AlignOrigin FbxAlignY { get; set; } = AlignOrigin.None;
public AlignOrigin FbxAlignZ { get; set; } = AlignOrigin.None;
private static readonly ModelProSettings _current = new();
/// <summary>The single shared instance, loaded from disk on first access.</summary>
public static ModelProSettings Current
{
get
{
if ( _loaded ) return _current;
_loaded = true;
try
{
global::Editor.FileSystem.Config.CreateDirectory( "modelpro" );
var loaded = global::Editor.FileSystem.Config.ReadJsonOrDefault( Path, _current );
if ( loaded is not null )
{
// Keep the path the same - only copy values over.
_current.VmdlScale = loaded.VmdlScale;
_current.VmdlScaleUnit = loaded.VmdlScaleUnit;
_current.VmdlAlignX = loaded.VmdlAlignX;
_current.VmdlAlignY = loaded.VmdlAlignY;
_current.VmdlAlignZ = loaded.VmdlAlignZ;
_current.VmdlDefaultMaterial = loaded.VmdlDefaultMaterial;
_current.FbxCollision = loaded.FbxCollision;
_current.FbxScale = loaded.FbxScale;
_current.FbxScaleUnit = loaded.FbxScaleUnit;
_current.FbxAlignX = loaded.FbxAlignX;
_current.FbxAlignY = loaded.FbxAlignY;
_current.FbxAlignZ = loaded.FbxAlignZ;
}
}
catch ( System.Exception e )
{
Log.Warning( e, "Model Pro: failed to load settings" );
}
return _current;
}
}
static bool _loaded;
/// <summary>Save the current settings to the editor config folder.</summary>
public void Save()
{
try
{
global::Editor.FileSystem.Config.CreateDirectory( "modelpro" );
global::Editor.FileSystem.Config.WriteJson( Path, _current );
}
catch ( System.Exception e )
{
Log.Warning( e, "Model Pro: failed to save settings" );
}
}
}