Editor/ProjectSettingCreator.cs
using System;
using System.Reflection;
using Editor;
using Sandbox;
using System.Linq;
using System.Collections.Generic;
using static Editor.EditorEvent;
using Sandbox.Internal;
using System.IO;
public static class ProjectSettingCreator
{
[Hotload(Priority = -10)]
public static void CreateProjectSettingFiles()
{
var types = GlobalGameNamespace.TypeLibrary.GetTypes<ProjectSettingNonGenericBase>();
foreach(var type in types)
{
if (type.IsAbstract)
continue;
var targetType = type.TargetType;
var instance = Activator.CreateInstance(targetType) as GameResource;
Type constructedType = typeof(ProjectSetting<>).MakeGenericType(targetType);
var filePathProperty = constructedType.GetProperty("fullFilePathWithoutExtension", BindingFlags.Static | BindingFlags.Public);
var fileExtensionProperty = constructedType.GetProperty("fileExtension", BindingFlags.Static | BindingFlags.Public);
string filePath = filePathProperty != null ? filePathProperty.GetValue(null) as string : null;
string fileExtension = fileExtensionProperty != null ? fileExtensionProperty.GetValue(null) as string : null;
if (string.IsNullOrEmpty(filePath) || string.IsNullOrEmpty(fileExtension))
{
Log.Error($"Could not retrieve filePath or fileExtension for '{targetType}'");
continue;
}
var targetDirectory = Path.GetDirectoryName(filePath);
if (!Directory.Exists(targetDirectory))
{
Directory.CreateDirectory(targetDirectory);
}
AssetSystem.CreateResource(fileExtension, filePath);
AssetSystem.RegisterFile($"{filePath}.{fileExtension}");
}
}
}