FMODi paigaldamine projekti sisse, fmod project created, assets are imported into FMOD; AudioManager and FMODEvents scripts, VR is set up
This commit is contained in:
167
Assets/Plugins/FMOD/src/Editor/BankRefresher.cs
Normal file
167
Assets/Plugins/FMOD/src/Editor/BankRefresher.cs
Normal file
@@ -0,0 +1,167 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FMODUnity
|
||||
{
|
||||
public class BankRefresher
|
||||
{
|
||||
private static string currentWatchPath;
|
||||
private static FileSystemWatcher sourceFileWatcher;
|
||||
private static bool sourceFilesChanged = false;
|
||||
private static float lastSourceFileChange = float.MaxValue;
|
||||
private static bool autoRefresh = true;
|
||||
private static float nextFilePollTime = float.MinValue;
|
||||
|
||||
private const int FilePollPeriod = 5;
|
||||
|
||||
public static void DisableAutoRefresh()
|
||||
{
|
||||
autoRefresh = false;
|
||||
}
|
||||
|
||||
public static void Startup()
|
||||
{
|
||||
sourceFileWatcher = new FileSystemWatcher();
|
||||
sourceFileWatcher.IncludeSubdirectories = true;
|
||||
sourceFileWatcher.NotifyFilter = NotifyFilters.LastWrite;
|
||||
|
||||
sourceFileWatcher.Changed += OnSourceFileChanged;
|
||||
sourceFileWatcher.Created += OnSourceFileChanged;
|
||||
sourceFileWatcher.Deleted += OnSourceFileChanged;
|
||||
|
||||
EditorApplication.update += Update;
|
||||
}
|
||||
|
||||
private static void OnSourceFileChanged(object source, FileSystemEventArgs e)
|
||||
{
|
||||
sourceFilesChanged = true;
|
||||
}
|
||||
|
||||
private static void Update()
|
||||
{
|
||||
UpdateFileWatcherPath();
|
||||
CheckSourceFilesChanged();
|
||||
CheckCacheFileExists();
|
||||
RefreshBanksIfReady();
|
||||
}
|
||||
|
||||
private static void UpdateFileWatcherPath()
|
||||
{
|
||||
string sourceBankPath = Settings.Instance.SourceBankPath;
|
||||
|
||||
string pathToWatch;
|
||||
|
||||
if (Path.IsPathRooted(sourceBankPath))
|
||||
{
|
||||
pathToWatch = Path.GetFullPath(sourceBankPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
pathToWatch = Path.GetFullPath(Environment.CurrentDirectory + "/" + sourceBankPath);
|
||||
}
|
||||
|
||||
if (currentWatchPath != pathToWatch)
|
||||
{
|
||||
currentWatchPath = pathToWatch;
|
||||
|
||||
try {
|
||||
sourceFileWatcher.EnableRaisingEvents = false;
|
||||
sourceFilesChanged = false;
|
||||
|
||||
if (!string.IsNullOrEmpty(sourceBankPath))
|
||||
{
|
||||
sourceFileWatcher.Path = pathToWatch;
|
||||
sourceFileWatcher.EnableRaisingEvents = true;
|
||||
}
|
||||
}
|
||||
catch (ArgumentException e)
|
||||
{
|
||||
RuntimeUtils.DebugLogWarningFormat("Error watching {0}: {1}", pathToWatch, e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckSourceFilesChanged()
|
||||
{
|
||||
if (sourceFilesChanged)
|
||||
{
|
||||
lastSourceFileChange = Time.realtimeSinceStartup;
|
||||
sourceFilesChanged = false;
|
||||
|
||||
if (!BankRefreshWindow.IsVisible)
|
||||
{
|
||||
autoRefresh = true;
|
||||
}
|
||||
|
||||
if (IsWindowEnabled())
|
||||
{
|
||||
BankRefreshWindow.ShowWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckCacheFileExists()
|
||||
{
|
||||
if (Time.realtimeSinceStartup >= nextFilePollTime)
|
||||
{
|
||||
if (!File.Exists(EventManager.CacheAssetFullName))
|
||||
{
|
||||
EventManager.RefreshBanks();
|
||||
}
|
||||
|
||||
nextFilePollTime = Time.realtimeSinceStartup + FilePollPeriod;
|
||||
}
|
||||
}
|
||||
|
||||
private static void RefreshBanksIfReady()
|
||||
{
|
||||
if (TimeUntilBankRefresh() == 0 && BankRefreshWindow.ReadyToRefreshBanks)
|
||||
{
|
||||
EventManager.RefreshBanks();
|
||||
}
|
||||
}
|
||||
|
||||
public static void HandleBankRefresh(string result)
|
||||
{
|
||||
lastSourceFileChange = float.MaxValue;
|
||||
BankRefreshWindow.HandleBankRefresh(result);
|
||||
}
|
||||
|
||||
private static bool IsWindowEnabled()
|
||||
{
|
||||
Settings settings = Settings.Instance;
|
||||
|
||||
return settings.BankRefreshCooldown == Settings.BankRefreshPrompt
|
||||
|| (settings.BankRefreshCooldown >= 0 && settings.ShowBankRefreshWindow);
|
||||
}
|
||||
|
||||
public static float TimeSinceSourceFileChange()
|
||||
{
|
||||
if (lastSourceFileChange == float.MaxValue)
|
||||
{
|
||||
return float.MaxValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Mathf.Max(0, Time.realtimeSinceStartup - lastSourceFileChange);
|
||||
}
|
||||
}
|
||||
|
||||
public static float TimeUntilBankRefresh()
|
||||
{
|
||||
if (!autoRefresh
|
||||
|| lastSourceFileChange == float.MaxValue
|
||||
|| Settings.Instance.BankRefreshCooldown < 0)
|
||||
{
|
||||
return float.MaxValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
float nextRefreshTime = lastSourceFileChange + Settings.Instance.BankRefreshCooldown;
|
||||
return Mathf.Max(0, nextRefreshTime - Time.realtimeSinceStartup);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user