The fucking 3rd time i had to upload this project to git

This commit is contained in:
Madhav Kapa
2023-10-06 20:18:29 -04:00
commit 5658acfe16
2689 changed files with 1259400 additions and 0 deletions

View File

@ -0,0 +1,552 @@
/* ---------------------------------------
* Author: Martin Pane (martintayx@gmail.com) (@tayx94)
* Contributors: https://github.com/Tayx94/graphy/graphs/contributors
* Project: Graphy - Ultimate Stats Monitor
* Date: 02-Jan-18
* Studio: Tayx
*
* Git repo: https://github.com/Tayx94/graphy
*
* This project is released under the MIT license.
* Attribution is not required, but it is always welcomed!
* -------------------------------------*/
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace Tayx.Graphy
{
[CustomEditor(typeof(GraphyDebugger))]
internal class GraphyDebuggerEditor : Editor
{
#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;
}
var defaultLabelWidth = EditorGUIUtility.labelWidth;
var defaultFieldWidth = EditorGUIUtility.fieldWidth;
//===== CONTENT REGION ========================================================================
GUILayout.Space(20);
#region Section -> Logo
if (GraphyEditorStyle.DebuggerLogoTexture != null)
{
GUILayout.Label
(
GraphyEditorStyle.DebuggerLogoTexture,
new GUIStyle(GUI.skin.GetStyle("Label"))
{
alignment = TextAnchor.UpperCenter
}
);
GUILayout.Space(10);
}
else
{
EditorGUILayout.LabelField
(
"[ GRAPHY - DEBUGGER ]",
GraphyEditorStyle.HeaderStyle1
);
}
#endregion
GUILayout.Space(5); //Extra pixels added when the logo is used.
#region Section -> Settings
var serObj = serializedObject;
var 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
(
"Define a new list size",
m_newDebugPacketListSize
);
if (GUILayout.Button("Resize List"))
if (EditorUtility.DisplayDialog
(
"Resize List",
"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.",
"Resize",
"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;
}
GraphyEditorStyle.HeaderStyle2.contentOffset = Vector2.down * 3f;
EditorGUILayout.LabelField("Selected debug packet:");
EditorGUILayout.BeginHorizontal();
var debugPacketNames = new List<string>();
for (var i = 0; i < debugPacketList.arraySize; i++)
{
var listItem = debugPacketList.GetArrayElementAtIndex(i);
// NOTE: If the Popup detects two equal strings, it just paints 1, that's why I always add the "i"
var 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;
}
var 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
var listItemSelected = debugPacketList.GetArrayElementAtIndex(m_currentlySelectedDebugPacketIndex);
var Active = listItemSelected.FindPropertyRelative("Active");
var Id = listItemSelected.FindPropertyRelative("Id");
var ExecuteOnce = listItemSelected.FindPropertyRelative("ExecuteOnce");
var InitSleepTime = listItemSelected.FindPropertyRelative("InitSleepTime");
var ExecuteSleepTime = listItemSelected.FindPropertyRelative("ExecuteSleepTime");
var ConditionEvaluation = listItemSelected.FindPropertyRelative("ConditionEvaluation");
var DebugConditions = listItemSelected.FindPropertyRelative("DebugConditions");
var MessageType = listItemSelected.FindPropertyRelative("MessageType");
var Message = listItemSelected.FindPropertyRelative("Message");
var TakeScreenshot = listItemSelected.FindPropertyRelative("TakeScreenshot");
var ScreenshotFileName = listItemSelected.FindPropertyRelative("ScreenshotFileName");
var DebugBreak = listItemSelected.FindPropertyRelative("DebugBreak");
var UnityEvents = listItemSelected.FindPropertyRelative("UnityEvents");
#endregion
EditorGUILayout.LabelField
(
"[ PACKET ] - ID: " +
Id.intValue +
" (Conditions: " +
DebugConditions.arraySize +
")",
GraphyEditorStyle.HeaderStyle2
);
EditorGUIUtility.labelWidth = 150;
EditorGUIUtility.fieldWidth = 35;
Active.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Active",
"If false, it will not be checked"
),
Active.boolValue
);
Id.intValue = EditorGUILayout.IntField
(
new GUIContent
(
"ID",
"Optional Id. It's used to get or remove DebugPackets in runtime"
),
Id.intValue
);
ExecuteOnce.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Execute once",
"If true, once the actions are executed, this DebugPacket will delete itself"
),
ExecuteOnce.boolValue
);
InitSleepTime.floatValue = EditorGUILayout.FloatField
(
new GUIContent
(
"Init sleep time",
"Time to wait before checking if conditions are met (use this to avoid low fps drops triggering the conditions when loading the game)"
),
InitSleepTime.floatValue
);
ExecuteSleepTime.floatValue = EditorGUILayout.FloatField
(
new GUIContent
(
"Sleep time after execute",
"Time to wait before checking if conditions are met again (once they have already been met and if ExecuteOnce is false)"
),
ExecuteSleepTime.floatValue
);
EditorGUIUtility.labelWidth = defaultLabelWidth;
EditorGUIUtility.fieldWidth = defaultFieldWidth;
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.LabelField("[ CONDITIONS ] (" + DebugConditions.arraySize + ")",
GraphyEditorStyle.HeaderStyle2);
EditorGUILayout.PropertyField
(
ConditionEvaluation,
new GUIContent("Condition evaluation")
);
EditorGUILayout.Space();
if (DebugConditions.arraySize < 1)
{
DebugConditions.InsertArrayElementAtIndex(DebugConditions.arraySize);
m_selectedDebugPacketCondition = 0;
}
EditorGUILayout.BeginHorizontal();
var debugPacketConditionNames = new List<string>();
for (var i = 0; i < DebugConditions.arraySize; i++)
{
var listItem = DebugConditions.GetArrayElementAtIndex(i);
// NOTE: If the Popup detects two equal strings, it just paints 1, that's why I always add the "i"
var conditionName = i + 1 + " - ";
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();
var conditionListItemSelected = DebugConditions.GetArrayElementAtIndex(m_selectedDebugPacketCondition);
var Variable = conditionListItemSelected.FindPropertyRelative("Variable");
var Comparer = conditionListItemSelected.FindPropertyRelative("Comparer");
var 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 ]", GraphyEditorStyle.HeaderStyle2);
EditorGUIUtility.labelWidth = 140;
EditorGUIUtility.fieldWidth = 35;
EditorGUILayout.PropertyField
(
MessageType,
new GUIContent("Message type")
);
EditorGUILayout.PropertyField(Message);
TakeScreenshot.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Take screenshot",
"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."
),
TakeScreenshot.boolValue
);
if (TakeScreenshot.boolValue)
EditorGUILayout.PropertyField
(
ScreenshotFileName,
new GUIContent
(
"Screenshot file name",
"Avoid this characters: * . \" / \\ [ ] : ; | = , \n\nIt will have the date appended at the end to avoid overwriting."
)
);
DebugBreak.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Debug Break",
"If true, it pauses the editor"
),
DebugBreak.boolValue
);
EditorGUILayout.PropertyField(UnityEvents);
EditorGUIUtility.labelWidth = defaultLabelWidth;
EditorGUIUtility.fieldWidth = defaultFieldWidth;
serializedObject.ApplyModifiedProperties();
}
#endregion
/* ----- 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;
private int m_previouslySelectedDebugPacketIndex;
private int m_currentlySelectedDebugPacketIndex;
private int m_selectedDebugPacketCondition;
#endregion
#region Methods -> Private
private void SetDefaultDebugPacketValues(SerializedProperty debugPacketSerializedProperty)
{
var 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
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 4a96825e094d61441b5247d0c32652b3
timeCreated: 1514907656
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,117 @@
/* ---------------------------------------
* Author: Martin Pane (martintayx@gmail.com) (@tayx94)
* Contributors: https://github.com/Tayx94/graphy/graphs/contributors
* Project: Graphy - Ultimate Stats Monitor
* Date: 02-Jan-18
* Studio: Tayx
*
* Git repo: https://github.com/Tayx94/graphy
*
* This project is released under the MIT license.
* Attribution is not required, but it is always welcomed!
* -------------------------------------*/
using UnityEditor;
using UnityEngine;
namespace Tayx.Graphy
{
internal static class GraphyEditorStyle
{
#region Static Constructor
static GraphyEditorStyle()
{
var managerLogoGuid =
AssetDatabase.FindAssets($"Manager_Logo_{(EditorGUIUtility.isProSkin ? "White" : "Dark")}")[0];
var debuggerLogoGuid =
AssetDatabase.FindAssets($"Debugger_Logo_{(EditorGUIUtility.isProSkin ? "White" : "Dark")}")[0];
var guiSkinGuid = AssetDatabase.FindAssets("GraphyGUISkin")[0];
ManagerLogoTexture = AssetDatabase.LoadAssetAtPath<Texture2D>
(
AssetDatabase.GUIDToAssetPath(managerLogoGuid)
);
DebuggerLogoTexture = AssetDatabase.LoadAssetAtPath<Texture2D>
(
AssetDatabase.GUIDToAssetPath(debuggerLogoGuid)
);
Skin = AssetDatabase.LoadAssetAtPath<GUISkin>
(
AssetDatabase.GUIDToAssetPath(guiSkinGuid)
);
if (Skin != null)
{
HeaderStyle1 = Skin.GetStyle("Header1");
HeaderStyle2 = Skin.GetStyle("Header2");
SetGuiStyleFontColor
(
HeaderStyle2,
EditorGUIUtility.isProSkin ? Color.white : Color.black
);
}
else
{
HeaderStyle1 = EditorStyles.boldLabel;
HeaderStyle2 = EditorStyles.boldLabel;
}
FoldoutStyle = new GUIStyle(EditorStyles.foldout)
{
font = HeaderStyle2.font,
fontStyle = HeaderStyle2.fontStyle,
contentOffset = Vector2.down * 3f
};
SetGuiStyleFontColor
(
FoldoutStyle,
EditorGUIUtility.isProSkin ? Color.white : Color.black
);
}
#endregion
#region Methods -> Private
private static 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;
}
#endregion
#region Variables -> Private
private static string path;
#endregion
#region Properties -> Public
public static Texture2D ManagerLogoTexture { get; }
public static Texture2D DebuggerLogoTexture { get; }
public static GUISkin Skin { get; }
public static GUIStyle HeaderStyle1 { get; }
public static GUIStyle HeaderStyle2 { get; }
public static GUIStyle FoldoutStyle { get; }
#endregion
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1bb06e7c222a60f47a476e2648224330
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,817 @@
/* ---------------------------------------
* Author: Martin Pane (martintayx@gmail.com) (@tayx94)
* Contributors: https://github.com/Tayx94/graphy/graphs/contributors
* Project: Graphy - Ultimate Stats Monitor
* Date: 20-Dec-17
* Studio: Tayx
*
* Git repo: https://github.com/Tayx94/graphy
*
* This project is released under the MIT license.
* Attribution is not required, but it is always welcomed!
* -------------------------------------*/
using UnityEditor;
using UnityEngine;
namespace Tayx.Graphy
{
[CustomEditor(typeof(GraphyManager))]
internal class GraphyManagerEditor : Editor
{
#region Methods -> Unity Callbacks
private void OnEnable()
{
m_target = (GraphyManager)target;
var 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_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;
}
var defaultLabelWidth = EditorGUIUtility.labelWidth;
var defaultFieldWidth = EditorGUIUtility.fieldWidth;
//===== CONTENT REGION ========================================================================
GUILayout.Space(20);
#region Section -> Logo
if (GraphyEditorStyle.ManagerLogoTexture != null)
{
GUILayout.Label
(
GraphyEditorStyle.ManagerLogoTexture,
new GUIStyle(GUI.skin.GetStyle("Label"))
{
alignment = TextAnchor.UpperCenter
}
);
GUILayout.Space(10);
}
else
{
EditorGUILayout.LabelField
(
"[ GRAPHY - MANAGER ]",
GraphyEditorStyle.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
(
"Graphy Mode",
"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
(
"Enable On Startup",
"If ticked, Graphy will be displayed by default on startup, otherwise it will initiate and hide."
),
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
(
"Keep Alive",
"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."
),
m_keepAlive.boolValue
);
GUILayout.Space(10);
EditorGUILayout.BeginHorizontal();
m_background.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Background",
"If ticked, it will show a background overlay to improve readability in cluttered scenes."
),
m_background.boolValue
);
m_backgroundColor.colorValue = EditorGUILayout.ColorField(m_backgroundColor.colorValue);
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
m_enableHotkeys.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Enable Hotkeys",
"If ticked, it will enable the hotkeys to be able to modify Graphy in runtime with custom keyboard shortcuts."
),
m_enableHotkeys.boolValue
);
if (m_enableHotkeys.boolValue)
{
EditorGUILayout.BeginHorizontal();
EditorGUIUtility.labelWidth = 130;
EditorGUIUtility.fieldWidth = 35;
EditorGUILayout.PropertyField
(
m_toggleModeKeyCode,
new GUIContent
(
"Toggle Mode Key",
"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
(
"Ctrl",
"If ticked, it will require clicking Ctrl and the other keys you have set up."
),
m_toggleModeCtrl.boolValue
);
m_toggleModeAlt.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Alt",
"If ticked, it will require clicking Alt and the other keys you have set up."
),
m_toggleModeAlt.boolValue
);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUIUtility.labelWidth = 130;
EditorGUIUtility.fieldWidth = 35;
EditorGUILayout.PropertyField
(
m_toggleActiveKeyCode,
new GUIContent
(
"Toggle Active Key",
"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
(
"Ctrl",
"If ticked, it will require clicking Ctrl and the other kesy you have set up."
),
m_toggleActiveCtrl.boolValue
);
m_toggleActiveAlt.boolValue = EditorGUILayout.Toggle
(
new GUIContent
(
"Alt",
"If ticked, it will require clicking Alt and the other keys you have set up."
),
m_toggleActiveAlt.boolValue
);
EditorGUILayout.EndHorizontal();
}
GUILayout.Space(15);
EditorGUIUtility.labelWidth = 155;
EditorGUIUtility.fieldWidth = 35;
EditorGUILayout.PropertyField
(
m_graphModulePosition,
new GUIContent
(
"Graph modules position",
"Defines in which corner the modules will be located."
)
);
#endregion
GUILayout.Space(20);
#region Section -> FPS
m_fpsModuleInspectorToggle = EditorGUILayout.Foldout
(
m_fpsModuleInspectorToggle,
" [ FPS ]",
GraphyEditorStyle.FoldoutStyle
);
GUILayout.Space(5);
if (m_fpsModuleInspectorToggle)
{
EditorGUILayout.PropertyField
(
m_fpsModuleState,
new GUIContent
(
"Module state",
"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
(
"- Good",
"When FPS rise above this value, this color will be used."
),
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
(
"- Caution",
"When FPS falls between this and the Good value, this color will be used."
),
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
(
"- Critical",
"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)."
),
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
(
"Graph resolution",
"Defines the amount of points in the graph"
),
m_fpsGraphResolution.intValue,
20,
m_graphyMode.intValue == 0 ? 300 : 128
);
m_fpsTextUpdateRate.intValue = EditorGUILayout.IntSlider
(
new GUIContent
(
"Text update rate",
"Defines the amount times the text is updated in 1 second."
),
m_fpsTextUpdateRate.intValue,
1,
60
);
}
#endregion
GUILayout.Space(20);
#region Section -> RAM
m_ramModuleInspectorToggle = EditorGUILayout.Foldout
(
m_ramModuleInspectorToggle,
" [ RAM ]",
GraphyEditorStyle.FoldoutStyle
);
GUILayout.Space(5);
if (m_ramModuleInspectorToggle)
{
EditorGUILayout.PropertyField
(
m_ramModuleState,
new GUIContent
(
"Module state",
"FULL -> Text + Graph \nTEXT -> Just text \nOFF -> Turned off"
)
);
GUILayout.Space(5);
EditorGUILayout.LabelField("Graph colors:");
EditorGUI.indentLevel++;
m_allocatedRamColor.colorValue = EditorGUILayout.ColorField
(
"- Allocated",
m_allocatedRamColor.colorValue
);
m_reservedRamColor.colorValue = EditorGUILayout.ColorField
(
"- Reserved",
m_reservedRamColor.colorValue
);
m_monoRamColor.colorValue = EditorGUILayout.ColorField
(
"- Mono",
m_monoRamColor.colorValue
);
EditorGUI.indentLevel--;
if (m_ramModuleState.intValue == 0)
m_ramGraphResolution.intValue = EditorGUILayout.IntSlider(
new GUIContent
(
"Graph resolution",
"Defines the amount of points are in the graph"
),
m_ramGraphResolution.intValue,
20,
m_graphyMode.intValue == 0 ? 300 : 128
);
m_ramTextUpdateRate.intValue = EditorGUILayout.IntSlider
(
new GUIContent
(
"Text update rate",
"Defines the amount times the text is updated in 1 second."
),
m_ramTextUpdateRate.intValue,
1,
60
);
}
#endregion
GUILayout.Space(20);
#region Section -> Audio
m_audioModuleInspectorToggle = EditorGUILayout.Foldout
(
m_audioModuleInspectorToggle,
" [ AUDIO ]",
GraphyEditorStyle.FoldoutStyle
);
GUILayout.Space(5);
if (m_audioModuleInspectorToggle)
{
EditorGUILayout.PropertyField
(
m_audioModuleState,
new GUIContent
(
"Module state",
"FULL -> Text + Graph \nTEXT -> Just text \nOFF -> Turned off"
)
);
GUILayout.Space(5);
EditorGUILayout.PropertyField
(
m_findAudioListenerInCameraIfNull,
new GUIContent
(
"Find audio listener",
"Tries to find the AudioListener in the Main camera in the scene. (if AudioListener is null)"
)
);
EditorGUILayout.PropertyField
(
m_audioListener,
new GUIContent
(
"Audio Listener",
"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
(
"Graph color",
m_audioGraphColor.colorValue
);
m_audioGraphResolution.intValue = EditorGUILayout.IntSlider
(
new GUIContent
(
"Graph resolution",
"Defines the amount of points that are in the graph."
),
m_audioGraphResolution.intValue,
20,
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
(
"FFT Window",
"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
(
"Spectrum size",
"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,
128,
8192
);
var closestSpectrumIndex = 0;
var minDistanceToSpectrumValue = 100000;
for (var i = 0; i < m_spectrumSizeValues.Length; i++)
{
var newDistance = Mathf.Abs
(
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 update rate",
"Defines the amount times the text is updated in 1 second"
),
m_audioTextUpdateRate.intValue,
1,
60
);
}
#endregion
GUILayout.Space(20);
#region Section -> Advanced Settings
m_advancedModuleInspectorToggle = EditorGUILayout.Foldout
(
m_advancedModuleInspectorToggle,
" [ ADVANCED DATA ]",
GraphyEditorStyle.FoldoutStyle
);
GUILayout.Space(5);
if (m_advancedModuleInspectorToggle)
{
EditorGUILayout.PropertyField(m_advancedModulePosition);
EditorGUILayout.PropertyField
(
m_advancedModuleState,
new GUIContent
(
"Module state",
"FULL -> Text \nOFF -> Turned off"
)
);
}
#endregion;
EditorGUIUtility.labelWidth = defaultLabelWidth;
EditorGUIUtility.fieldWidth = defaultFieldWidth;
serializedObject.ApplyModifiedProperties();
}
#endregion
/* ----- TODO: ----------------------------
* Add summaries to the variables.
* Add summaries to the functions.
* --------------------------------------*/
#region Variables -> Private
private GraphyManager m_target;
private readonly 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_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 -> Private
#endregion
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f01a5c28e5127404da343db2a7409c10
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,60 @@
/* ---------------------------------------
* Author: Martin Pane (martintayx@gmail.com) (@tayx94)
* Contributors: https://github.com/Tayx94/graphy/graphs/contributors
* Project: Graphy - Ultimate Stats Monitor
* Date: 20-Dec-17
* Studio: Tayx
*
* Git repo: https://github.com/Tayx94/graphy
*
* This project is released under the MIT license.
* Attribution is not required, but it is always welcomed!
* -------------------------------------*/
using UnityEditor;
using UnityEngine;
namespace Tayx.Graphy
{
public class GraphyMenuItem
{
[MenuItem("Tools/Graphy/Create Prefab Variant")]
private static void CreatePrefabVariant()
{
// Directory checking
if (!AssetDatabase.IsValidFolder("Assets/Graphy - Ultimate Stats Monitor"))
AssetDatabase.CreateFolder("Assets", "Graphy - Ultimate Stats Monitor");
if (!AssetDatabase.IsValidFolder("Assets/Graphy - Ultimate Stats Monitor/Prefab Variants"))
AssetDatabase.CreateFolder("Assets/Graphy - Ultimate Stats Monitor", "Prefab Variants");
var graphyPrefabGuid = AssetDatabase.FindAssets("[Graphy]")[0];
Object originalPrefab =
(GameObject)AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(graphyPrefabGuid),
typeof(GameObject));
var objectSource = PrefabUtility.InstantiatePrefab(originalPrefab) as GameObject;
var prefabVariantCount =
AssetDatabase.FindAssets("Graphy_Variant",
new[] { "Assets/Graphy - Ultimate Stats Monitor/Prefab Variants" }).Length;
var prefabVariant = PrefabUtility.SaveAsPrefabAsset(objectSource,
$"Assets/Graphy - Ultimate Stats Monitor/Prefab Variants/Graphy_Variant_{prefabVariantCount}.prefab");
Object.DestroyImmediate(objectSource);
foreach (SceneView scene in SceneView.sceneViews)
scene.ShowNotification(
new GUIContent("Prefab Variant Created at \"Assets/Graphy - Ultimate Stats Monitor/Prefab\"!"));
}
[MenuItem("Tools/Graphy/Import Graphy Customization Scene")]
private static void ImportGraphyCustomizationScene()
{
var customizationSceneGuid = AssetDatabase.FindAssets("Graphy_CustomizationScene")[0];
AssetDatabase.ImportPackage(AssetDatabase.GUIDToAssetPath(customizationSceneGuid), true);
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 68962e071a0ce0549a853f10c6af3f54
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,23 @@
{
"name": "Tayx.Graphy.Editor",
"references": [
"GUID:18e5109d897e1b244ab2dfeaf5482c7b"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [
{
"name": "com.unity.inputsystem",
"expression": "",
"define": "GRAPHY_NEW_INPUT"
}
],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9c59a049deefdf64bbbaa730a340bb3f
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: