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:
237
Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs
Normal file
237
Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs
Normal file
@@ -0,0 +1,237 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FMODUnity
|
||||
{
|
||||
public class BankRefreshWindow : EditorWindow
|
||||
{
|
||||
private static BankRefreshWindow instance = null;
|
||||
|
||||
private SerializedObject serializedSettings;
|
||||
private SerializedProperty cooldown;
|
||||
private SerializedProperty showWindow;
|
||||
|
||||
private bool readyToRefreshBanks = false;
|
||||
private float closeTime = float.MaxValue;
|
||||
private string lastRefreshError = null;
|
||||
|
||||
private const float CloseDelay = 5;
|
||||
|
||||
public static bool IsVisible { get { return instance != null; } }
|
||||
|
||||
public static bool ReadyToRefreshBanks { get { return instance == null || instance.readyToRefreshBanks; } }
|
||||
|
||||
public static void ShowWindow()
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
instance = CreateInstance<BankRefreshWindow>();
|
||||
instance.titleContent = new GUIContent(L10n.Tr("FMOD Bank Refresh Status"));
|
||||
instance.minSize = new Vector2(400, 200);
|
||||
instance.maxSize = new Vector2(1000, 200);
|
||||
|
||||
instance.ShowUtility();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
serializedSettings = new SerializedObject(Settings.Instance);
|
||||
cooldown = serializedSettings.FindProperty("BankRefreshCooldown");
|
||||
showWindow = serializedSettings.FindProperty("ShowBankRefreshWindow");
|
||||
|
||||
// instance is set to null when scripts are recompiled
|
||||
if (instance == null)
|
||||
{
|
||||
instance = this;
|
||||
}
|
||||
else if (instance != this)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (instance == this)
|
||||
{
|
||||
instance = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnInspectorUpdate()
|
||||
{
|
||||
Repaint();
|
||||
|
||||
if (BankRefresher.TimeUntilBankRefresh() != float.MaxValue)
|
||||
{
|
||||
closeTime = float.MaxValue;
|
||||
}
|
||||
|
||||
if (Time.realtimeSinceStartup > closeTime)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
}
|
||||
|
||||
public static void HandleBankRefresh(string error)
|
||||
{
|
||||
if (error != null)
|
||||
{
|
||||
RuntimeUtils.DebugLogErrorFormat("FMOD: Bank refresh failed: {0}", error);
|
||||
}
|
||||
|
||||
if (instance != null)
|
||||
{
|
||||
instance.readyToRefreshBanks = false;
|
||||
instance.lastRefreshError = error;
|
||||
|
||||
if (error == null)
|
||||
{
|
||||
instance.closeTime = Time.realtimeSinceStartup + CloseDelay;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
serializedSettings.Update();
|
||||
|
||||
DrawStatus();
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
SettingsEditor.DisplayBankRefreshSettings(cooldown, showWindow, false);
|
||||
|
||||
DrawButtons();
|
||||
|
||||
serializedSettings.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
private bool ConsumeEscapeKey()
|
||||
{
|
||||
if ((focusedWindow == this) && Event.current.isKey && Event.current.keyCode == KeyCode.Escape)
|
||||
{
|
||||
Event.current.Use();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawStatus()
|
||||
{
|
||||
GUIStyle labelStyle = new GUIStyle(EditorStyles.whiteLargeLabel);
|
||||
labelStyle.alignment = TextAnchor.MiddleCenter;
|
||||
|
||||
GUIStyle largeErrorStyle = new GUIStyle(labelStyle);
|
||||
largeErrorStyle.normal.textColor = Color.red;
|
||||
|
||||
GUIStyle errorStyle = new GUIStyle(GUI.skin.box);
|
||||
errorStyle.alignment = TextAnchor.UpperLeft;
|
||||
errorStyle.wordWrap = true;
|
||||
errorStyle.normal.textColor = Color.red;
|
||||
|
||||
float timeSinceFileChange = BankRefresher.TimeSinceSourceFileChange();
|
||||
|
||||
if (timeSinceFileChange != float.MaxValue)
|
||||
{
|
||||
GUILayout.Label(string.Format(L10n.Tr("The FMOD source banks changed {0} ago."),
|
||||
EditorUtils.DurationString(timeSinceFileChange)), labelStyle);
|
||||
|
||||
float timeUntilBankRefresh = BankRefresher.TimeUntilBankRefresh();
|
||||
|
||||
if (timeUntilBankRefresh == 0)
|
||||
{
|
||||
GUILayout.Label(L10n.Tr("Refreshing banks now..."), labelStyle);
|
||||
readyToRefreshBanks = true;
|
||||
}
|
||||
else if (timeUntilBankRefresh != float.MaxValue)
|
||||
{
|
||||
if (DrawCountdown(L10n.Tr("Refreshing banks"), timeUntilBankRefresh, Settings.Instance.BankRefreshCooldown, labelStyle)
|
||||
|| ConsumeEscapeKey())
|
||||
{
|
||||
BankRefresher.DisableAutoRefresh();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GUILayout.Label(L10n.Tr("Would you like to refresh banks?"), labelStyle);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (lastRefreshError == null)
|
||||
{
|
||||
GUILayout.Label(L10n.Tr("The FMOD banks are up to date."), labelStyle);
|
||||
}
|
||||
else
|
||||
{
|
||||
GUILayout.Label(L10n.Tr("Bank refresh failed:"), largeErrorStyle);
|
||||
GUILayout.Box(lastRefreshError, errorStyle, GUILayout.ExpandWidth(true));
|
||||
}
|
||||
}
|
||||
|
||||
if (closeTime != float.MaxValue)
|
||||
{
|
||||
float timeUntilClose = Mathf.Max(0, closeTime - Time.realtimeSinceStartup);
|
||||
|
||||
if (DrawCountdown(L10n.Tr("Closing"), timeUntilClose, CloseDelay, labelStyle) || ConsumeEscapeKey())
|
||||
{
|
||||
closeTime = float.MaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool DrawCountdown(string text, float remainingTime, float totalTime, GUIStyle labelStyle)
|
||||
{
|
||||
GUILayout.Label(string.Format(L10n.Tr("{0} in {1}..."), text, EditorUtils.DurationString(remainingTime)), labelStyle);
|
||||
|
||||
const float boxHeight = 2;
|
||||
|
||||
Rect controlRect = EditorGUILayout.GetControlRect(false, boxHeight * 2);
|
||||
|
||||
Rect boxRect = controlRect;
|
||||
boxRect.width *= remainingTime / totalTime;
|
||||
boxRect.x += (controlRect.width - boxRect.width) / 2;
|
||||
boxRect.height = 2;
|
||||
|
||||
GUI.DrawTexture(boxRect, EditorGUIUtility.whiteTexture);
|
||||
|
||||
GUIContent cancelContent = new GUIContent(L10n.Tr("Cancel"));
|
||||
|
||||
controlRect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * 2);
|
||||
|
||||
Rect buttonRect = controlRect;
|
||||
buttonRect.width = 100;
|
||||
buttonRect.x += (controlRect.width - buttonRect.width) / 2;
|
||||
|
||||
return GUI.Button(buttonRect, cancelContent);
|
||||
}
|
||||
|
||||
private void DrawButtons()
|
||||
{
|
||||
Rect rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * 2);
|
||||
|
||||
int buttonCount = 2;
|
||||
|
||||
Rect closeRect = rect;
|
||||
closeRect.width = rect.width / buttonCount;
|
||||
|
||||
Rect refreshRect = rect;
|
||||
refreshRect.xMin = closeRect.xMax;
|
||||
|
||||
if (GUI.Button(closeRect, L10n.Tr("Close")))
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
if (GUI.Button(refreshRect, L10n.Tr("Refresh Banks Now")))
|
||||
{
|
||||
EventManager.RefreshBanks();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user