namespace CodeStage.AdvancedFPSCounter { using CountersData; using Labels; using UnityEngine; public class APITester : MonoBehaviour { private int selectedTab; private readonly string[] tabs = {"Common", "Look & Feel", "FPS Counter", "Memory Counter", "Device info"}; private FPSLevel currentFPSLevel = FPSLevel.Normal; private void Start() { // will add AFPSCounter to the scene if it not exists // you don't need to call it if you already have AFPSCounter in the scene var newCounterInstance = AFPSCounter.AddToScene(); // you also may get the instance at any time // using AFPSCounter.Instance property newCounterInstance.fpsCounter.OnFPSLevelChange += OnFPSLevelChanged; } private void OnFPSLevelChanged(FPSLevel newLevel) { currentFPSLevel = newLevel; } private void OnGUI() { GUILayout.BeginArea(new Rect(40, 150, Screen.width-80, Screen.height - 80)); var richStyle = new GUIStyle(GUI.skin.label) {richText = true}; var centeredStyle = new GUIStyle(richStyle) {alignment = TextAnchor.UpperCenter}; GUILayout.Label("Public API usage examples", centeredStyle); selectedTab = GUILayout.Toolbar(selectedTab, tabs); switch (selectedTab) { case 0: { GUILayout.Space(10); DrawCommonTab(); break; } case 1: { GUILayout.Space(10); DrawLookFeelTab(); break; } case 2: { GUILayout.Space(10); DrawFPSCounterTab(); break; } case 3: { GUILayout.Space(10); DrawMemoryCounterTab(); break; } case 4: { GUILayout.Space(10); DrawDeviceInfoTab(); break; } default: { GUILayout.Label("Wrong tab!"); break; } } GUILayout.Space(5); GUILayout.Label("Raw counters values (read using API)", richStyle); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(GUILayout.ExpandWidth(true), GUILayout.MinWidth(300)); GUILayout.Label(" FPS: " + AFPSCounter.Instance.fpsCounter.LastValue + " [" + AFPSCounter.Instance.fpsCounter.LastMillisecondsValue + " MS]" + " AVG: " + AFPSCounter.Instance.fpsCounter.LastAverageValue + " [" + AFPSCounter.Instance.fpsCounter.LastAverageMillisecondsValue + " MS]" + "\n MIN: " + AFPSCounter.Instance.fpsCounter.LastMinimumValue + " [" + AFPSCounter.Instance.fpsCounter.LastMinMillisecondsValue + " MS]" + " MAX: " + AFPSCounter.Instance.fpsCounter.LastMaximumValue + " [" + AFPSCounter.Instance.fpsCounter.LastMaxMillisecondsValue + " MS]" + "\n RNDR: [" + AFPSCounter.Instance.fpsCounter.LastRenderValue + " MS]" + "\n Level (direct / callback): " + AFPSCounter.Instance.fpsCounter.CurrentFpsLevel + " / " + currentFPSLevel+""); if (AFPSCounter.Instance.memoryCounter.Precise) { GUILayout.Label(" Memory (Total, Allocated, Mono, Gfx):\n " + AFPSCounter.Instance.memoryCounter.LastTotalValue / (float)MemoryCounterData.MemoryDivider + ", " + AFPSCounter.Instance.memoryCounter.LastAllocatedValue / (float)MemoryCounterData.MemoryDivider + ", " + AFPSCounter.Instance.memoryCounter.LastMonoValue / (float)MemoryCounterData.MemoryDivider + ", " + AFPSCounter.Instance.memoryCounter.LastGfxValue / (float)MemoryCounterData.MemoryDivider + ""); } else { GUILayout.Label(" Memory (Total, Allocated, Mono, Gfx):\n " + AFPSCounter.Instance.memoryCounter.LastTotalValue + ", " + AFPSCounter.Instance.memoryCounter.LastAllocatedValue + ", " + AFPSCounter.Instance.memoryCounter.LastMonoValue + ", " + AFPSCounter.Instance.memoryCounter.LastGfxValue + ""); } GUILayout.EndVertical(); if (AFPSCounter.Instance.deviceInfoCounter.Enabled) GUILayout.Label("" + AFPSCounter.Instance.deviceInfoCounter.LastValue + ""); GUILayout.EndHorizontal(); GUILayout.EndArea(); } private void DrawCommonTab() { GUILayout.BeginHorizontal(); GUILayout.Label("Operation Mode:", GUILayout.MaxWidth(100)); var operationMode = (int)AFPSCounter.Instance.OperationMode; operationMode = GUILayout.Toolbar(operationMode, new[] { OperationMode.Disabled.ToString(), OperationMode.Background.ToString(), OperationMode.Normal.ToString() }); if (GUI.changed) AFPSCounter.Instance.OperationMode = (OperationMode)operationMode; GUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.BeginHorizontal(); GUILayout.Label("Hot Key:", GUILayout.MaxWidth(100)); int hotKeyIndex; if (AFPSCounter.Instance.hotKey == KeyCode.BackQuote) { hotKeyIndex = 1; } else { hotKeyIndex = (int)AFPSCounter.Instance.hotKey; } hotKeyIndex = GUILayout.Toolbar(hotKeyIndex, new[] { "None (disabled)", "BackQuote (`)" }); AFPSCounter.Instance.hotKey = hotKeyIndex == 1 ? KeyCode.BackQuote : KeyCode.None; AFPSCounter.Instance.circleGesture = GUILayout.Toggle(AFPSCounter.Instance.circleGesture, "Circle Gesture", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUI.enabled = hotKeyIndex == 1; GUILayout.Label("Hot Key modifiers:"); GUILayout.BeginHorizontal(); AFPSCounter.Instance.hotKeyCtrl = GUILayout.Toggle(AFPSCounter.Instance.hotKeyCtrl, "Ctrl / Cmd", GUILayout.ExpandWidth(false)); GUILayout.Space(10); AFPSCounter.Instance.hotKeyAlt = GUILayout.Toggle(AFPSCounter.Instance.hotKeyAlt, "Alt", GUILayout.ExpandWidth(false)); GUILayout.Space(10); AFPSCounter.Instance.hotKeyShift = GUILayout.Toggle(AFPSCounter.Instance.hotKeyShift, "Shift", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUI.enabled = true; GUILayout.Space(10); GUILayout.Label("KeepAlive enabled: " + AFPSCounter.Instance.KeepAlive); GUILayout.Space(5); GUILayout.BeginHorizontal(); AFPSCounter.Instance.ForceFrameRate = GUILayout.Toggle(AFPSCounter.Instance.ForceFrameRate, "Force FPS", GUILayout.Width(100)); AFPSCounter.Instance.ForcedFrameRate = (int)SliderLabel(AFPSCounter.Instance.ForcedFrameRate, -1, 100); GUILayout.EndHorizontal(); } private void DrawLookFeelTab() { GUILayout.BeginHorizontal(); AFPSCounter.Instance.PixelPerfect = GUILayout.Toggle(AFPSCounter.Instance.PixelPerfect, "Pixel Perfect", GUILayout.Width(100)); AFPSCounter.Instance.AutoScale = GUILayout.Toggle(AFPSCounter.Instance.AutoScale, "Auto scale", GUILayout.Width(100)); GUILayout.Label("Scale", GUILayout.ExpandWidth(false)); GUILayout.Space(5); AFPSCounter.Instance.ScaleFactor = SliderLabel(AFPSCounter.Instance.ScaleFactor, 0.1f, 10f); GUILayout.Space(30); GUILayout.Label("Font Size", GUILayout.ExpandWidth(false)); GUILayout.Space(5); AFPSCounter.Instance.FontSize = (int)SliderLabel(AFPSCounter.Instance.FontSize, 1, 100); GUILayout.EndHorizontal(); AFPSCounter.Instance.PaddingOffset = Vector2Slider(AFPSCounter.Instance.PaddingOffset, "Padding"); GUILayout.BeginHorizontal(); GUILayout.Label("Line spacing", GUILayout.ExpandWidth(false)); GUILayout.Space(5); AFPSCounter.Instance.LineSpacing = SliderLabel(AFPSCounter.Instance.LineSpacing, 0f, 10f); GUILayout.Space(30); GUILayout.Label("Counters spacing", GUILayout.ExpandWidth(false)); GUILayout.Space(5); AFPSCounter.Instance.CountersSpacing = (int)SliderLabel(AFPSCounter.Instance.CountersSpacing, 0, 10); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); AFPSCounter.Instance.Background = GUILayout.Toggle(AFPSCounter.Instance.Background, "Background", GUILayout.Width(100)); GUILayout.Space(5); GUI.enabled = AFPSCounter.Instance.Background; AFPSCounter.Instance.BackgroundColor = ColorSliders("Color", AFPSCounter.Instance.BackgroundColor); GUILayout.Label("Padding", GUILayout.Width(60)); AFPSCounter.Instance.BackgroundPadding = (int)SliderLabel(AFPSCounter.Instance.BackgroundPadding, 0, 50); GUI.enabled = true; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); AFPSCounter.Instance.Shadow = GUILayout.Toggle(AFPSCounter.Instance.Shadow, "Shadow", GUILayout.Width(100)); GUILayout.Space(5); GUI.enabled = AFPSCounter.Instance.Shadow; AFPSCounter.Instance.ShadowColor = ColorSliders("Color", AFPSCounter.Instance.ShadowColor); GUI.enabled = true; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); AFPSCounter.Instance.Outline = GUILayout.Toggle(AFPSCounter.Instance.Outline, "Outline", GUILayout.Width(100)); GUILayout.Space(5); GUI.enabled = AFPSCounter.Instance.Outline; AFPSCounter.Instance.OutlineColor = ColorSliders("Color", AFPSCounter.Instance.OutlineColor); GUI.enabled = true; GUILayout.EndHorizontal(); GUILayout.Space(5); Camera.main.backgroundColor = ColorSliders("Scene background color", Camera.main.backgroundColor); } private void DrawFPSCounterTab() { GUILayout.BeginHorizontal(); AFPSCounter.Instance.fpsCounter.Enabled = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.Enabled, "Enabled"); GUILayout.Label("Style: ", GUILayout.Width(35)); AFPSCounter.Instance.fpsCounter.Style = (FontStyle)GUILayout.Toolbar((int)AFPSCounter.Instance.fpsCounter.Style, new[] { "Normal", "Bold", "Italic", "Bold&Italic" }); GUILayout.Label("Extra text: ", GUILayout.Width(70)); if (GUILayout.Button("Append", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.fpsCounter.ExtraText = "Some text!"; } if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.fpsCounter.ExtraText = null; } GUILayout.EndHorizontal(); GUILayout.Space(10); AFPSCounter.Instance.fpsCounter.Anchor = (LabelAnchor)GUILayout.Toolbar((int)AFPSCounter.Instance.fpsCounter.Anchor, new[] { "UpperLeft", "UpperRight", "LowerLeft", "LowerRight", "UpperCenter", "LowerCenter" }); GUILayout.BeginHorizontal(); GUILayout.Label("Update Interval", GUILayout.Width(100)); AFPSCounter.Instance.fpsCounter.UpdateInterval = SliderLabel(AFPSCounter.Instance.fpsCounter.UpdateInterval, 0.1f, 10f); GUILayout.EndHorizontal(); AFPSCounter.Instance.fpsCounter.Milliseconds = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.Milliseconds, "Milliseconds"); GUILayout.BeginHorizontal(); AFPSCounter.Instance.fpsCounter.Average = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.Average, "Average FPS", GUILayout.Width(100)); if (AFPSCounter.Instance.fpsCounter.Average) { GUILayout.Label("Samples", GUILayout.ExpandWidth(false)); AFPSCounter.Instance.fpsCounter.AverageSamples = (int)SliderLabel(AFPSCounter.Instance.fpsCounter.AverageSamples, 0, 100); GUILayout.Space(10); AFPSCounter.Instance.fpsCounter.AverageMilliseconds = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.AverageMilliseconds, "Milliseconds"); AFPSCounter.Instance.fpsCounter.AverageNewLine = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.AverageNewLine, "On new line"); AFPSCounter.Instance.fpsCounter.resetAverageOnNewScene = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.resetAverageOnNewScene, "Reset On Load", GUILayout.ExpandWidth(false)); if (GUILayout.Button("Reset now!", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.fpsCounter.ResetAverage(); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); AFPSCounter.Instance.fpsCounter.MinMax = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.MinMax, "MinMax FPS", GUILayout.Width(100)); if (AFPSCounter.Instance.fpsCounter.MinMax) { GUILayout.Label("Delay", GUILayout.ExpandWidth(false)); AFPSCounter.Instance.fpsCounter.minMaxIntervalsToSkip = (int)SliderLabel(AFPSCounter.Instance.fpsCounter.minMaxIntervalsToSkip, 0, 10); GUILayout.Space(10); AFPSCounter.Instance.fpsCounter.MinMaxMilliseconds = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.MinMaxMilliseconds, "Milliseconds"); AFPSCounter.Instance.fpsCounter.MinMaxTwoLines = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.MinMaxTwoLines, "On two lines"); AFPSCounter.Instance.fpsCounter.MinMaxNewLine = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.MinMaxNewLine, "On new line"); AFPSCounter.Instance.fpsCounter.resetMinMaxOnNewScene = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.resetMinMaxOnNewScene, "Reset On Load", GUILayout.ExpandWidth(false)); if (GUILayout.Button("Reset now!", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.fpsCounter.ResetMinMax(); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); AFPSCounter.Instance.fpsCounter.Render = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.Render, "Render Time", GUILayout.Width(100)); if (AFPSCounter.Instance.fpsCounter.Render) { AFPSCounter.Instance.fpsCounter.RenderNewLine = GUILayout.Toggle(AFPSCounter.Instance.fpsCounter.RenderNewLine, "On new line"); } GUILayout.EndHorizontal(); } private void DrawMemoryCounterTab() { GUILayout.BeginHorizontal(); AFPSCounter.Instance.memoryCounter.Enabled = GUILayout.Toggle(AFPSCounter.Instance.memoryCounter.Enabled, "Enabled"); GUILayout.Label("Style: ", GUILayout.Width(35)); AFPSCounter.Instance.memoryCounter.Style = (FontStyle)GUILayout.Toolbar((int)AFPSCounter.Instance.memoryCounter.Style, new[] { "Normal", "Bold", "Italic", "Bold&Italic" }); GUILayout.Label("Extra text: ", GUILayout.Width(70)); if (GUILayout.Button("Append", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.memoryCounter.ExtraText = "Some text!"; } if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.memoryCounter.ExtraText = null; } GUILayout.EndHorizontal(); GUILayout.Space(10); AFPSCounter.Instance.memoryCounter.Anchor = (LabelAnchor)GUILayout.Toolbar((int)AFPSCounter.Instance.memoryCounter.Anchor, new[] { "UpperLeft", "UpperRight", "LowerLeft", "LowerRight", "UpperCenter", "LowerCenter" }); GUILayout.Space(10); GUILayout.BeginHorizontal(); GUILayout.Label("Update Interval", GUILayout.Width(100)); AFPSCounter.Instance.memoryCounter.UpdateInterval = SliderLabel(AFPSCounter.Instance.memoryCounter.UpdateInterval, 0.1f, 10f); GUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); AFPSCounter.Instance.memoryCounter.Precise = GUILayout.Toggle(AFPSCounter.Instance.memoryCounter.Precise, "Precise (uses more system resources)"); AFPSCounter.Instance.memoryCounter.Total = GUILayout.Toggle(AFPSCounter.Instance.memoryCounter.Total, "Total reserved memory size"); GUILayout.EndVertical(); GUILayout.BeginVertical(); AFPSCounter.Instance.memoryCounter.Allocated = GUILayout.Toggle(AFPSCounter.Instance.memoryCounter.Allocated, "Allocated memory size"); AFPSCounter.Instance.memoryCounter.MonoUsage = GUILayout.Toggle(AFPSCounter.Instance.memoryCounter.MonoUsage, "Mono memory usage"); AFPSCounter.Instance.memoryCounter.Gfx = GUILayout.Toggle(AFPSCounter.Instance.memoryCounter.Gfx, "GfxDriver memory"); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } private void DrawDeviceInfoTab() { GUILayout.BeginHorizontal(); AFPSCounter.Instance.deviceInfoCounter.Enabled = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.Enabled, "Enabled"); GUILayout.Label("Style: ", GUILayout.Width(35)); AFPSCounter.Instance.deviceInfoCounter.Style = (FontStyle)GUILayout.Toolbar((int)AFPSCounter.Instance.deviceInfoCounter.Style, new[] { "Normal", "Bold", "Italic", "Bold&Italic" }); GUILayout.Label("Extra text: ", GUILayout.Width(70)); if (GUILayout.Button("Append", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.deviceInfoCounter.ExtraText = "Some text!"; } if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { AFPSCounter.Instance.deviceInfoCounter.ExtraText = null; } GUILayout.EndHorizontal(); GUILayout.Space(10); AFPSCounter.Instance.deviceInfoCounter.Anchor = (LabelAnchor)GUILayout.Toolbar((int)AFPSCounter.Instance.deviceInfoCounter.Anchor, new[] { "UpperLeft", "UpperRight", "LowerLeft", "LowerRight", "UpperCenter", "LowerCenter" }); GUILayout.Space(10); using (new GUILayout.HorizontalScope()) { using (new GUILayout.VerticalScope()) { AFPSCounter.Instance.deviceInfoCounter.Platform = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.Platform, "Platform info"); using (new GUILayout.HorizontalScope()) { AFPSCounter.Instance.deviceInfoCounter.CpuModel = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.CpuModel, "CPU info", GUILayout.Width(150)); AFPSCounter.Instance.deviceInfoCounter.CpuModelNewLine = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.CpuModelNewLine, "new line"); } using (new GUILayout.HorizontalScope()) { AFPSCounter.Instance.deviceInfoCounter.GpuModel = GUILayout.Toggle( AFPSCounter.Instance.deviceInfoCounter.GpuModel, "GPU Model", GUILayout.Width(150)); AFPSCounter.Instance.deviceInfoCounter.GpuModelNewLine = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.GpuModelNewLine, "new line"); } } using (new GUILayout.VerticalScope()) { using (new GUILayout.HorizontalScope()) { AFPSCounter.Instance.deviceInfoCounter.GpuApi = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.GpuApi, "GPU API", GUILayout.Width(150)); AFPSCounter.Instance.deviceInfoCounter.GpuApiNewLine = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.GpuApiNewLine, "new line"); } using (new GUILayout.HorizontalScope()) { AFPSCounter.Instance.deviceInfoCounter.GpuSpec = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.GpuSpec, "GPU Spec", GUILayout.Width(150)); AFPSCounter.Instance.deviceInfoCounter.GpuSpecNewLine = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.GpuSpecNewLine, "new line"); } using (new GUILayout.HorizontalScope()) { AFPSCounter.Instance.deviceInfoCounter.RamSize = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.RamSize, "Total RAM size", GUILayout.Width(150)); AFPSCounter.Instance.deviceInfoCounter.RamSizeNewLine = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.RamSizeNewLine, "new line"); } } using (new GUILayout.VerticalScope()) { using (new GUILayout.HorizontalScope()) { AFPSCounter.Instance.deviceInfoCounter.ScreenData = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.ScreenData, "Display info", GUILayout.Width(150)); AFPSCounter.Instance.deviceInfoCounter.ScreenDataNewLine = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.ScreenDataNewLine, "new line"); } using (new GUILayout.HorizontalScope()) { AFPSCounter.Instance.deviceInfoCounter.DeviceModel = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.DeviceModel, "Device model", GUILayout.Width(150)); AFPSCounter.Instance.deviceInfoCounter.DeviceModelNewLine = GUILayout.Toggle(AFPSCounter.Instance.deviceInfoCounter.DeviceModelNewLine, "new line"); } } } } private static float SliderLabel(float sliderValue, float sliderMinValue, float sliderMaxValue) { GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); GUILayout.Space(8); sliderValue = GUILayout.HorizontalSlider(sliderValue, sliderMinValue, sliderMaxValue); GUILayout.EndVertical(); GUILayout.Space(10); GUILayout.Label(string.Format("{0:F2}", sliderValue), GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); return sliderValue; } private Color ColorSliders(string caption, Color color) { GUILayout.BeginHorizontal(); GUILayout.Label(caption, GUILayout.ExpandWidth(false)); GUILayout.Space(5); GUILayout.Label("R:", GUILayout.Width(20)); color.r = SliderLabel(color.r, 0f, 1f); GUILayout.Space(5); GUILayout.Label("G:", GUILayout.Width(20)); color.g = SliderLabel(color.g, 0f, 1f); GUILayout.Space(5); GUILayout.Label("B:", GUILayout.Width(20)); color.b = SliderLabel(color.b, 0f, 1f); GUILayout.EndHorizontal(); return color; } private Vector2 Vector2Slider(Vector2 input, string label) { var output = input; GUILayout.BeginHorizontal(); GUILayout.Label(label, GUILayout.ExpandWidth(false)); GUILayout.Space(5); GUILayout.Label("X: ", GUILayout.Width(20)); output.x = (int)SliderLabel(output.x, 0, 100); GUILayout.Space(30); GUILayout.Label("Y:", GUILayout.Width(20)); output.y = (int)SliderLabel(output.y, 0, 100); GUILayout.EndHorizontal(); return output; } } }