summaryrefslogtreecommitdiff
path: root/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-08-20 23:40:50 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-08-20 23:40:50 -0400
commit3af4c218c0e70167db23a6303d2af30aff37d2fe (patch)
tree927f29edcf54ab562f40f3d1c6cb69287c7f5980 /Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor
parentb6daed0af784f4e9bc13329dd87c671b06ee1c65 (diff)
downloadProject-Sandbox-3af4c218c0e70167db23a6303d2af30aff37d2fe.tar.gz
Project-Sandbox-3af4c218c0e70167db23a6303d2af30aff37d2fe.tar.bz2
Project-Sandbox-3af4c218c0e70167db23a6303d2af30aff37d2fe.zip
Removed a bunch of stuff; Changes
Diffstat (limited to 'Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor')
-rw-r--r--Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs658
-rw-r--r--Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs.meta12
-rw-r--r--Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs961
-rw-r--r--Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs.meta12
4 files changed, 1643 insertions, 0 deletions
diff --git a/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs
new file mode 100644
index 0000000..23e4426
--- /dev/null
+++ b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs
@@ -0,0 +1,658 @@
+/* ---------------------------------------
+ * Author: Martin Pane (martintayx@gmail.com) (@tayx94)
+ * Collaborators: Lars Aalbertsen (@Rockylars)
+ * Project: Graphy - Ultimate Stats Monitor
+ * Date: 02-Jan-18
+ * Studio: Tayx
+ *
+ * This project is released under the MIT license.
+ * Attribution is not required, but it is always welcomed!
+ * -------------------------------------*/
+
+using System;
+using UnityEngine;
+using System.Collections.Generic;
+using System.IO;
+using UnityEditor;
+
+namespace Tayx.Graphy
+{
+ [CustomEditor(typeof(GraphyDebugger))]
+ internal class GraphyDebuggerEditor : Editor
+ {
+ /* ----- TODO: ----------------------------
+ * Add summaries to the variables.
+ * Add summaries to the functions.
+ * Finish spacing on "OnInspectorGUI".
+ * Add sections to "OnInspectorGUI".
+ * Fix the use of Space to be consistent with "GraphyManagerEditor".
+ * --------------------------------------*/
+
+ #region Variables -> Private
+
+ private GraphyDebugger m_target;
+
+ private int m_newDebugPacketListSize = 0;
+
+ private int m_previouslySelectedDebugPacketIndex = 0;
+ private int m_currentlySelectedDebugPacketIndex = 0;
+
+ private int m_selectedDebugPacketCondition = 0;
+
+ private GUISkin m_skin;
+
+ private GUIStyle m_headerStyle1;
+ private GUIStyle m_headerStyle2;
+
+ private Texture2D m_logoTexture;
+
+ #endregion
+
+ #region Methods -> Unity Callbacks
+
+ private void OnEnable()
+ {
+ m_target = (GraphyDebugger) target;
+ }
+
+ #endregion
+
+ #region Methods -> Public Override
+
+ public override void OnInspectorGUI()
+ {
+ if (m_target == null && target == null)
+ {
+ base.OnInspectorGUI();
+
+ return;
+ }
+
+ LoadGuiStyles();
+
+ float defaultLabelWidth = EditorGUIUtility.labelWidth;
+ float defaultFieldWidth = EditorGUIUtility.fieldWidth;
+
+ //===== CONTENT REGION ========================================================================
+
+ GUILayout.Space(20);
+
+ #region Section -> Logo
+
+ if (m_logoTexture != null)
+ {
+ GUILayout.Label
+ (
+ image: m_logoTexture,
+ style: new GUIStyle(GUI.skin.GetStyle("Label"))
+ {
+ alignment = TextAnchor.UpperCenter
+ }
+ );
+
+ GUILayout.Space(10);
+ }
+ else
+ {
+ EditorGUILayout.LabelField
+ (
+ label: "[ GRAPHY - DEBUGGER ]",
+ style: m_headerStyle1
+ );
+ }
+
+ #endregion
+
+ GUILayout.Space(5); //Extra pixels added when the logo is used.
+
+ #region Section -> Settings
+
+ SerializedObject serObj = serializedObject;
+
+ SerializedProperty debugPacketList = serObj.FindProperty("m_debugPackets"); // Find the List in our script and create a refrence of it
+
+ //Update our list
+ serObj.Update();
+
+ EditorGUILayout.LabelField("Current [Debug Packets] list size: " + debugPacketList.arraySize);
+
+ EditorGUIUtility.fieldWidth = 32;
+ EditorGUILayout.BeginHorizontal();
+
+
+
+ m_newDebugPacketListSize = EditorGUILayout.IntField
+ (
+ label: "Define a new list size",
+ value: m_newDebugPacketListSize
+ );
+
+ if (GUILayout.Button("Resize List"))
+ {
+ if (EditorUtility.DisplayDialog
+ (
+ title:
+ "Resize List",
+
+ message:
+ "Are you sure you want to resize the entire List?\n\n" +
+ "Current List Size -> " +
+ debugPacketList.arraySize +
+ "\n" +
+ "New List Size -> " +
+ m_newDebugPacketListSize +
+ "\n" +
+ "This will add default entries if the value is greater than the list size, or erase the bottom values until the new size specified.",
+
+ ok:
+ "Resize",
+
+ cancel:
+ "Cancel")
+ )
+ {
+ m_currentlySelectedDebugPacketIndex = 0;
+
+ if (m_newDebugPacketListSize != debugPacketList.arraySize)
+ {
+ while (m_newDebugPacketListSize > debugPacketList.arraySize)
+ {
+ debugPacketList.InsertArrayElementAtIndex(debugPacketList.arraySize);
+ SetDefaultDebugPacketValues(debugPacketList);
+ }
+ while (m_newDebugPacketListSize < debugPacketList.arraySize)
+ {
+ debugPacketList.DeleteArrayElementAtIndex(debugPacketList.arraySize - 1);
+ }
+ }
+ }
+ }
+
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.LabelField("NOT RECOMMENDED (Only use for first initialization)", EditorStyles.centeredGreyMiniLabel);
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ if (debugPacketList.arraySize < 1)
+ {
+ m_previouslySelectedDebugPacketIndex = 0;
+ m_currentlySelectedDebugPacketIndex = 0;
+ m_selectedDebugPacketCondition = 0;
+
+ serializedObject.ApplyModifiedProperties();
+ return;
+ }
+
+ m_headerStyle2.contentOffset = Vector2.down * 3f;
+
+ EditorGUILayout.LabelField("Selected debug packet:");
+
+ EditorGUILayout.BeginHorizontal();
+
+ List<string> debugPacketNames = new List<string>();
+ for (int i = 0; i < debugPacketList.arraySize; i++)
+ {
+ SerializedProperty listItem = debugPacketList.GetArrayElementAtIndex(i);
+ // NOTE: If the Popup detects two equal strings, it just paints 1, that's why I always add the "i"
+ char checkMark = listItem.FindPropertyRelative("Active").boolValue ? '\u2714' : '\u2718';
+ debugPacketNames.Add
+ (
+ (i + 1) +
+ " (" +
+ checkMark +
+ ") " +
+ " - ID: " +
+ listItem.FindPropertyRelative("Id").intValue +
+ " (Conditions: " +
+ listItem.FindPropertyRelative("DebugConditions").arraySize +
+ ")"
+ );
+ }
+
+ m_currentlySelectedDebugPacketIndex = EditorGUILayout.Popup(m_currentlySelectedDebugPacketIndex, debugPacketNames.ToArray());
+
+ if (m_currentlySelectedDebugPacketIndex != m_previouslySelectedDebugPacketIndex)
+ {
+ m_selectedDebugPacketCondition = 0;
+
+ m_previouslySelectedDebugPacketIndex = m_currentlySelectedDebugPacketIndex;
+ }
+
+ Color defaultGUIColor = GUI.color;
+
+ GUI.color = new Color(0.7f, 1f, 0.0f, 1f);
+
+ //Or add a new item to the List<> with a button
+
+ if (GUILayout.Button("Add", GUILayout.Width(60)))
+ {
+ debugPacketList.InsertArrayElementAtIndex(debugPacketList.arraySize);
+ SetDefaultDebugPacketValues(debugPacketList);
+ }
+
+ GUI.color = new Color(1f, 0.7f, 0.0f, 1f);
+
+ //Remove this index from the List
+
+ if (GUILayout.Button("Remove", GUILayout.Width(60)))
+ {
+ debugPacketList.DeleteArrayElementAtIndex(m_currentlySelectedDebugPacketIndex);
+ if (m_currentlySelectedDebugPacketIndex > 0)
+ {
+ m_currentlySelectedDebugPacketIndex--;
+ }
+
+ if (debugPacketList.arraySize < 1)
+ {
+ serializedObject.ApplyModifiedProperties();
+ return;
+ }
+ }
+
+ GUI.color = defaultGUIColor;
+
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ //Display our list to the inspector window
+
+ SerializedProperty listItemSelected = debugPacketList.GetArrayElementAtIndex(m_currentlySelectedDebugPacketIndex);
+
+ SerializedProperty Active = listItemSelected.FindPropertyRelative("Active");
+ SerializedProperty Id = listItemSelected.FindPropertyRelative("Id");
+ SerializedProperty ExecuteOnce = listItemSelected.FindPropertyRelative("ExecuteOnce");
+ SerializedProperty InitSleepTime = listItemSelected.FindPropertyRelative("InitSleepTime");
+ SerializedProperty ExecuteSleepTime = listItemSelected.FindPropertyRelative("ExecuteSleepTime");
+ SerializedProperty ConditionEvaluation = listItemSelected.FindPropertyRelative("ConditionEvaluation");
+ SerializedProperty DebugConditions = listItemSelected.FindPropertyRelative("DebugConditions");
+ SerializedProperty MessageType = listItemSelected.FindPropertyRelative("MessageType");
+ SerializedProperty Message = listItemSelected.FindPropertyRelative("Message");
+ SerializedProperty TakeScreenshot = listItemSelected.FindPropertyRelative("TakeScreenshot");
+ SerializedProperty ScreenshotFileName = listItemSelected.FindPropertyRelative("ScreenshotFileName");
+ SerializedProperty DebugBreak = listItemSelected.FindPropertyRelative("DebugBreak");
+ SerializedProperty UnityEvents = listItemSelected.FindPropertyRelative("UnityEvents");
+
+ #endregion
+
+ EditorGUILayout.LabelField
+ (
+ label:
+ "[ PACKET ] - ID: " +
+ Id.intValue +
+ " (Conditions: " +
+ DebugConditions.arraySize +
+ ")",
+
+ style: m_headerStyle2
+ );
+
+ EditorGUIUtility.labelWidth = 150;
+ EditorGUIUtility.fieldWidth = 35;
+
+ Active.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Active",
+ tooltip: "If false, it will not be checked"
+ ),
+ value: Active.boolValue
+ );
+
+ Id.intValue = EditorGUILayout.IntField
+ (
+ new GUIContent
+ (
+ text: "ID",
+ tooltip: "Optional Id. It's used to get or remove DebugPackets in runtime"
+ ),
+ value: Id.intValue
+ );
+
+ ExecuteOnce.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Execute once",
+ tooltip: "If true, once the actions are executed, this DebugPacket will delete itself"
+ ),
+ value: ExecuteOnce.boolValue
+ );
+
+ InitSleepTime.floatValue = EditorGUILayout.FloatField
+ (
+ new GUIContent
+ (
+ text: "Init sleep time",
+ tooltip: "Time to wait before checking if conditions are met (use this to avoid low fps drops triggering the conditions when loading the game)"
+ ),
+ value: InitSleepTime.floatValue
+ );
+
+ ExecuteSleepTime.floatValue = EditorGUILayout.FloatField
+ (
+ new GUIContent
+ (
+ text: "Sleep time after execute",
+ tooltip: "Time to wait before checking if conditions are met again (once they have already been met and if ExecuteOnce is false)"
+ ),
+ value: ExecuteSleepTime.floatValue
+ );
+
+
+
+ EditorGUIUtility.labelWidth = defaultLabelWidth;
+ EditorGUIUtility.fieldWidth = defaultFieldWidth;
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ EditorGUILayout.LabelField("[ CONDITIONS ] (" + DebugConditions.arraySize + ")", m_headerStyle2);
+
+ EditorGUILayout.PropertyField
+ (
+ ConditionEvaluation,
+ new GUIContent("Condition evaluation")
+ );
+
+ EditorGUILayout.Space();
+
+ if (DebugConditions.arraySize < 1)
+ {
+ DebugConditions.InsertArrayElementAtIndex(DebugConditions.arraySize);
+ m_selectedDebugPacketCondition = 0;
+ }
+
+ EditorGUILayout.BeginHorizontal();
+
+ List<string> debugPacketConditionNames = new List<string>();
+ for (int i = 0; i < DebugConditions.arraySize; i++)
+ {
+ SerializedProperty listItem = DebugConditions.GetArrayElementAtIndex(i);
+ // NOTE: If the Popup detects two equal strings, it just paints 1, that's why I always add the "i"
+
+ string conditionName = (i + 1).ToString() + " - ";
+ conditionName += GetComparerStringFromDebugVariable((GraphyDebugger.DebugVariable)listItem.FindPropertyRelative("Variable").intValue) + " ";
+ conditionName += GetComparerStringFromDebugComparer((GraphyDebugger.DebugComparer)listItem.FindPropertyRelative("Comparer").intValue) + " ";
+ conditionName += listItem.FindPropertyRelative("Value").floatValue.ToString();
+
+ debugPacketConditionNames.Add(conditionName);
+ }
+
+ m_selectedDebugPacketCondition = EditorGUILayout.Popup(m_selectedDebugPacketCondition, debugPacketConditionNames.ToArray());
+
+ GUI.color = new Color(0.7f, 1f, 0.0f, 1f);
+
+ if (GUILayout.Button("Add", GUILayout.Width(60)))
+ {
+ DebugConditions.InsertArrayElementAtIndex(DebugConditions.arraySize);
+ }
+
+ if (DebugConditions.arraySize > 1)
+ {
+ GUI.color = new Color(1f, 0.7f, 0.0f, 1f);
+ }
+ else
+ {
+ GUI.color = new Color(1f, 0.7f, 0.0f, 0.5f);
+ }
+
+ //Remove this index from the List
+ if (GUILayout.Button("Remove", GUILayout.Width(60)))
+ {
+ if (DebugConditions.arraySize > 1)
+ {
+ DebugConditions.DeleteArrayElementAtIndex(m_selectedDebugPacketCondition);
+ if (m_selectedDebugPacketCondition > 0)
+ {
+ m_selectedDebugPacketCondition--;
+ }
+ }
+ }
+
+ GUI.color = defaultGUIColor;
+
+ EditorGUILayout.EndHorizontal();
+
+ SerializedProperty conditionListItemSelected = DebugConditions.GetArrayElementAtIndex(m_selectedDebugPacketCondition);
+
+ SerializedProperty Variable = conditionListItemSelected.FindPropertyRelative("Variable");
+ SerializedProperty Comparer = conditionListItemSelected.FindPropertyRelative("Comparer");
+ SerializedProperty Value = conditionListItemSelected.FindPropertyRelative("Value");
+
+ EditorGUILayout.PropertyField
+ (
+ Variable,
+ new GUIContent("Variable")
+ );
+
+ EditorGUILayout.PropertyField
+ (
+ Comparer,
+ new GUIContent("Comparer")
+ );
+
+ EditorGUILayout.PropertyField
+ (
+ Value,
+ new GUIContent("Value")
+ );
+
+ EditorGUILayout.Space();
+ EditorGUILayout.Space();
+
+ EditorGUILayout.LabelField("[ ACTIONS ]", m_headerStyle2);
+
+ EditorGUIUtility.labelWidth = 140;
+ EditorGUIUtility.fieldWidth = 35;
+
+ EditorGUILayout.PropertyField
+ (
+ MessageType,
+ new GUIContent("Message type")
+ );
+
+ EditorGUILayout.PropertyField(Message);
+
+ TakeScreenshot.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Take screenshot",
+ tooltip: "If true, it takes a screenshot and stores it. The location where the image is written to can include a directory/folder list. With no directory/folder list the image will be written into the Project folder. On mobile platforms the filename is appended to the persistent data path."
+ ),
+ value: TakeScreenshot.boolValue
+ );
+
+ if (TakeScreenshot.boolValue)
+ {
+ EditorGUILayout.PropertyField
+ (
+ ScreenshotFileName,
+ new GUIContent
+ (
+ text: "Screenshot file name",
+ tooltip: "Avoid this characters: * . \" / \\ [ ] : ; | = , \n\nIt will have the date appended at the end to avoid overwriting."
+ )
+ );
+ }
+
+ DebugBreak.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Debug Break",
+ tooltip: "If true, it pauses the editor"
+ ),
+ DebugBreak.boolValue
+ );
+
+ EditorGUILayout.PropertyField(UnityEvents);
+
+ EditorGUIUtility.labelWidth = defaultLabelWidth;
+ EditorGUIUtility.fieldWidth = defaultFieldWidth;
+
+ serializedObject.ApplyModifiedProperties();
+
+ }
+
+ #endregion
+
+ #region Methods -> Private
+
+ private void LoadGuiStyles()
+ {
+ string path = GetMonoScriptFilePath(this);
+
+ path = path.Split(new string[] { "Assets" }, StringSplitOptions.None)[1]
+ .Split(new string[] { "Tayx" }, StringSplitOptions.None)[0];
+
+ m_logoTexture = AssetDatabase.LoadAssetAtPath<Texture2D>
+ (
+ "Assets" +
+ path +
+ "Tayx/Graphy - Ultimate Stats Monitor/Textures/Debugger_Logo_" +
+ (EditorGUIUtility.isProSkin ? "White.png" : "Dark.png")
+ );
+
+ m_skin = AssetDatabase.LoadAssetAtPath<GUISkin>
+ (
+ "Assets" +
+ path +
+ "Tayx/Graphy - Ultimate Stats Monitor/GUI/Graphy.guiskin"
+ );
+
+ if (m_skin != null)
+ {
+ m_headerStyle1 = m_skin.GetStyle("Header1");
+ m_headerStyle2 = m_skin.GetStyle("Header2");
+
+ SetGuiStyleFontColor
+ (
+ guiStyle: m_headerStyle2,
+ color: EditorGUIUtility.isProSkin ? Color.white : Color.black
+ );
+ }
+ else
+ {
+ m_headerStyle1 = EditorStyles.boldLabel;
+ m_headerStyle2 = EditorStyles.boldLabel;
+ }
+ }
+
+ private void SetGuiStyleFontColor(GUIStyle guiStyle, Color color)
+ {
+ guiStyle.normal .textColor = color;
+ guiStyle.hover .textColor = color;
+ guiStyle.active .textColor = color;
+ guiStyle.focused .textColor = color;
+ guiStyle.onNormal .textColor = color;
+ guiStyle.onHover .textColor = color;
+ guiStyle.onActive .textColor = color;
+ guiStyle.onFocused .textColor = color;
+ }
+
+ private string GetMonoScriptFilePath(ScriptableObject scriptableObject)
+ {
+ MonoScript ms = MonoScript.FromScriptableObject(scriptableObject);
+
+ string filePath = AssetDatabase.GetAssetPath(ms);
+
+ FileInfo fi = new FileInfo(filePath);
+
+ if (fi.Directory != null)
+ {
+ filePath = fi.Directory.ToString();
+
+ return filePath.Replace
+ (
+ oldChar: '\\',
+ newChar: '/'
+ );
+ }
+ return null;
+
+ }
+
+ private void SetDefaultDebugPacketValues(SerializedProperty debugPacketSerializedProperty)
+ {
+ GraphyDebugger.DebugPacket debugPacket = new GraphyDebugger.DebugPacket();
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex(debugPacketSerializedProperty.arraySize - 1)
+ .FindPropertyRelative("Active")
+ .boolValue = debugPacket.Active;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex(debugPacketSerializedProperty.arraySize - 1)
+ .FindPropertyRelative("Id")
+ .intValue = debugPacketSerializedProperty.arraySize;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex(debugPacketSerializedProperty.arraySize - 1)
+ .FindPropertyRelative("ExecuteOnce")
+ .boolValue = debugPacket.ExecuteOnce;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex(debugPacketSerializedProperty.arraySize - 1)
+ .FindPropertyRelative("InitSleepTime")
+ .floatValue = debugPacket.InitSleepTime;
+
+ debugPacketSerializedProperty.GetArrayElementAtIndex(debugPacketSerializedProperty.arraySize - 1)
+ .FindPropertyRelative("ExecuteSleepTime")
+ .floatValue = debugPacket.ExecuteSleepTime;
+ }
+
+ private string GetComparerStringFromDebugVariable(GraphyDebugger.DebugVariable debugVariable)
+ {
+ switch (debugVariable)
+ {
+ case GraphyDebugger.DebugVariable.Fps:
+ return "FPS Current";
+ case GraphyDebugger.DebugVariable.Fps_Min:
+ return "FPS Min";
+ case GraphyDebugger.DebugVariable.Fps_Max:
+ return "FPS Max";
+ case GraphyDebugger.DebugVariable.Fps_Avg:
+ return "FPS Avg";
+
+ case GraphyDebugger.DebugVariable.Ram_Allocated:
+ return "Ram Allocated";
+ case GraphyDebugger.DebugVariable.Ram_Reserved:
+ return "Ram Reserved";
+ case GraphyDebugger.DebugVariable.Ram_Mono:
+ return "Ram Mono";
+
+ case GraphyDebugger.DebugVariable.Audio_DB:
+ return "Audio DB";
+
+ default:
+ return null;
+
+ }
+ }
+
+ private string GetComparerStringFromDebugComparer(GraphyDebugger.DebugComparer debugComparer)
+ {
+ switch (debugComparer)
+ {
+ case GraphyDebugger.DebugComparer.Less_than:
+ return "<";
+ case GraphyDebugger.DebugComparer.Equals_or_less_than:
+ return "<=";
+ case GraphyDebugger.DebugComparer.Equals:
+ return "==";
+ case GraphyDebugger.DebugComparer.Equals_or_greater_than:
+ return ">=";
+ case GraphyDebugger.DebugComparer.Greater_than:
+ return ">";
+
+ default:
+ return null;
+ }
+ }
+
+ #endregion
+ }
+} \ No newline at end of file
diff --git a/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs.meta b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs.meta
new file mode 100644
index 0000000..576169a
--- /dev/null
+++ b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyDebuggerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4a96825e094d61441b5247d0c32652b3
+timeCreated: 1514907656
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs
new file mode 100644
index 0000000..c609189
--- /dev/null
+++ b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs
@@ -0,0 +1,961 @@
+/* ---------------------------------------
+ * Author: Martin Pane (martintayx@gmail.com) (@tayx94)
+ * Collaborators: Lars Aalbertsen (@Rockylars)
+ * Project: Graphy - Ultimate Stats Monitor
+ * Date: 20-Dec-17
+ * Studio: Tayx
+ *
+ * This project is released under the MIT license.
+ * Attribution is not required, but it is always welcomed!
+ * -------------------------------------*/
+
+using System;
+using UnityEngine;
+using System.IO;
+using UnityEditor;
+
+namespace Tayx.Graphy
+{
+ [CustomEditor(typeof(GraphyManager))]
+ internal class GraphyManagerEditor : Editor
+ {
+ /* ----- TODO: ----------------------------
+ * Add summaries to the variables.
+ * Add summaries to the functions.
+ * --------------------------------------*/
+
+ #region Variables -> Private
+
+ private GraphyManager m_target;
+
+ private GUISkin m_skin;
+
+ private GUIStyle m_headerStyle1;
+ private GUIStyle m_headerStyle2;
+
+ private Texture2D m_logoTexture;
+
+ private int[] m_spectrumSizeValues =
+ {
+ 128,
+ 256,
+ 512,
+ 1024,
+ 2048,
+ 4096,
+ 8192
+ };
+
+ #region Section -> Settings
+
+ private SerializedProperty m_graphyMode;
+
+ private SerializedProperty m_enableOnStartup;
+
+ private SerializedProperty m_keepAlive;
+
+ private SerializedProperty m_background;
+ private SerializedProperty m_backgroundColor;
+
+ private SerializedProperty m_enableHotkeys;
+
+ private SerializedProperty m_toggleModeKeyCode;
+ private SerializedProperty m_toggleModeCtrl;
+ private SerializedProperty m_toggleModeAlt;
+
+ private SerializedProperty m_toggleActiveKeyCode;
+ private SerializedProperty m_toggleActiveCtrl;
+ private SerializedProperty m_toggleActiveAlt;
+
+
+ private SerializedProperty m_graphModulePosition;
+
+ #endregion
+
+ #region Section -> FPS
+
+ private bool m_fpsModuleInspectorToggle = true;
+
+ private SerializedProperty m_fpsModuleState;
+
+ private SerializedProperty m_timeToResetMinMaxFps;
+
+ private SerializedProperty m_goodFpsColor;
+ private SerializedProperty m_goodFpsThreshold;
+
+ private SerializedProperty m_cautionFpsColor;
+ private SerializedProperty m_cautionFpsThreshold;
+
+ private SerializedProperty m_criticalFpsColor;
+
+ private SerializedProperty m_fpsGraphResolution;
+
+ private SerializedProperty m_fpsTextUpdateRate;
+
+ #endregion
+
+ #region Section -> RAM
+
+ private bool m_ramModuleInspectorToggle = true;
+
+ private SerializedProperty m_ramModuleState;
+
+ private SerializedProperty m_allocatedRamColor;
+ private SerializedProperty m_reservedRamColor;
+ private SerializedProperty m_monoRamColor;
+
+ private SerializedProperty m_ramGraphResolution;
+
+ private SerializedProperty m_ramTextUpdateRate;
+
+ #endregion
+
+ #region Section -> Audio
+
+ private bool m_audioModuleInspectorToggle = true;
+
+ private SerializedProperty m_findAudioListenerInCameraIfNull;
+
+ private SerializedProperty m_audioListener;
+
+ private SerializedProperty m_audioModuleState;
+
+ private SerializedProperty m_audioGraphColor;
+
+ private SerializedProperty m_audioGraphResolution;
+
+ private SerializedProperty m_audioTextUpdateRate;
+
+ private SerializedProperty m_FFTWindow;
+
+ private SerializedProperty m_spectrumSize;
+
+ #endregion
+
+ #region Section -> Advanced Settings
+
+ private bool m_advancedModuleInspectorToggle = true;
+
+ private SerializedProperty m_advancedModulePosition;
+
+ private SerializedProperty m_advancedModuleState;
+
+ #endregion
+
+ #endregion
+
+ #region Methods -> Unity Callbacks
+
+ private void OnEnable()
+ {
+ m_target = (GraphyManager)target;
+
+ SerializedObject serObj = serializedObject;
+
+ #region Section -> Settings
+
+ m_graphyMode = serObj.FindProperty("m_graphyMode");
+
+ m_enableOnStartup = serObj.FindProperty("m_enableOnStartup");
+
+ m_keepAlive = serObj.FindProperty("m_keepAlive");
+
+ m_background = serObj.FindProperty("m_background");
+ m_backgroundColor = serObj.FindProperty("m_backgroundColor");
+
+ m_enableHotkeys = serObj.FindProperty("m_enableHotkeys");
+
+ m_toggleModeKeyCode = serObj.FindProperty("m_toggleModeKeyCode");
+
+ m_toggleModeCtrl = serObj.FindProperty("m_toggleModeCtrl");
+ m_toggleModeAlt = serObj.FindProperty("m_toggleModeAlt");
+
+ m_toggleActiveKeyCode = serObj.FindProperty("m_toggleActiveKeyCode");
+
+ m_toggleActiveCtrl = serObj.FindProperty("m_toggleActiveCtrl");
+ m_toggleActiveAlt = serObj.FindProperty("m_toggleActiveAlt");
+
+ m_graphModulePosition = serObj.FindProperty("m_graphModulePosition");
+
+ #endregion
+
+ #region Section -> FPS
+
+ m_fpsModuleState = serObj.FindProperty("m_fpsModuleState");
+
+ m_timeToResetMinMaxFps = serObj.FindProperty("m_timeToResetMinMaxFps");
+
+ m_goodFpsColor = serObj.FindProperty("m_goodFpsColor");
+ m_goodFpsThreshold = serObj.FindProperty("m_goodFpsThreshold");
+
+ m_cautionFpsColor = serObj.FindProperty("m_cautionFpsColor");
+ m_cautionFpsThreshold = serObj.FindProperty("m_cautionFpsThreshold");
+
+ m_criticalFpsColor = serObj.FindProperty("m_criticalFpsColor");
+
+ m_fpsGraphResolution = serObj.FindProperty("m_fpsGraphResolution");
+
+ m_fpsTextUpdateRate = serObj.FindProperty("m_fpsTextUpdateRate");
+
+ #endregion
+
+ #region Section -> RAM
+
+ m_ramModuleState = serObj.FindProperty("m_ramModuleState");
+
+ m_allocatedRamColor = serObj.FindProperty("m_allocatedRamColor");
+ m_reservedRamColor = serObj.FindProperty("m_reservedRamColor");
+ m_monoRamColor = serObj.FindProperty("m_monoRamColor");
+
+ m_ramGraphResolution = serObj.FindProperty("m_ramGraphResolution");
+
+ m_ramTextUpdateRate = serObj.FindProperty("m_ramTextUpdateRate");
+
+ #endregion
+
+ #region Section -> Audio
+
+ m_findAudioListenerInCameraIfNull = serObj.FindProperty("m_findAudioListenerInCameraIfNull");
+
+ m_audioListener = serObj.FindProperty("m_audioListener");
+
+ m_audioModuleState = serObj.FindProperty("m_audioModuleState");
+
+ m_audioGraphColor = serObj.FindProperty("m_audioGraphColor");
+
+ m_audioGraphResolution = serObj.FindProperty("m_audioGraphResolution");
+
+ m_audioTextUpdateRate = serObj.FindProperty("m_audioTextUpdateRate");
+
+ m_FFTWindow = serObj.FindProperty("m_FFTWindow");
+
+ m_spectrumSize = serObj.FindProperty("m_spectrumSize");
+
+ #endregion
+
+ #region Section -> Advanced Settings
+
+ m_advancedModulePosition = serObj.FindProperty("m_advancedModulePosition");
+
+ m_advancedModuleState = serObj.FindProperty("m_advancedModuleState");
+
+ #endregion
+
+ }
+
+ #endregion
+
+ #region Methods -> Public Override
+
+ public override void OnInspectorGUI()
+ {
+ if (m_target == null && target == null)
+ {
+ base.OnInspectorGUI();
+ return;
+ }
+
+ LoadGuiStyles();
+
+ float defaultLabelWidth = EditorGUIUtility.labelWidth;
+ float defaultFieldWidth = EditorGUIUtility.fieldWidth;
+
+ GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout)
+ {
+ font = m_headerStyle2.font,
+ fontStyle = m_headerStyle2.fontStyle,
+ contentOffset = Vector2.down * 3f //TODO: Maybe replace this with "new Vector2(0f, -3f);"
+ };
+
+ SetGuiStyleFontColor
+ (
+ guiStyle: foldoutStyle,
+ color: EditorGUIUtility.isProSkin ? Color.white : Color.black
+ );
+
+ //===== CONTENT REGION ========================================================================
+
+ GUILayout.Space(20);
+
+ #region Section -> Logo
+
+ if (m_logoTexture != null)
+ {
+ GUILayout.Label
+ (
+ image: m_logoTexture,
+ style: new GUIStyle(GUI.skin.GetStyle("Label"))
+ {
+ alignment = TextAnchor.UpperCenter
+ }
+ );
+
+ GUILayout.Space(10);
+ }
+ else
+ {
+ EditorGUILayout.LabelField
+ (
+ label: "[ GRAPHY - MANAGER ]",
+ style: m_headerStyle1
+ );
+ }
+
+ #endregion
+
+ GUILayout.Space(5); //Extra pixels added when the logo is used.
+
+ #region Section -> Settings
+
+ EditorGUIUtility.labelWidth = 130;
+ EditorGUIUtility.fieldWidth = 35;
+
+ EditorGUILayout.PropertyField
+ (
+ m_graphyMode,
+ new GUIContent
+ (
+ text: "Graphy Mode",
+ tooltip: "LIGHT mode increases compatibility with mobile and older, less powerful GPUs, but reduces the maximum graph resolutions to 128."
+ )
+ );
+
+ GUILayout.Space(10);
+
+ m_enableOnStartup.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Enable On Startup",
+ tooltip: "If ticked, Graphy will be displayed by default on startup, otherwise it will initiate and hide."
+ ),
+ value: m_enableOnStartup.boolValue
+ );
+
+ // This is a neat trick to hide Graphy in the Scene if it's going to be deactivated in play mode so that it doesn't use screen space.
+ if (!Application.isPlaying)
+ {
+ m_target.GetComponent<Canvas>().enabled = m_enableOnStartup.boolValue;
+ }
+
+ m_keepAlive.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Keep Alive",
+ tooltip: "If ticked, it will survive scene changes.\n\nCAREFUL, if you set Graphy as a child of another GameObject, the root GameObject will also survive scene changes. If you want to avoid that put Graphy in the root of the Scene as its own entity."
+ ),
+ value: m_keepAlive.boolValue
+ );
+
+ GUILayout.Space(10);
+
+ EditorGUILayout.BeginHorizontal();
+
+ m_background.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Background",
+ tooltip: "If ticked, it will show a background overlay to improve readability in cluttered scenes."
+ ),
+ value: m_background.boolValue
+ );
+
+ m_backgroundColor.colorValue = EditorGUILayout.ColorField(m_backgroundColor.colorValue);
+
+ EditorGUILayout.EndHorizontal();
+
+ GUILayout.Space(10);
+
+ m_enableHotkeys.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Enable Hotkeys",
+ tooltip: "If ticked, it will enable the hotkeys to be able to modify Graphy in runtime with custom keyboard shortcuts."
+ ),
+ value: m_enableHotkeys.boolValue
+ );
+
+ if (m_enableHotkeys.boolValue)
+ {
+ EditorGUILayout.BeginHorizontal();
+
+ EditorGUIUtility.labelWidth = 130;
+ EditorGUIUtility.fieldWidth = 35;
+
+ EditorGUILayout.PropertyField
+ (
+ m_toggleModeKeyCode,
+ new GUIContent
+ (
+ text: "Toggle Mode Key",
+ tooltip: "If ticked, it will require clicking this key and the other ones you have set up."
+ )
+ );
+
+ EditorGUIUtility.labelWidth = 30;
+ EditorGUIUtility.fieldWidth = 35;
+
+ m_toggleModeCtrl.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Ctrl",
+ tooltip: "If ticked, it will require clicking Ctrl and the other keys you have set up."
+ ),
+ value: m_toggleModeCtrl.boolValue
+ );
+
+ m_toggleModeAlt.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Alt",
+ tooltip: "If ticked, it will require clicking Alt and the other keys you have set up."
+ ),
+ value: m_toggleModeAlt.boolValue
+ );
+
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.BeginHorizontal();
+
+ EditorGUIUtility.labelWidth = 130;
+ EditorGUIUtility.fieldWidth = 35;
+
+ EditorGUILayout.PropertyField
+ (
+ m_toggleActiveKeyCode,
+ new GUIContent
+ (
+ text: "Toggle Active Key",
+ tooltip: "If ticked, it will require clicking this key and the other ones you have set up."
+ )
+ );
+
+ EditorGUIUtility.labelWidth = 30;
+ EditorGUIUtility.fieldWidth = 35;
+
+ m_toggleActiveCtrl.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Ctrl",
+ tooltip: "If ticked, it will require clicking Ctrl and the other kesy you have set up."
+ ),
+ value: m_toggleActiveCtrl.boolValue
+ );
+
+ m_toggleActiveAlt.boolValue = EditorGUILayout.Toggle
+ (
+ new GUIContent
+ (
+ text: "Alt",
+ tooltip: "If ticked, it will require clicking Alt and the other keys you have set up."
+ ),
+ value: m_toggleActiveAlt.boolValue
+ );
+
+ EditorGUILayout.EndHorizontal();
+ }
+
+ GUILayout.Space(15);
+
+ EditorGUIUtility.labelWidth = 155;
+ EditorGUIUtility.fieldWidth = 35;
+
+ EditorGUILayout.PropertyField
+ (
+ m_graphModulePosition,
+ new GUIContent
+ (
+ text: "Graph modules position",
+ tooltip: "Defines in which corner the modules will be located."
+ )
+ );
+
+ #endregion
+
+ GUILayout.Space(20);
+
+ #region Section -> FPS
+
+ m_fpsModuleInspectorToggle = EditorGUILayout.Foldout
+ (
+ m_fpsModuleInspectorToggle,
+ content: " [ FPS ]",
+ style: foldoutStyle
+ );
+
+ GUILayout.Space(5);
+
+ if (m_fpsModuleInspectorToggle)
+ {
+ EditorGUILayout.PropertyField
+ (
+ m_fpsModuleState,
+ new GUIContent
+ (
+ text: "Module state",
+ tooltip: "FULL -> Text + Graph \nTEXT -> Just text \nOFF -> Turned off"
+ )
+ );
+
+ GUILayout.Space(5);
+
+ EditorGUILayout.LabelField("Fps thresholds and colors:");
+
+ EditorGUI.indentLevel++;
+
+ EditorGUILayout.BeginHorizontal();
+
+ m_goodFpsThreshold.intValue = EditorGUILayout.IntField
+ (
+ new GUIContent
+ (
+ text: "- Good",
+ tooltip: "When FPS rise above this value, this color will be used."
+ ),
+ value: m_goodFpsThreshold.intValue
+ );
+
+ m_goodFpsColor.colorValue = EditorGUILayout.ColorField(m_goodFpsColor.colorValue);
+
+ EditorGUILayout.EndHorizontal();
+
+ if (m_goodFpsThreshold.intValue <= m_cautionFpsThreshold.intValue && m_goodFpsThreshold.intValue > 1)
+ {
+ m_cautionFpsThreshold.intValue = m_goodFpsThreshold.intValue - 1;
+ }
+ else if (m_goodFpsThreshold.intValue <= 1)
+ {
+ m_goodFpsThreshold.intValue = 2;
+ }
+
+ EditorGUILayout.BeginHorizontal();
+
+ m_cautionFpsThreshold.intValue = EditorGUILayout.IntField
+ (
+ new GUIContent
+ (
+ text: "- Caution",
+ tooltip: "When FPS falls between this and the Good value, this color will be used."
+ ),
+ value: m_cautionFpsThreshold.intValue
+ );
+
+ m_cautionFpsColor.colorValue = EditorGUILayout.ColorField(m_cautionFpsColor.colorValue);
+
+ EditorGUILayout.EndHorizontal();
+
+ if (m_cautionFpsThreshold.intValue >= m_goodFpsThreshold.intValue)
+ {
+ m_cautionFpsThreshold.intValue = m_goodFpsThreshold.intValue - 1;
+ }
+ else if (m_cautionFpsThreshold.intValue <= 0)
+ {
+ m_cautionFpsThreshold.intValue = 1;
+ }
+
+ EditorGUILayout.BeginHorizontal();
+
+ EditorGUILayout.IntField
+ (
+ new GUIContent
+ (
+ text: "- Critical",
+ tooltip: "When FPS falls below the Caution value, this color will be used. (You can't have negative FPS, so this value is just for reference, it can't be changed)."
+ ),
+ value: 0
+ );
+
+ m_criticalFpsColor.colorValue = EditorGUILayout.ColorField(m_criticalFpsColor.colorValue);
+
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUI.indentLevel--;
+
+ if (m_fpsModuleState.intValue == 0)
+ {
+ m_fpsGraphResolution.intValue = EditorGUILayout.IntSlider
+ (
+ new GUIContent
+ (
+ text: "Graph resolution",
+ tooltip: "Defines the amount of points in the graph"
+ ),
+ m_fpsGraphResolution.intValue,
+ leftValue: 20,
+ rightValue: m_graphyMode.intValue == 0 ? 300 : 128
+ );
+ }
+
+ EditorGUIUtility.labelWidth = 180;
+ EditorGUIUtility.fieldWidth = 35;
+
+ m_timeToResetMinMaxFps.intValue = EditorGUILayout.IntSlider
+ (
+ new GUIContent
+ (
+ text: "Time to reset min/max values",
+ tooltip: "If the min/max value doesn't change in the specified time, they will be reset. This allows tracking the min/max fps in a shorter interval. \n\nSet it to 0 if you don't want it to reset."
+ ),
+ m_timeToResetMinMaxFps.intValue,
+ leftValue: 0,
+ rightValue: 120
+ );
+
+ EditorGUIUtility.labelWidth = 155;
+ EditorGUIUtility.fieldWidth = 35;
+
+ m_fpsTextUpdateRate.intValue = EditorGUILayout.IntSlider
+ (
+ new GUIContent
+ (
+ text: "Text update rate",
+ tooltip: "Defines the amount times the text is updated in 1 second."
+ ),
+ m_fpsTextUpdateRate.intValue,
+ leftValue: 1,
+ rightValue: 60
+ );
+ }
+
+ #endregion
+
+ GUILayout.Space(20);
+
+ #region Section -> RAM
+
+ m_ramModuleInspectorToggle = EditorGUILayout.Foldout
+ (
+ m_ramModuleInspectorToggle,
+ content: " [ RAM ]",
+ style: foldoutStyle
+ );
+
+ GUILayout.Space(5);
+
+ if (m_ramModuleInspectorToggle)
+ {
+ EditorGUILayout.PropertyField
+ (
+ m_ramModuleState,
+ new GUIContent
+ (
+ text: "Module state",
+ tooltip: "FULL -> Text + Graph \nTEXT -> Just text \nOFF -> Turned off"
+ )
+ );
+
+ GUILayout.Space(5);
+
+ EditorGUILayout.LabelField("Graph colors:");
+
+ EditorGUI.indentLevel++;
+
+ m_allocatedRamColor.colorValue = EditorGUILayout.ColorField
+ (
+ label: "- Allocated",
+ value: m_allocatedRamColor.colorValue
+ );
+
+ m_reservedRamColor.colorValue = EditorGUILayout.ColorField
+ (
+ label: "- Reserved",
+ value: m_reservedRamColor.colorValue
+ );
+
+ m_monoRamColor.colorValue = EditorGUILayout.ColorField
+ (
+ label: "- Mono",
+ value: m_monoRamColor.colorValue
+ );
+
+ EditorGUI.indentLevel--;
+
+ if (m_ramModuleState.intValue == 0)
+ {
+ m_ramGraphResolution.intValue = EditorGUILayout.IntSlider(
+ new GUIContent
+ (
+ text: "Graph resolution",
+ tooltip: "Defines the amount of points are in the graph"
+ ),
+ m_ramGraphResolution.intValue,
+ leftValue: 20,
+ rightValue: m_graphyMode.intValue == 0 ? 300 : 128
+ );
+ }
+
+ m_ramTextUpdateRate.intValue = EditorGUILayout.IntSlider
+ (
+ new GUIContent
+ (
+ text: "Text update rate",
+ tooltip: "Defines the amount times the text is updated in 1 second."
+ ),
+ m_ramTextUpdateRate.intValue,
+ leftValue: 1,
+ rightValue: 60
+ );
+ }
+
+ #endregion
+
+ GUILayout.Space(20);
+
+ #region Section -> Audio
+
+ m_audioModuleInspectorToggle = EditorGUILayout.Foldout
+ (
+ m_audioModuleInspectorToggle,
+ content: " [ AUDIO ]",
+ style: foldoutStyle
+ );
+
+ GUILayout.Space(5);
+
+ if (m_audioModuleInspectorToggle)
+ {
+ EditorGUILayout.PropertyField
+ (
+ m_audioModuleState,
+ new GUIContent
+ (
+ text: "Module state",
+ tooltip: "FULL -> Text + Graph \nTEXT -> Just text \nOFF -> Turned off"
+ )
+ );
+
+ GUILayout.Space(5);
+
+ EditorGUILayout.PropertyField
+ (
+ m_findAudioListenerInCameraIfNull,
+ new GUIContent
+ (
+ text: "Find audio listener",
+ tooltip: "Tries to find the AudioListener in the Main camera in the scene. (if AudioListener is null)"
+ )
+ );
+
+ EditorGUILayout.PropertyField
+ (
+ m_audioListener,
+ new GUIContent
+ (
+ text: "Audio Listener",
+ tooltip: "Graphy will take the data from this Listener. If none are specified, it will try to get it from the Main Camera in the scene."
+ )
+ );
+
+ if (m_audioModuleState.intValue == 0)
+ {
+ m_audioGraphColor.colorValue = EditorGUILayout.ColorField
+ (
+ label: "Graph color",
+ value: m_audioGraphColor.colorValue
+ );
+
+ m_audioGraphResolution.intValue = EditorGUILayout.IntSlider
+ (
+ new GUIContent
+ (
+ text: "Graph resolution",
+ tooltip: "Defines the amount of points that are in the graph."
+ ),
+ m_audioGraphResolution.intValue,
+ leftValue: 20,
+ rightValue: m_graphyMode.intValue == 0 ? 300 : 128
+ );
+
+ // Forces the value to be a multiple of 3, this way the audio graph is painted correctly
+ if (m_audioGraphResolution.intValue % 3 != 0 && m_audioGraphResolution.intValue < 300)
+ {
+ m_audioGraphResolution.intValue += 3 - m_audioGraphResolution.intValue % 3;
+ }
+ //TODO: Figure out why a static version of the ForceMultipleOf3 isnt used.
+ }
+
+ EditorGUILayout.PropertyField
+ (
+ m_FFTWindow,
+ new GUIContent
+ (
+ text: "FFT Window",
+ tooltip: "Used to reduce leakage between frequency bins/bands. Note, the more complex window type, the better the quality, but reduced speed. \n\nSimplest is rectangular. Most complex is BlackmanHarris"
+ )
+ );
+
+ m_spectrumSize.intValue = EditorGUILayout.IntSlider
+ (
+ new GUIContent
+ (
+ text: "Spectrum size",
+ tooltip: "Has to be a power of 2 between 128-8192. The higher sample rate, the less precision but also more impact on performance. Careful with mobile devices"
+ ),
+ m_spectrumSize.intValue,
+ leftValue: 128,
+ rightValue: 8192
+ );
+
+ int closestSpectrumIndex = 0;
+ int minDistanceToSpectrumValue = 100000;
+
+ for (int i = 0; i < m_spectrumSizeValues.Length; i++)
+ {
+ int newDistance = Mathf.Abs
+ (
+ value: m_spectrumSize.intValue - m_spectrumSizeValues[i]
+ );
+
+ if (newDistance < minDistanceToSpectrumValue)
+ {
+ minDistanceToSpectrumValue = newDistance;
+ closestSpectrumIndex = i;
+ }
+ }
+
+ m_spectrumSize.intValue = m_spectrumSizeValues[closestSpectrumIndex];
+
+ m_audioTextUpdateRate.intValue = EditorGUILayout.IntSlider
+ (
+ new GUIContent
+ (
+ text: "Text update rate",
+ tooltip: "Defines the amount times the text is updated in 1 second"
+ ),
+ m_audioTextUpdateRate.intValue,
+ leftValue: 1,
+ rightValue: 60
+ );
+ }
+
+ #endregion
+
+ GUILayout.Space(20);
+
+ #region Section -> Advanced Settings
+
+ m_advancedModuleInspectorToggle = EditorGUILayout.Foldout
+ (
+ m_advancedModuleInspectorToggle,
+ content: " [ ADVANCED DATA ]",
+ style: foldoutStyle
+ );
+
+ GUILayout.Space(5);
+
+ if (m_advancedModuleInspectorToggle)
+ {
+ EditorGUILayout.PropertyField(m_advancedModulePosition);
+
+ EditorGUILayout.PropertyField
+ (
+ m_advancedModuleState,
+ new GUIContent
+ (
+ text: "Module state",
+ tooltip: "FULL -> Text \nOFF -> Turned off"
+ )
+ );
+ }
+
+ #endregion;
+
+ EditorGUIUtility.labelWidth = defaultLabelWidth;
+ EditorGUIUtility.fieldWidth = defaultFieldWidth;
+
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ #endregion
+
+ #region Methods -> Private
+
+ private void LoadGuiStyles()
+ {
+ string path = GetMonoScriptFilePath(this);
+
+ path = path.Split(separator: new string[] { "Assets" }, options: StringSplitOptions.None)[1]
+ .Split(separator: new string[] { "Tayx" }, options: StringSplitOptions.None)[0];
+
+ m_logoTexture = AssetDatabase.LoadAssetAtPath<Texture2D>
+ (
+ "Assets" +
+ path +
+ "Tayx/Graphy - Ultimate Stats Monitor/Textures/Manager_Logo_" +
+ (EditorGUIUtility.isProSkin ? "White.png" : "Dark.png")
+ );
+
+ m_skin = AssetDatabase.LoadAssetAtPath<GUISkin>
+ (
+ "Assets" +
+ path +
+ "Tayx/Graphy - Ultimate Stats Monitor/GUI/Graphy.guiskin"
+ );
+
+ if (m_skin != null)
+ {
+ m_headerStyle1 = m_skin.GetStyle("Header1");
+ m_headerStyle2 = m_skin.GetStyle("Header2");
+
+ SetGuiStyleFontColor
+ (
+ guiStyle: m_headerStyle2,
+ color: EditorGUIUtility.isProSkin ? Color.white : Color.black
+ );
+ }
+ else
+ {
+ m_headerStyle1 = EditorStyles.boldLabel;
+ m_headerStyle2 = EditorStyles.boldLabel;
+ }
+ }
+
+ /// <summary>
+ /// Sets the colors of the GUIStyle's text.
+ /// </summary>
+ /// <param name="guiStyle">
+ /// The GUIStyle to be altered.
+ /// </param>
+ /// <param name="color">
+ /// The color for the text.
+ /// </param>
+ private void SetGuiStyleFontColor(GUIStyle guiStyle, Color color) //TODO: Perhaps add a null check.
+ {
+ guiStyle.normal .textColor = color;
+ guiStyle.hover .textColor = color;
+ guiStyle.active .textColor = color;
+ guiStyle.focused .textColor = color;
+ guiStyle.onNormal .textColor = color;
+ guiStyle.onHover .textColor = color;
+ guiStyle.onActive .textColor = color;
+ guiStyle.onFocused .textColor = color;
+ }
+
+ private string GetMonoScriptFilePath(ScriptableObject scriptableObject) //TODO: Perhaps add a null check.
+ {
+ MonoScript ms = MonoScript.FromScriptableObject(scriptableObject);
+ string filePath = AssetDatabase.GetAssetPath(ms);
+
+ FileInfo fi = new FileInfo(filePath);
+
+ if (fi.Directory != null)
+ {
+ filePath = fi.Directory.ToString();
+ return filePath.Replace
+ (
+ oldChar: '\\',
+ newChar: '/'
+ );
+ }
+ return null;
+ }
+
+ #endregion
+ }
+} \ No newline at end of file
diff --git a/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs.meta b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs.meta
new file mode 100644
index 0000000..0d1145c
--- /dev/null
+++ b/Assets/Thirdparty/Tayx/Graphy - Ultimate Stats Monitor/Scripts/Editor/GraphyManagerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f01a5c28e5127404da343db2a7409c10
+timeCreated: 1513764399
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: