Files
Silly-Home/Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/VRCPackageSettings.cs
2026-06-07 16:58:24 +01:00

91 lines
2.4 KiB
C#

using System;
using System.IO;
using UnityEditor;
using UnityEngine;
namespace VRC.SDKBase.Editor
{
public class VRCPackageSettings : ISaveable
{
private static string PackageSettingsPath = Path.Combine(new DirectoryInfo(Application.dataPath).Parent?.FullName, "ProjectSettings", "Packages");
private static VRC.SDKBase.Editor.VRCPackageSettings _instance;
public bool samplesImported = false;
public bool allowVRCPackageChanges = false;
public bool samplesHintCreated = false;
public bool debugVCCConnection = false;
public bool dpidMipmaps = false;
public bool dpidConservative = true;
public static VRC.SDKBase.Editor.VRCPackageSettings Instance
{
get
{
if (_instance == null)
{
_instance = Create();
}
return _instance;
}
}
private static VRCPackageSettings Create()
{
var result = new VRCPackageSettings();
result.Load();
return result;
}
private static string GetPathFromType(Type t)
{
// Get package info for this assembly
var packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssembly(t.Assembly);
// Exit early for non-VPM SDK
if (packageInfo == null)
{
return null;
}
return Path.Combine(PackageSettingsPath, packageInfo.name, "settings.json");
}
private string GetPath()
{
return GetPathFromType(GetType());
}
private void EnsurePathExists()
{
var dir = Path.GetDirectoryName(GetPath());
Directory.CreateDirectory(dir);
}
protected void Load()
{
EnsurePathExists();
var path = GetPath();
if (!File.Exists(path))
{
var settings = (ISaveable)Activator.CreateInstance(GetType());
settings.Save();
}
else
{
EditorJsonUtility.FromJsonOverwrite(File.ReadAllText(path), this);
}
}
public void Save()
{
var json = JsonUtility.ToJson(this, true);
File.WriteAllText(GetPath(), json);
}
}
public interface ISaveable
{
void Save();
}
}