示例#1
0
        private static UdonSharpEditorCache GetInstance()
        {
            lock (_instanceLock)
            {
                if (_instance != null)
                {
                    return(_instance);
                }

                _instance = new UdonSharpEditorCache();
                _instance._info.version             = CURR_CACHE_VER;
                _instance._info.projectNeedsUpgrade = true;

                if (!File.Exists(CACHE_FILE_PATH))
                {
                    return(_instance);
                }

                UdonSharpCacheStorage storage = SerializationUtility.DeserializeValue <UdonSharpCacheStorage>(File.ReadAllBytes(CACHE_FILE_PATH), DataFormat.Binary);
                _instance._sourceFileHashLookup = storage.sourceFileHashLookup;
                _instance.LastBuildType         = storage.lastScriptBuildType;
                _instance._info        = storage.info;
                _instance._diagnostics = storage.diagnostics ?? Array.Empty <CompileDiagnostic>();

                // For now we just use this to see if we need to check for project serialization upgrade, may be extended later on. At the moment only used to avoid wasting time on extra validation when possible.
                // Hey now we use this to nuke out old data too
                if (_instance._info.version < CURR_CACHE_VER)
                {
                    _instance._info.version             = CURR_CACHE_VER;
                    _instance._sourceFileHashLookup     = new Dictionary <string, string>();
                    _instance._info.projectNeedsUpgrade = true;
                }

                return(_instance);
            }
        }
示例#2
0
        private void SaveAllCacheData()
        {
            if (_sourceDirty || _infoDirty)
            {
                if (!Directory.Exists(CACHE_DIR_PATH))
                {
                    Directory.CreateDirectory(CACHE_DIR_PATH);
                }

                UdonSharpCacheStorage storage = new UdonSharpCacheStorage()
                {
                    sourceFileHashLookup = _instance._sourceFileHashLookup,
                    lastScriptBuildType  = LastBuildType,
                    info        = _info,
                    diagnostics = _diagnostics.ToArray(),
                };
                File.WriteAllBytes(CACHE_FILE_PATH, SerializationUtility.SerializeValue <UdonSharpCacheStorage>(storage, DataFormat.Binary));
                _sourceDirty = false;
                _infoDirty   = false;
            }

            FlushDirtyDebugInfos();
            FlushUasmCache();
        }