using UnityEngine; namespace Unity.VisualScripting { public static class ApplicationVariables { public const string assetPath = "ApplicationVariables"; private static VariablesAsset _asset; public static VariablesAsset asset { get { if (_asset == null) { Load(); } return _asset; } } public static void Load() { _asset = Resources.Load(assetPath) ?? ScriptableObject.CreateInstance(); } public static VariableDeclarations runtime { get; private set; } public static VariableDeclarations initial => asset.declarations; public static VariableDeclarations current => Application.isPlaying ? runtime : initial; public static void OnEnterEditMode() { DestroyRuntimeDeclarations(); // Required because assemblies don't reload on play mode exit } public static void OnExitEditMode() { } internal static void OnEnterPlayMode() { CreateRuntimeDeclarations(); } internal static void OnExitPlayMode() { } private static void CreateRuntimeDeclarations() { runtime = asset.declarations.CloneViaFakeSerialization(); } private static void DestroyRuntimeDeclarations() { runtime = null; } } }