From d05108872e7fbd9b605a256986992643c48b744b Mon Sep 17 00:00:00 2001 From: Koosemose Date: Wed, 7 Dec 2016 22:56:22 -0500 Subject: [PATCH] New Logging Solution (#1653) * Include UnityDebugger * Remove Uberlogger * Replace old Uberlogger calls * gitignore ChannelSettings.asset * Add Scrollbar to window * Change to vertical orientation --- .gitignore | 2 + Assets/Editor/DebuggerChannelControl.cs | 104 ++ .../DebuggerChannelControl.cs.meta} | 4 +- Assets/Editor/SpriteToXML.cs | 22 +- .../Controllers/HeadlineGeneratorTest.cs | 3 +- .../Models/Functions/CSharpFunctionsTest.cs | 1 - .../Models/Functions/FunctionsTest.cs | 7 +- .../Models/Functions/LuaFunctionsTest.cs | 1 - .../UnitTests/Models/ScheduledEventTest.cs | 11 +- .../UnitTests/Models/SchedulerEditorTest.cs | 6 +- .../Utilities/ParametersEditorTest.cs | 1 - Assets/Plugins/UnityDebugger.dll | Bin 0 -> 11264 bytes Assets/Plugins/UnityDebugger.dll.meta | 24 + .../InputOutput/BuildModeController.cs | 8 +- .../Controllers/ShipSpriteController.cs | 2 +- .../Sprites/CharacterSpriteController.cs | 2 +- .../Sprites/FurnitureSpriteController.cs | 4 +- .../Sprites/InventorySpriteController.cs | 4 +- .../Sprites/TileSpriteController.cs | 4 +- .../Sprites/UtilitySpriteController.cs | 4 +- Assets/Scripts/Controllers/WorldController.cs | 7 +- .../Localization/LocalizationDownloader.cs | 32 +- .../Localization/LocalizationLoader.cs | 2 +- .../Scripts/Localization/LocalizationTable.cs | 16 +- .../Models/Animation/SpritenameAnimation.cs | 2 +- Assets/Scripts/Models/Area/Room.cs | 2 +- Assets/Scripts/Models/Area/RoomManager.cs | 4 +- Assets/Scripts/Models/Area/Temperature.cs | 4 +- Assets/Scripts/Models/Area/World.cs | 52 +- Assets/Scripts/Models/Area/WorldGenerator.cs | 10 +- .../Components/BuildableComponent.cs | 6 +- .../Models/Buildable/Components/Workshop.cs | 4 +- Assets/Scripts/Models/Buildable/Furniture.cs | 6 +- .../Models/Buildable/FurnitureManager.cs | 2 +- Assets/Scripts/Models/Buildable/Tile.cs | 8 +- Assets/Scripts/Models/Buildable/TileType.cs | 6 +- Assets/Scripts/Models/Buildable/Utility.cs | 2 +- .../Models/Buildable/UtilityManager.cs | 2 +- Assets/Scripts/Models/Character/Character.cs | 6 +- .../DialogBoxInformation/DialogButton.cs | 4 +- .../Scripts/Models/Events/AutosaveManager.cs | 4 +- Assets/Scripts/Models/Events/EventAction.cs | 6 +- Assets/Scripts/Models/Events/TimeManager.cs | 2 +- .../Models/Functions/CSharpFunctions.cs | 6 +- Assets/Scripts/Models/Functions/Functions.cs | 9 +- .../Scripts/Models/Functions/LuaFunctions.cs | 10 +- .../Models/InputOutput/AudioManager.cs | 2 +- .../Scripts/Models/InputOutput/SoundClip.cs | 2 +- .../Models/InputOutput/SpriteManager.cs | 4 +- Assets/Scripts/Models/Inventory/Inventory.cs | 2 +- .../Models/Inventory/InventoryManager.cs | 4 +- Assets/Scripts/Models/Job/Job.cs | 4 +- Assets/Scripts/Models/Job/JobQueue.cs | 6 +- .../Scripts/Models/Prototypes/PrototypeMap.cs | 8 +- .../Models/Scheduler/ScheduledEvent.cs | 2 +- Assets/Scripts/Models/Scheduler/Scheduler.cs | 4 +- Assets/Scripts/Models/Settings.cs | 38 +- Assets/Scripts/Models/Ships/Ship.cs | 6 +- Assets/Scripts/Models/Ships/ShipManager.cs | 4 +- Assets/Scripts/Pathfinding/Path_AStar.cs | 10 +- Assets/Scripts/Pathfinding/Path_RoomGraph.cs | 10 +- Assets/Scripts/Pathfinding/Path_TileGraph.cs | 4 +- Assets/Scripts/Pathfinding/Pathfinder.cs | 2 +- .../Pathfinding/PathfindingPriorityQueue.cs | 2 +- Assets/Scripts/Pathfinding/RoomPath_AStar.cs | 10 +- Assets/Scripts/State/JobState.cs | 6 +- Assets/Scripts/State/MoveState.cs | 2 +- Assets/Scripts/State/State.cs | 2 +- Assets/Scripts/UI/DialogBox/DialogBox.cs | 2 +- .../Scripts/UI/DialogBox/DialogBoxManager.cs | 8 +- .../FileSaveLoad/DialogBoxLoadGame.cs | 2 +- .../FileSaveLoad/DialogBoxLoadSaveGame.cs | 2 +- .../Scripts/UI/DialogBox/Mod/ModDialogBox.cs | 4 +- .../PromptOrInfo/DialogBoxPromptOrInfo.cs | 2 +- Assets/Scripts/UI/HeadlineController.cs | 2 +- .../UI/InGameUI/DevConsole/DevConsole.cs | 4 +- .../CSharpCommand.cs | 2 +- .../CommandBase.cs | 4 - .../CommandParams.cs | 2 +- .../CommandWithFourParameters.cs | 2 +- .../CommandWithOneParameter.cs | 2 +- .../CommandWithThreeParameters.cs | 2 +- .../CommandWithTwoParameters.cs | 2 +- .../InvokeCommand.cs | 6 +- .../PerformanceHUD/PerformanceHUDManager.cs | 6 +- Assets/Scripts/UI/MouseOver.cs | 4 +- .../Scripts/UI/Overlay/OverlayDescriptor.cs | 2 +- Assets/Scripts/UI/Overlay/OverlayMap.cs | 12 +- Assets/Scripts/Utilities/ModUtils.cs | 12 +- Assets/UberLogger.meta | 9 - Assets/UberLogger/Art.meta | 9 - Assets/UberLogger/Art/Button.png | Bin 1510 -> 0 bytes Assets/UberLogger/Art/Button.png.meta | 55 - Assets/UberLogger/Art/ButtonError.png | Bin 1656 -> 0 bytes Assets/UberLogger/Art/ButtonError.png.meta | 55 - Assets/UberLogger/Art/ErrorIcon.png | Bin 557 -> 0 bytes Assets/UberLogger/Art/ErrorIcon.png.meta | 55 - Assets/UberLogger/Art/LogLine1.png | Bin 1216 -> 0 bytes Assets/UberLogger/Art/LogLine1.png.meta | 55 - Assets/UberLogger/Art/LogLine2.png | Bin 1216 -> 0 bytes Assets/UberLogger/Art/LogLine2.png.meta | 55 - Assets/UberLogger/Art/LogLineSelected.png | Bin 1216 -> 0 bytes .../UberLogger/Art/LogLineSelected.png.meta | 55 - Assets/UberLogger/Art/MessageIcon.png | Bin 603 -> 0 bytes Assets/UberLogger/Art/MessageIcon.png.meta | 55 - Assets/UberLogger/Art/ToolbarButton.png | Bin 1217 -> 0 bytes Assets/UberLogger/Art/ToolbarButton.png.meta | 55 - .../UberLogger/Art/ToolbarButtonClicked.png | Bin 1217 -> 0 bytes .../Art/ToolbarButtonClicked.png.meta | 55 - Assets/UberLogger/Art/ToolbarButtonDown.png | Bin 1217 -> 0 bytes .../UberLogger/Art/ToolbarButtonDown.png.meta | 55 - Assets/UberLogger/Art/UberConsoleSkin.guiskin | 1433 ----------------- .../Art/UberConsoleSkin.guiskin.meta | 8 - Assets/UberLogger/Art/WarningIcon.png | Bin 534 -> 0 bytes Assets/UberLogger/Art/WarningIcon.png.meta | 55 - Assets/UberLogger/Art/WhiteTexture.png | Bin 1214 -> 0 bytes Assets/UberLogger/Art/WhiteTexture.png.meta | 55 - Assets/UberLogger/Art/WindowTexture.png | Bin 1274 -> 0 bytes Assets/UberLogger/Art/WindowTexture.png.meta | 55 - Assets/UberLogger/Debug.cs | 360 ----- Assets/UberLogger/Debug.cs.meta | 9 - Assets/UberLogger/Editor.meta | 6 - .../Editor/UberLoggerEditorWindow.cs | 599 ------- .../Editor/UberLoggerEditorWindow.cs.meta | 9 - Assets/UberLogger/Examples.meta | 9 - Assets/UberLogger/Examples/TestUberLogger.cs | 62 - .../Examples/TestUberLogger.cs.meta | 9 - .../UberLogger/Examples/TestUberLogger.unity | 340 ---- .../Examples/TestUberLogger.unity.meta | 5 - Assets/UberLogger/LICENSE | 22 - Assets/UberLogger/LICENSE.meta | 8 - Assets/UberLogger/Pics.meta | 9 - Assets/UberLogger/Pics/UberConsoleEditor.png | Bin 62543 -> 0 bytes .../Pics/UberConsoleEditor.png.meta | 55 - Assets/UberLogger/Pics/UberConsoleGame.png | Bin 138338 -> 0 bytes .../UberLogger/Pics/UberConsoleGame.png.meta | 55 - Assets/UberLogger/README.md | 53 - Assets/UberLogger/README.md.meta | 8 - Assets/UberLogger/UberAppConsole.prefab | 64 - Assets/UberLogger/UberAppConsole.prefab.meta | 8 - Assets/UberLogger/UberLogger.cs | 540 ------- Assets/UberLogger/UberLogger.cs.meta | 12 - Assets/UberLogger/UberLoggerAppWindow.cs | 496 ------ Assets/UberLogger/UberLoggerAppWindow.cs.meta | 19 - Assets/UberLogger/UberLoggerEditor.cs | 111 -- Assets/UberLogger/UberLoggerEditor.cs.meta | 9 - Assets/UberLogger/UberLoggerFile.cs | 45 - ProjectSettings/ProjectSettings.asset | 3 - README.md | 2 + 149 files changed, 384 insertions(+), 5363 deletions(-) create mode 100644 Assets/Editor/DebuggerChannelControl.cs rename Assets/{UberLogger/UberLoggerFile.cs.meta => Editor/DebuggerChannelControl.cs.meta} (76%) create mode 100644 Assets/Plugins/UnityDebugger.dll create mode 100644 Assets/Plugins/UnityDebugger.dll.meta delete mode 100644 Assets/UberLogger.meta delete mode 100644 Assets/UberLogger/Art.meta delete mode 100644 Assets/UberLogger/Art/Button.png delete mode 100644 Assets/UberLogger/Art/Button.png.meta delete mode 100644 Assets/UberLogger/Art/ButtonError.png delete mode 100644 Assets/UberLogger/Art/ButtonError.png.meta delete mode 100644 Assets/UberLogger/Art/ErrorIcon.png delete mode 100644 Assets/UberLogger/Art/ErrorIcon.png.meta delete mode 100644 Assets/UberLogger/Art/LogLine1.png delete mode 100644 Assets/UberLogger/Art/LogLine1.png.meta delete mode 100644 Assets/UberLogger/Art/LogLine2.png delete mode 100644 Assets/UberLogger/Art/LogLine2.png.meta delete mode 100644 Assets/UberLogger/Art/LogLineSelected.png delete mode 100644 Assets/UberLogger/Art/LogLineSelected.png.meta delete mode 100644 Assets/UberLogger/Art/MessageIcon.png delete mode 100644 Assets/UberLogger/Art/MessageIcon.png.meta delete mode 100644 Assets/UberLogger/Art/ToolbarButton.png delete mode 100644 Assets/UberLogger/Art/ToolbarButton.png.meta delete mode 100644 Assets/UberLogger/Art/ToolbarButtonClicked.png delete mode 100644 Assets/UberLogger/Art/ToolbarButtonClicked.png.meta delete mode 100644 Assets/UberLogger/Art/ToolbarButtonDown.png delete mode 100644 Assets/UberLogger/Art/ToolbarButtonDown.png.meta delete mode 100644 Assets/UberLogger/Art/UberConsoleSkin.guiskin delete mode 100644 Assets/UberLogger/Art/UberConsoleSkin.guiskin.meta delete mode 100644 Assets/UberLogger/Art/WarningIcon.png delete mode 100644 Assets/UberLogger/Art/WarningIcon.png.meta delete mode 100644 Assets/UberLogger/Art/WhiteTexture.png delete mode 100644 Assets/UberLogger/Art/WhiteTexture.png.meta delete mode 100644 Assets/UberLogger/Art/WindowTexture.png delete mode 100644 Assets/UberLogger/Art/WindowTexture.png.meta delete mode 100644 Assets/UberLogger/Debug.cs delete mode 100644 Assets/UberLogger/Debug.cs.meta delete mode 100644 Assets/UberLogger/Editor.meta delete mode 100644 Assets/UberLogger/Editor/UberLoggerEditorWindow.cs delete mode 100644 Assets/UberLogger/Editor/UberLoggerEditorWindow.cs.meta delete mode 100644 Assets/UberLogger/Examples.meta delete mode 100644 Assets/UberLogger/Examples/TestUberLogger.cs delete mode 100644 Assets/UberLogger/Examples/TestUberLogger.cs.meta delete mode 100644 Assets/UberLogger/Examples/TestUberLogger.unity delete mode 100644 Assets/UberLogger/Examples/TestUberLogger.unity.meta delete mode 100644 Assets/UberLogger/LICENSE delete mode 100644 Assets/UberLogger/LICENSE.meta delete mode 100644 Assets/UberLogger/Pics.meta delete mode 100644 Assets/UberLogger/Pics/UberConsoleEditor.png delete mode 100644 Assets/UberLogger/Pics/UberConsoleEditor.png.meta delete mode 100644 Assets/UberLogger/Pics/UberConsoleGame.png delete mode 100644 Assets/UberLogger/Pics/UberConsoleGame.png.meta delete mode 100644 Assets/UberLogger/README.md delete mode 100644 Assets/UberLogger/README.md.meta delete mode 100644 Assets/UberLogger/UberAppConsole.prefab delete mode 100644 Assets/UberLogger/UberAppConsole.prefab.meta delete mode 100644 Assets/UberLogger/UberLogger.cs delete mode 100644 Assets/UberLogger/UberLogger.cs.meta delete mode 100644 Assets/UberLogger/UberLoggerAppWindow.cs delete mode 100644 Assets/UberLogger/UberLoggerAppWindow.cs.meta delete mode 100644 Assets/UberLogger/UberLoggerEditor.cs delete mode 100644 Assets/UberLogger/UberLoggerEditor.cs.meta delete mode 100644 Assets/UberLogger/UberLoggerFile.cs diff --git a/.gitignore b/.gitignore index 8b634f6a0..3b07f1932 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ !/Assets/StreamingAssets/Data/Mods/README.md.meta /[Pp]roject[Ss]ettings/ProjectVersion.txt /[Pp]roject[Ss]ettings/GraphicsSettings.asset +/Assets/Resources/ChannelSettings.asset +/Assets/Resources/ChannelSettings.asset.meta # Autogenerated VS/MD solution and project files ExportedObj/ diff --git a/Assets/Editor/DebuggerChannelControl.cs b/Assets/Editor/DebuggerChannelControl.cs new file mode 100644 index 000000000..9c569d570 --- /dev/null +++ b/Assets/Editor/DebuggerChannelControl.cs @@ -0,0 +1,104 @@ +#region License +// ==================================================== +// Project Porcupine Copyright(C) 2016 Team Porcupine +// This program comes with ABSOLUTELY NO WARRANTY; This is free software, +// and you are welcome to redistribute it under certain conditions; See +// file LICENSE, which is part of this source code package, for details. +// ==================================================== +#endregion + +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +public class DebuggerChannelControl : EditorWindow +{ + private EditorWindow window; + + private bool allState; + private bool allPreveState; + private ChannelSettingsSO channelSettings; + private Vector2 scrollViewVector = Vector2.down; + + [MenuItem("Window/Debugger Channel Control")] + public static void ShowWindow() + { + GetWindow(typeof(DebuggerChannelControl)); + } + + private void Awake() + { + channelSettings = Resources.Load("ChannelSettings"); + if (channelSettings == null) + { + channelSettings = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(channelSettings, "Assets/Resources/ChannelSettings.asset"); + AssetDatabase.SaveAssets(); + } + + allState = channelSettings.DefaultState; + allPreveState = allState; + } + + private void OnGUI() + { + bool dirtySettings = false; + scrollViewVector = GUILayout.BeginScrollView(scrollViewVector); + EditorGUILayout.BeginVertical("Box"); + bool allStateChanged = false; + allState = GUILayout.Toggle(allState, "All"); + + if (allState != allPreveState) + { + allPreveState = allState; + allStateChanged = true; + channelSettings.DefaultState = allState; + dirtySettings = true; + } + + if (UnityDebugger.Debugger.Channels != null) + { + Dictionary toggleReturns = new Dictionary(); + foreach (string channelName in UnityDebugger.Debugger.Channels.Keys.AsEnumerable()) + { + toggleReturns.Add(channelName, GUILayout.Toggle(UnityDebugger.Debugger.Channels[channelName], channelName)); + if (allStateChanged) + { + toggleReturns[channelName] = allState; + } + } + + foreach (string channelName in toggleReturns.Keys.ToList()) + { + UnityDebugger.Debugger.Channels[channelName] = toggleReturns[channelName]; + + if (channelSettings == null) + { + // We're in a weird state with no channelSettings, just bail 'til we get it back. + return; + } + + if (!channelSettings.ChannelState.ContainsKey(channelName) && toggleReturns.ContainsKey(channelName)) + { + bool theValueIWant = toggleReturns[channelName]; + channelSettings.ChannelState.Add(channelName, theValueIWant); + dirtySettings = true; + } + else if (channelSettings.ChannelState[channelName] != toggleReturns[channelName]) + { + channelSettings.ChannelState[channelName] = toggleReturns[channelName]; + dirtySettings = true; + } + } + } + + if (dirtySettings) + { + EditorUtility.SetDirty(channelSettings); + } + + EditorGUILayout.EndVertical(); + GUILayout.EndScrollView(); + } +} \ No newline at end of file diff --git a/Assets/UberLogger/UberLoggerFile.cs.meta b/Assets/Editor/DebuggerChannelControl.cs.meta similarity index 76% rename from Assets/UberLogger/UberLoggerFile.cs.meta rename to Assets/Editor/DebuggerChannelControl.cs.meta index f4b406b3d..f39cf1519 100644 --- a/Assets/UberLogger/UberLoggerFile.cs.meta +++ b/Assets/Editor/DebuggerChannelControl.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: b5a6acaaa5d694ea0a4f19ef3235bbeb -timeCreated: 1437774614 +guid: 07c655dc1ca03254f87dcc64cd47ecb9 +timeCreated: 1479869589 licenseType: Free MonoImporter: serializedVersion: 2 diff --git a/Assets/Editor/SpriteToXML.cs b/Assets/Editor/SpriteToXML.cs index 566c0faf5..61709441e 100644 --- a/Assets/Editor/SpriteToXML.cs +++ b/Assets/Editor/SpriteToXML.cs @@ -171,7 +171,7 @@ private void ShowVersion1() if (images.Length > 1) { - Debug.ULogErrorChannel("SpriteToXML", "Place only one sprite in 'Resources/Editor/SpriteToXML'"); + UnityDebugger.Debugger.LogError("SpriteToXML", "Place only one sprite in 'Resources/Editor/SpriteToXML'"); return; } @@ -191,16 +191,16 @@ private void ShowVersion1() private void ExportSprites() { - Debug.ULogChannel("SpriteToXML", "Files saved to: " + outputDirPath); + UnityDebugger.Debugger.Log("SpriteToXML", "Files saved to: " + outputDirPath); foreach (string fn in filesInDir) { - Debug.ULogChannel("SpriteToXML", "files in dir: " + fn); + UnityDebugger.Debugger.Log("SpriteToXML", "files in dir: " + fn); } foreach (Texture2D t in images) { - Debug.ULogChannel("SpriteToXML", "Filename: " + t.name); + UnityDebugger.Debugger.Log("SpriteToXML", "Filename: " + t.name); } WriteXml(); @@ -210,7 +210,7 @@ private void WriteXml() { if (outputDirPath == string.Empty) { - Debug.ULogErrorChannel("SpriteToXML", "Please select a folder"); + UnityDebugger.Debugger.LogError("SpriteToXML", "Please select a folder"); return; } @@ -384,7 +384,7 @@ private void ShowVersion2() if ((columnIndex == 0 && rowIndex == 0) && isMultipleSprite == true) { EditorUtility.DisplayDialog("Select proper Row/Column count", "Please select more than 1 Row/Column!", "OK"); - Debug.ULogErrorChannel("SpriteToXML", "Please select more than 1 Row/Column"); + UnityDebugger.Debugger.LogError("SpriteToXML", "Please select more than 1 Row/Column"); } else { @@ -424,7 +424,7 @@ private void LoadImage(string filePath) myTexture = imageTexture; imageName = Path.GetFileNameWithoutExtension(filePath); imageExt = Path.GetExtension(filePath); - Debug.ULogChannel("SpriteToXML", imageName + " Loaded"); + UnityDebugger.Debugger.Log("SpriteToXML", imageName + " Loaded"); textureLoaded = true; } } @@ -516,18 +516,18 @@ private void MoveImage(string filePath) try { File.Replace(filePath, destPath, destPath + ".bak"); - Debug.ULogWarningChannel("SpriteToXML", "Image already exsists, backing old one up to: " + destPath + ".bak"); + UnityDebugger.Debugger.LogWarning("SpriteToXML", "Image already exsists, backing old one up to: " + destPath + ".bak"); } catch (Exception ex) { - Debug.ULogWarningChannel("SpriteToXML", ex.Message + " - " + imageName + imageExt + " not moved."); + UnityDebugger.Debugger.LogWarning("SpriteToXML", ex.Message + " - " + imageName + imageExt + " not moved."); EditorUtility.DisplayDialog(imageName + imageExt + " not moved.", "The original and output directories cannot be the same!" + "\n\n" + "XML was still generated.", "OK"); } } else { File.Move(filePath, destPath); - Debug.ULogChannel("SpriteToXML", "Image moved to: " + destPath); + UnityDebugger.Debugger.Log("SpriteToXML", "Image moved to: " + destPath); } if (File.Exists(filePath + ".meta") && File.Exists(destPath + ".meta")) @@ -538,7 +538,7 @@ private void MoveImage(string filePath) } catch (Exception ex) { - Debug.ULogWarningChannel("SpriteToXML", ex.Message + " - " + imageName + imageExt + ".meta not moved."); + UnityDebugger.Debugger.LogWarning("SpriteToXML", ex.Message + " - " + imageName + imageExt + ".meta not moved."); } } else diff --git a/Assets/Editor/UnitTests/Controllers/HeadlineGeneratorTest.cs b/Assets/Editor/UnitTests/Controllers/HeadlineGeneratorTest.cs index 1c08ac58f..01648437f 100644 --- a/Assets/Editor/UnitTests/Controllers/HeadlineGeneratorTest.cs +++ b/Assets/Editor/UnitTests/Controllers/HeadlineGeneratorTest.cs @@ -33,12 +33,11 @@ public void SetUp() gen = new HeadlineGenerator(); gen.UpdatedHeadline += StringPrinted; stringPrinted = false; - Debug.IsLogEnabled = false; } public void StringPrinted(string headline) { - Debug.Log(headline); + UnityDebugger.Debugger.Log(headline); stringPrinted = true; } diff --git a/Assets/Editor/UnitTests/Models/Functions/CSharpFunctionsTest.cs b/Assets/Editor/UnitTests/Models/Functions/CSharpFunctionsTest.cs index b2d11d419..59a82ad7a 100644 --- a/Assets/Editor/UnitTests/Models/Functions/CSharpFunctionsTest.cs +++ b/Assets/Editor/UnitTests/Models/Functions/CSharpFunctionsTest.cs @@ -39,7 +39,6 @@ public static string PowerCellPress_StatusInfo(Furniture furniture) [SetUp] public void Init() { - Debug.IsLogEnabled = false; functions = new CSharpFunctions(); } diff --git a/Assets/Editor/UnitTests/Models/Functions/FunctionsTest.cs b/Assets/Editor/UnitTests/Models/Functions/FunctionsTest.cs index d14fe4fee..6292f888b 100644 --- a/Assets/Editor/UnitTests/Models/Functions/FunctionsTest.cs +++ b/Assets/Editor/UnitTests/Models/Functions/FunctionsTest.cs @@ -40,7 +40,6 @@ function PowerGenerator_FuelInfo(furniture) [SetUp] public void Init() { - Debug.IsLogEnabled = true; csharpFunctions = new CSharpFunctions(); luaFunctions = new LuaFunctions(); } @@ -76,9 +75,9 @@ public void CompareLUAvsCSharp() sw2.Stop(); - Debug.Log(string.Format("Iterations: {0}", cache.Count / 2)); - Debug.Log(string.Format("CSharp calls: {0} ms", sw1.ElapsedMilliseconds)); - Debug.Log(string.Format("LUA calls: {0} ms", sw2.ElapsedMilliseconds)); + UnityDebugger.Debugger.Log(string.Format("Iterations: {0}", cache.Count / 2)); + UnityDebugger.Debugger.Log(string.Format("CSharp calls: {0} ms", sw1.ElapsedMilliseconds)); + UnityDebugger.Debugger.Log(string.Format("LUA calls: {0} ms", sw2.ElapsedMilliseconds)); } private string ReplaceQuotes(string text) diff --git a/Assets/Editor/UnitTests/Models/Functions/LuaFunctionsTest.cs b/Assets/Editor/UnitTests/Models/Functions/LuaFunctionsTest.cs index 10ed35117..d5aa985fe 100644 --- a/Assets/Editor/UnitTests/Models/Functions/LuaFunctionsTest.cs +++ b/Assets/Editor/UnitTests/Models/Functions/LuaFunctionsTest.cs @@ -45,7 +45,6 @@ function test_func2() [SetUp] public void Init() { - Debug.IsLogEnabled = false; functions = new LuaFunctions(); } diff --git a/Assets/Editor/UnitTests/Models/ScheduledEventTest.cs b/Assets/Editor/UnitTests/Models/ScheduledEventTest.cs index 0ea56f350..edb805394 100644 --- a/Assets/Editor/UnitTests/Models/ScheduledEventTest.cs +++ b/Assets/Editor/UnitTests/Models/ScheduledEventTest.cs @@ -19,10 +19,9 @@ public class ScheduledEventTest [SetUp] public void Init() { - Debug.IsLogEnabled = false; callback = (evt) => { - Debug.ULogChannel("ScheduledEventTest", "Event {0} fired", evt.Name); + UnityDebugger.Debugger.LogFormat("ScheduledEventTest", "Event {0} fired", evt.Name); didRun = true; runCount++; }; @@ -33,7 +32,7 @@ public void EventCreationTest() { ScheduledEvent evt = new ScheduledEvent( "test", - (ev) => Debug.ULogChannel("ScheduledEventTest", "Event {0} fired", ev.Name), + (ev) => UnityDebugger.Debugger.LogFormat("ScheduledEventTest", "Event {0} fired", ev.Name), 3.0f, true, 1); @@ -45,7 +44,7 @@ public void EventCreationTest() Assert.That(evt, Is.Not.EqualTo(evt2)); ScheduledEvent evt3 = new ScheduledEvent( - new ScheduledEvent("test", (ev) => Debug.ULogChannel("ScheduledEventTest", "Event {0} fired", ev.Name)), + new ScheduledEvent("test", (ev) => UnityDebugger.Debugger.LogFormat("ScheduledEventTest", "Event {0} fired", ev.Name)), 1.0f, 0.5f, false, @@ -197,7 +196,7 @@ public void LargeDeltaTimeEventRunTest() ScheduledEvent evt = new ScheduledEvent( "test", - (ev) => { tally++; Debug.ULogChannel("ScheduledEventTest", "Event {0} fired", ev.Name); }, + (ev) => { tally++; UnityDebugger.Debugger.LogFormat("ScheduledEventTest", "Event {0} fired", ev.Name); }, 3.0f, true, 0); @@ -245,7 +244,7 @@ public void ToJsonTest() { ScheduledEvent evt = new ScheduledEvent( "test", - (ev) => Debug.ULogChannel("ScheduledEventTest", "Event {0} fired", ev.Name), + (ev) => UnityDebugger.Debugger.LogFormat("ScheduledEventTest", "Event {0} fired", ev.Name), 3.0f, true, 1); diff --git a/Assets/Editor/UnitTests/Models/SchedulerEditorTest.cs b/Assets/Editor/UnitTests/Models/SchedulerEditorTest.cs index e470cf345..e405ebb14 100644 --- a/Assets/Editor/UnitTests/Models/SchedulerEditorTest.cs +++ b/Assets/Editor/UnitTests/Models/SchedulerEditorTest.cs @@ -32,8 +32,6 @@ function ping_log_lua(event) [SetUp] public void Init() { - Debug.IsLogEnabled = false; - if (FunctionsManager.ScheduledEvent == null) { new FunctionsManager(); @@ -46,14 +44,14 @@ public void Init() new PrototypeManager(); } - PrototypeManager.ScheduledEvent.Add(new ScheduledEvent("ping_log", evt => Debug.ULogChannel("Scheduler", "Event {0} fired", evt.Name))); + PrototypeManager.ScheduledEvent.Add(new ScheduledEvent("ping_log", evt => UnityDebugger.Debugger.LogFormat("Scheduler", "Event {0} fired", evt.Name))); PrototypeManager.ScheduledEvent.LoadPrototypes(XmlPrototypeString); // The problem with unit testing singletons ///scheduler = Scheduler.Scheduler.Current; scheduler = new Scheduler.Scheduler(); - callback = evt => Debug.ULogChannel("SchedulerTest", "Event {0} fired", evt.Name); + callback = evt => UnityDebugger.Debugger.LogFormat("SchedulerTest", "Event {0} fired", evt.Name); } [Test] diff --git a/Assets/Editor/UnitTests/Utilities/ParametersEditorTest.cs b/Assets/Editor/UnitTests/Utilities/ParametersEditorTest.cs index 033e74279..834badb15 100644 --- a/Assets/Editor/UnitTests/Utilities/ParametersEditorTest.cs +++ b/Assets/Editor/UnitTests/Utilities/ParametersEditorTest.cs @@ -22,7 +22,6 @@ public class ParametersEditorTest [SetUp] public void Init() { - Debug.IsLogEnabled = false; xmlTest1 = @" diff --git a/Assets/Plugins/UnityDebugger.dll b/Assets/Plugins/UnityDebugger.dll new file mode 100644 index 0000000000000000000000000000000000000000..04fa46925c632f8451a85d10b0376654f94d0584 GIT binary patch literal 11264 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 HdEh?*3gPAL literal 0 HcmV?d00001 diff --git a/Assets/Plugins/UnityDebugger.dll.meta b/Assets/Plugins/UnityDebugger.dll.meta new file mode 100644 index 000000000..dc9a9b820 --- /dev/null +++ b/Assets/Plugins/UnityDebugger.dll.meta @@ -0,0 +1,24 @@ +fileFormatVersion: 2 +guid: efb95d7eb58424449b848614e6a55822 +timeCreated: 1480492548 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Controllers/InputOutput/BuildModeController.cs b/Assets/Scripts/Controllers/InputOutput/BuildModeController.cs index 1eb51ea43..9f4ccb3ec 100644 --- a/Assets/Scripts/Controllers/InputOutput/BuildModeController.cs +++ b/Assets/Scripts/Controllers/InputOutput/BuildModeController.cs @@ -153,7 +153,7 @@ public void DoBuild(Tile tile) } else { - Debug.ULogErrorChannel("BuildModeController", "There is no furniture job prototype for '" + furnitureType + "'"); + UnityDebugger.Debugger.LogError("BuildModeController", "There is no furniture job prototype for '" + furnitureType + "'"); job = new Job(tile, furnitureType, World.Current.FurnitureManager.ConstructJobCompleted, 0.1f, null, Job.JobPriority.High); job.adjacent = true; job.Description = "job_build_" + furnitureType + "_desc"; @@ -229,7 +229,7 @@ public void DoBuild(Tile tile) } else { - Debug.ULogErrorChannel("BuildModeController", "There is no furniture job prototype for '" + utilityType + "'"); + UnityDebugger.Debugger.LogError("BuildModeController", "There is no furniture job prototype for '" + utilityType + "'"); job = new Job(tile, utilityType, World.Current.UtilityManager.ConstructJobCompleted, 0.1f, null, Job.JobPriority.High); job.Description = "job_build_" + utilityType + "_desc"; } @@ -315,7 +315,7 @@ public void DoBuild(Tile tile) if (vacuumNeighbors > 0 && pressuredNeighbors > 0) { - Debug.ULogChannel("BuildModeController", "Someone tried to deconstruct a wall between a pressurized room and vacuum!"); + UnityDebugger.Debugger.Log("BuildModeController", "Someone tried to deconstruct a wall between a pressurized room and vacuum!"); return; } } @@ -333,7 +333,7 @@ public void DoBuild(Tile tile) } else { - Debug.ULogErrorChannel("BuildModeController", "UNIMPLEMENTED BUILD MODE"); + UnityDebugger.Debugger.LogError("BuildModeController", "UNIMPLEMENTED BUILD MODE"); } } diff --git a/Assets/Scripts/Controllers/ShipSpriteController.cs b/Assets/Scripts/Controllers/ShipSpriteController.cs index 91bc79dce..d7d892ea4 100644 --- a/Assets/Scripts/Controllers/ShipSpriteController.cs +++ b/Assets/Scripts/Controllers/ShipSpriteController.cs @@ -19,7 +19,7 @@ public ShipSpriteController(World world) : base(world, "Ships") protected override void OnCreated(Ship ship) { - Debug.ULogChannel("Ships", "Ship created: " + ship.Type); + UnityDebugger.Debugger.Log("Ships", "Ship created: " + ship.Type); GameObject ship_go = new GameObject(); diff --git a/Assets/Scripts/Controllers/Sprites/CharacterSpriteController.cs b/Assets/Scripts/Controllers/Sprites/CharacterSpriteController.cs index 829f0f72e..61a24c995 100644 --- a/Assets/Scripts/Controllers/Sprites/CharacterSpriteController.cs +++ b/Assets/Scripts/Controllers/Sprites/CharacterSpriteController.cs @@ -122,7 +122,7 @@ protected override void OnChanged(Character character) if (objectGameObjectMap.ContainsKey(character) == false) { - Debug.ULogErrorChannel("CharacterSpriteController", "OnCharacterChanged -- trying to change visuals for character not in our map."); + UnityDebugger.Debugger.LogError("CharacterSpriteController", "OnCharacterChanged -- trying to change visuals for character not in our map."); return; } diff --git a/Assets/Scripts/Controllers/Sprites/FurnitureSpriteController.cs b/Assets/Scripts/Controllers/Sprites/FurnitureSpriteController.cs index cf1699e76..28b8d5c27 100644 --- a/Assets/Scripts/Controllers/Sprites/FurnitureSpriteController.cs +++ b/Assets/Scripts/Controllers/Sprites/FurnitureSpriteController.cs @@ -184,7 +184,7 @@ protected override void OnChanged(Furniture furn) // Make sure the furniture's graphics are correct. if (objectGameObjectMap.ContainsKey(furn) == false) { - Debug.ULogErrorChannel("FurnitureSpriteController", "OnFurnitureChanged -- trying to change visuals for furniture not in our map."); + UnityDebugger.Debugger.LogError("FurnitureSpriteController", "OnFurnitureChanged -- trying to change visuals for furniture not in our map."); return; } @@ -232,7 +232,7 @@ protected override void OnRemoved(Furniture furn) { if (objectGameObjectMap.ContainsKey(furn) == false) { - Debug.ULogErrorChannel("FurnitureSpriteController", "OnFurnitureRemoved -- trying to change visuals for furniture not in our map."); + UnityDebugger.Debugger.LogError("FurnitureSpriteController", "OnFurnitureRemoved -- trying to change visuals for furniture not in our map."); return; } diff --git a/Assets/Scripts/Controllers/Sprites/InventorySpriteController.cs b/Assets/Scripts/Controllers/Sprites/InventorySpriteController.cs index 13576ee00..0d17bdf4e 100644 --- a/Assets/Scripts/Controllers/Sprites/InventorySpriteController.cs +++ b/Assets/Scripts/Controllers/Sprites/InventorySpriteController.cs @@ -64,7 +64,7 @@ protected override void OnCreated(Inventory inventory) sr.sprite = SpriteManager.GetSprite("Inventory", inventory.Type); if (sr.sprite == null) { - Debug.ULogErrorChannel("InventorySpriteController", "No sprite for: " + inventory.Type); + UnityDebugger.Debugger.LogError("InventorySpriteController", "No sprite for: " + inventory.Type); } sr.sortingLayerName = "Inventory"; @@ -90,7 +90,7 @@ protected override void OnChanged(Inventory inventory) // Make sure the furniture's graphics are correct. if (objectGameObjectMap.ContainsKey(inventory) == false) { - Debug.ULogErrorChannel("InventorySpriteController", "OnCharacterChanged -- trying to change visuals for inventory not in our map."); + UnityDebugger.Debugger.LogError("InventorySpriteController", "OnCharacterChanged -- trying to change visuals for inventory not in our map."); return; } diff --git a/Assets/Scripts/Controllers/Sprites/TileSpriteController.cs b/Assets/Scripts/Controllers/Sprites/TileSpriteController.cs index a51e40cc3..cb186622c 100644 --- a/Assets/Scripts/Controllers/Sprites/TileSpriteController.cs +++ b/Assets/Scripts/Controllers/Sprites/TileSpriteController.cs @@ -64,7 +64,7 @@ protected override void OnChanged(Tile tile) { if (objectGameObjectMap.ContainsKey(tile) == false) { - Debug.ULogErrorChannel("TileSpriteController", "tileGameObjectMap doesn't contain the tile_data -- did you forget to add the tile to the dictionary? Or maybe forget to unregister a callback?"); + UnityDebugger.Debugger.LogError("TileSpriteController", "tileGameObjectMap doesn't contain the tile_data -- did you forget to add the tile to the dictionary? Or maybe forget to unregister a callback?"); return; } @@ -72,7 +72,7 @@ protected override void OnChanged(Tile tile) if (tile_go == null) { - Debug.ULogErrorChannel("TileSpriteController", "tileGameObjectMap's returned GameObject is null -- did you forget to add the tile to the dictionary? Or maybe forget to unregister a callback?"); + UnityDebugger.Debugger.LogError("TileSpriteController", "tileGameObjectMap's returned GameObject is null -- did you forget to add the tile to the dictionary? Or maybe forget to unregister a callback?"); return; } diff --git a/Assets/Scripts/Controllers/Sprites/UtilitySpriteController.cs b/Assets/Scripts/Controllers/Sprites/UtilitySpriteController.cs index d17696681..f84a12870 100644 --- a/Assets/Scripts/Controllers/Sprites/UtilitySpriteController.cs +++ b/Assets/Scripts/Controllers/Sprites/UtilitySpriteController.cs @@ -101,7 +101,7 @@ protected override void OnChanged(Utility util) // Make sure the utility's graphics are correct. if (objectGameObjectMap.ContainsKey(util) == false) { - Debug.ULogErrorChannel("UtilitySpriteController", "OnUtilityChanged -- trying to change visuals for utility not in our map."); + UnityDebugger.Debugger.LogError("UtilitySpriteController", "OnUtilityChanged -- trying to change visuals for utility not in our map."); return; } @@ -115,7 +115,7 @@ protected override void OnRemoved(Utility util) { if (objectGameObjectMap.ContainsKey(util) == false) { - Debug.ULogErrorChannel("UtilitySpriteController", "OnUtilityRemoved -- trying to change visuals for utility not in our map."); + UnityDebugger.Debugger.LogError("UtilitySpriteController", "OnUtilityRemoved -- trying to change visuals for utility not in our map."); return; } diff --git a/Assets/Scripts/Controllers/WorldController.cs b/Assets/Scripts/Controllers/WorldController.cs index 73bd8830a..2ae02109a 100644 --- a/Assets/Scripts/Controllers/WorldController.cs +++ b/Assets/Scripts/Controllers/WorldController.cs @@ -46,10 +46,9 @@ public class WorldController : MonoBehaviour // Use this for initialization. public void OnEnable() { - Debug.IsLogEnabled = true; if (Instance != null) { - Debug.ULogErrorChannel("WorldController", "There should never be two world controllers."); + UnityDebugger.Debugger.LogError("WorldController", "There should never be two world controllers."); } Instance = this; @@ -64,7 +63,7 @@ public void OnEnable() PrototypeManager.ScheduledEvent.Add( new ScheduledEvent( "ping_log", - (evt) => Debug.ULogChannel("Scheduler", "Event {0} fired", evt.Name))); + (evt) => UnityDebugger.Debugger.LogFormat("Scheduler", "Event {0} fired", evt.Name))); modsManager = new ModsManager(); @@ -232,7 +231,7 @@ private void CreateEmptyWorld() private void CreateWorldFromSaveFile(string fileName) { - Debug.ULogChannel("WorldController", "CreateWorldFromSaveFile"); + UnityDebugger.Debugger.Log("WorldController", "CreateWorldFromSaveFile"); World = new World(); World.ReadJson(fileName); diff --git a/Assets/Scripts/Localization/LocalizationDownloader.cs b/Assets/Scripts/Localization/LocalizationDownloader.cs index 39468ecdf..a5fa02384 100644 --- a/Assets/Scripts/Localization/LocalizationDownloader.cs +++ b/Assets/Scripts/Localization/LocalizationDownloader.cs @@ -73,8 +73,8 @@ public static IEnumerator CheckIfCurrentLocalizationIsUpToDate(Action onLocaliza if (string.IsNullOrEmpty(versionChecker.error) == false) { // This could be a thing when for example user has no internet connection. - Debug.ULogErrorChannel("LocalizationDownloader", "Error while checking for localization updates. Are you sure that you're connected to the internet?"); - Debug.ULogErrorChannel("LocalizationDownloader", versionChecker.error); + UnityDebugger.Debugger.LogError("LocalizationDownloader", "Error while checking for localization updates. Are you sure that you're connected to the internet?"); + UnityDebugger.Debugger.LogError("LocalizationDownloader", versionChecker.error); yield break; } @@ -89,7 +89,7 @@ public static IEnumerator CheckIfCurrentLocalizationIsUpToDate(Action onLocaliza } catch (Exception e) { - Debug.ULogErrorChannel("LocalizationDownloader", e.Message); + UnityDebugger.Debugger.LogError("LocalizationDownloader", e.Message); } if (latestCommitHash != currentLocalizationVersion) @@ -97,7 +97,7 @@ public static IEnumerator CheckIfCurrentLocalizationIsUpToDate(Action onLocaliza // There are still some updates available. We should probably notify // user about it and offer him an option to download it right now. // For now... Let's just force it >.> Beginners task! - Debug.ULogChannel("LocalizationDownloader", "There is an update for localization files!"); + UnityDebugger.Debugger.Log("LocalizationDownloader", "There is an update for localization files!"); yield return DownloadLocalizationFromWeb(onLocalizationDownloadedCallback); // Because config.xml exists in the new downloaded localization, we have to add the version element to it. @@ -117,7 +117,7 @@ public static IEnumerator CheckIfCurrentLocalizationIsUpToDate(Action onLocaliza { // Not a big deal: // Next time the LocalizationDownloader will force an update. - Debug.ULogWarningChannel("LocalizationDownloader", "Writing version in config.xml file failed: " + e.Message); + UnityDebugger.Debugger.LogWarning("LocalizationDownloader", "Writing version in config.xml file failed: " + e.Message); throw; } } @@ -134,14 +134,14 @@ private static IEnumerator DownloadLocalizationFromWeb(Action onLocalizationDown www.Dispose(); } - Debug.ULogChannel("LocalizationDownloader", "Localization files download has started"); + UnityDebugger.Debugger.Log("LocalizationDownloader", "Localization files download has started"); www = new WWW(LocalizationRepositoryZipLocation); // Wait for www to download current localization files. yield return www; - Debug.ULogChannel("LocalizationDownloader", "Localization files download has finished!"); + UnityDebugger.Debugger.Log("LocalizationDownloader", "Localization files download has finished!"); // Almost like a callback call OnDownloadLocalizationComplete(onLocalizationDownloadedCallback); @@ -156,7 +156,7 @@ private static void OnDownloadLocalizationComplete(Action onLocalizationDownload if (www.isDone == false) { // This should never happen. - Debug.ULogErrorChannel("LocalizationDownloader", "OnDownloadLocalizationComplete got called before www finished downloading."); + UnityDebugger.Debugger.LogError("LocalizationDownloader", "OnDownloadLocalizationComplete got called before www finished downloading."); www.Dispose(); return; } @@ -164,8 +164,8 @@ private static void OnDownloadLocalizationComplete(Action onLocalizationDownload if (string.IsNullOrEmpty(www.error) == false) { // This could be a thing when for example user has no internet connection. - Debug.ULogErrorChannel("LocalizationDownloader", "Error while downloading localizations files."); - Debug.ULogErrorChannel("LocalizationDownloader", www.error); + UnityDebugger.Debugger.LogError("LocalizationDownloader", "Error while downloading localizations files."); + UnityDebugger.Debugger.LogError("LocalizationDownloader", www.error); return; } @@ -232,14 +232,14 @@ private static void OnDownloadLocalizationComplete(Action onLocalizationDownload { if (file.Name != "en_US.lang" && file.Name != "en_US.lang.meta") { - Debug.ULogErrorChannel("LocalizationDownloader", "There should only be en_US.lang and en_US.lang.meta. Instead there is: " + file.Name); + UnityDebugger.Debugger.LogError("LocalizationDownloader", "There should only be en_US.lang and en_US.lang.meta. Instead there is: " + file.Name); } } DirectoryInfo[] dirInfo = localizationFolderInfo.GetDirectories(); if (dirInfo.Length > 1) { - Debug.ULogErrorChannel("LocalizationDownloader", "There should be only one directory"); + UnityDebugger.Debugger.LogError("LocalizationDownloader", "There should be only one directory"); } // Move files from ProjectPorcupineLocalization-*branch name* to Application.streamingAssetsPath/Localization. @@ -256,7 +256,7 @@ private static void OnDownloadLocalizationComplete(Action onLocalizationDownload // Remove ProjectPorcupineLocalization-*branch name* Directory.Delete(dirInfo[0].FullName); - Debug.ULogChannel("LocalizationDownloader", "New localization files successfully downloaded!"); + UnityDebugger.Debugger.Log("LocalizationDownloader", "New localization files successfully downloaded!"); onLocalizationDownloadedCallback(); } @@ -271,7 +271,7 @@ private static DirectoryInfo ClearLocalizationDirectory() // b) We are in a wrong directory, so let's hope we didn't delete anything important. if (file.Extension != ".lang" && file.Extension != ".meta" && file.Extension != ".ver" && file.Extension != ".md" && file.Name != "config.xml") { - Debug.ULogErrorChannel("LocalizationDownloader", "SOMETHING WENT HORRIBLY WRONG AT DOWNLOADING LOCALIZATION!"); + UnityDebugger.Debugger.LogError("LocalizationDownloader", "SOMETHING WENT HORRIBLY WRONG AT DOWNLOADING LOCALIZATION!"); throw new Exception("SOMETHING WENT HORRIBLY WRONG AT DOWNLOADING LOCALIZATION!"); } @@ -317,12 +317,12 @@ private static string GetLocalizationVersionFromConfig() catch (FileNotFoundException) { // It's fine - we will create that file later. - Debug.ULogChannel("LocalizationDownloader", localizationConfigFilePath + " file not found, forcing an update."); + UnityDebugger.Debugger.Log("LocalizationDownloader", localizationConfigFilePath + " file not found, forcing an update."); } catch (DirectoryNotFoundException) { // This is probably first launch of the game. - Debug.ULogChannel("LocalizationDownloader", LocalizationFolderPath + " folder not found, creating..."); + UnityDebugger.Debugger.Log("LocalizationDownloader", LocalizationFolderPath + " folder not found, creating..."); try { diff --git a/Assets/Scripts/Localization/LocalizationLoader.cs b/Assets/Scripts/Localization/LocalizationLoader.cs index 532ed5432..f6367db66 100644 --- a/Assets/Scripts/Localization/LocalizationLoader.cs +++ b/Assets/Scripts/Localization/LocalizationLoader.cs @@ -69,7 +69,7 @@ private void LoadLocalizationInDirectory(string path) LocalizationTable.LoadLocalizationFile(file); // Just write a little debug info into the console. - Debug.ULogChannel("LocalizationLoader", "Loaded localization at path: " + file); + UnityDebugger.Debugger.Log("LocalizationLoader", "Loaded localization at path: " + file); } } diff --git a/Assets/Scripts/Localization/LocalizationTable.cs b/Assets/Scripts/Localization/LocalizationTable.cs index 1abe06d93..7bf3358e1 100644 --- a/Assets/Scripts/Localization/LocalizationTable.cs +++ b/Assets/Scripts/Localization/LocalizationTable.cs @@ -85,7 +85,7 @@ public static string GetLocalization(string key, FallbackMode fallbackMode, stri if (!missingKeysLogged.Contains(key)) { missingKeysLogged.Add(key); - Debug.ULogChannel("LocalizationTable", string.Format("Translation for {0} in {1} language failed: Key not in dictionary.", key, language)); + UnityDebugger.Debugger.Log("LocalizationTable", string.Format("Translation for {0} in {1} language failed: Key not in dictionary.", key, language)); } switch (fallbackMode) @@ -103,7 +103,7 @@ public static string GetLocalizaitonCodeLocalization(string code) { if (localizationConfigurations.ContainsKey(code) == false) { - Debug.ULogChannel("LocalizationTable", "name of " + code + " is not present in config.xml"); + UnityDebugger.Debugger.Log("LocalizationTable", "name of " + code + " is not present in config.xml"); return code; } @@ -144,7 +144,7 @@ public static void LoadConfigFile(string pathToConfigFile) if (File.Exists(pathToConfigFile) == false) { - Debug.ULogErrorChannel("LocalizationTable", "No config file found at: " + pathToConfigFile); + UnityDebugger.Debugger.LogError("LocalizationTable", "No config file found at: " + pathToConfigFile); configExists = false; return; } @@ -205,7 +205,7 @@ public static string ReverseString(string original) // For now lets assume that passing in { or } without a number in between is likely an error // why would a string need curly brackets in game? // Note: this removes the curly braces and cannot replace them since string.split doesn't say whether { or } appeared - Debug.ULogWarningChannel("LocalizationTable", "{ or } exist in localization string '" + original + "' for " + currentLanguage + "but do not enclose a number for string substitution."); + UnityDebugger.Debugger.LogWarning("LocalizationTable", "{ or } exist in localization string '" + original + "' for " + currentLanguage + "but do not enclose a number for string substitution."); } } @@ -237,7 +237,7 @@ private static void LoadLocalizationFile(string path, string localizationCode) if (configExists && localizationConfigurations.ContainsKey(localizationCode) == false) { - Debug.ULogErrorChannel("LocalizationTable", "Language: " + localizationCode + " not defined in localization/config.xml"); + UnityDebugger.Debugger.LogError("LocalizationTable", "Language: " + localizationCode + " not defined in localization/config.xml"); } // Only the current and default languages translations will be loaded in memory. @@ -246,7 +246,7 @@ private static void LoadLocalizationFile(string path, string localizationCode) bool rightToLeftLanguage; if (localizationConfigurations.ContainsKey(localizationCode) == false) { - Debug.ULogWarningChannel("LocalizationTable", "Assuming " + localizationCode + " is LTR"); + UnityDebugger.Debugger.LogWarning("LocalizationTable", "Assuming " + localizationCode + " is LTR"); rightToLeftLanguage = false; } else @@ -262,7 +262,7 @@ private static void LoadLocalizationFile(string path, string localizationCode) if (keyValuePair.Length != 2) { - Debug.ULogErrorChannel("LocalizationTable", string.Format("Invalid format of localization string. Actual {0}", line)); + UnityDebugger.Debugger.LogError("LocalizationTable", string.Format("Invalid format of localization string. Actual {0}", line)); continue; } @@ -278,7 +278,7 @@ private static void LoadLocalizationFile(string path, string localizationCode) } catch (FileNotFoundException exception) { - Debug.ULogErrorChannel("LocalizationTable", new Exception(string.Format("There is no localization file for {0}", localizationCode), exception).ToString()); + UnityDebugger.Debugger.LogError("LocalizationTable", new Exception(string.Format("There is no localization file for {0}", localizationCode), exception).ToString()); } } } diff --git a/Assets/Scripts/Models/Animation/SpritenameAnimation.cs b/Assets/Scripts/Models/Animation/SpritenameAnimation.cs index 3b6a7803a..50b11bca4 100644 --- a/Assets/Scripts/Models/Animation/SpritenameAnimation.cs +++ b/Assets/Scripts/Models/Animation/SpritenameAnimation.cs @@ -67,7 +67,7 @@ public void SetFrame(int frame) { if (frame >= frameCount) { - Debug.ULogErrorChannel("Animation", "SetFrame frame " + frame + " int is larger than array length " + frameCount + "."); + UnityDebugger.Debugger.LogError("Animation", "SetFrame frame " + frame + " int is larger than array length " + frameCount + "."); return; } diff --git a/Assets/Scripts/Models/Area/Room.cs b/Assets/Scripts/Models/Area/Room.cs index 2486aa3be..bbffbae57 100644 --- a/Assets/Scripts/Models/Area/Room.cs +++ b/Assets/Scripts/Models/Area/Room.cs @@ -398,7 +398,7 @@ public bool DesignateRoomBehavior(RoomBehavior objInstance) if (objInstance.IsValidRoom(this) == false) { - Debug.ULogErrorChannel("Tile", "Trying to assign a RoomBehavior to a room that isn't valid!"); + UnityDebugger.Debugger.LogError("Tile", "Trying to assign a RoomBehavior to a room that isn't valid!"); return false; } diff --git a/Assets/Scripts/Models/Area/RoomManager.cs b/Assets/Scripts/Models/Area/RoomManager.cs index 3d1024482..ec43dd0fe 100644 --- a/Assets/Scripts/Models/Area/RoomManager.cs +++ b/Assets/Scripts/Models/Area/RoomManager.cs @@ -252,7 +252,7 @@ public void DoRoomFloodFill(Tile sourceTile, bool splitting, bool floodFillingOn // to remove the room from the world's list. if (oldRoom.TileCount > 0) { - Debug.ULogErrorChannel("Room", "'oldRoom' still has tiles assigned to it. This is clearly wrong."); + UnityDebugger.Debugger.LogError("Room", "'oldRoom' still has tiles assigned to it. This is clearly wrong."); } Remove(oldRoom); @@ -346,7 +346,7 @@ public void DoRoomFloodFill(Tile sourceTile, bool splitting, bool floodFillingOn // to remove the room from the world's list. if (oldRoom.TileCount > 0) { - Debug.ULogErrorChannel("Room", "'oldRoom' still has tiles assigned to it. This is clearly wrong."); + UnityDebugger.Debugger.LogError("Room", "'oldRoom' still has tiles assigned to it. This is clearly wrong."); } Remove(oldRoom); diff --git a/Assets/Scripts/Models/Area/Temperature.cs b/Assets/Scripts/Models/Area/Temperature.cs index be9c84f5c..fe8635335 100644 --- a/Assets/Scripts/Models/Area/Temperature.cs +++ b/Assets/Scripts/Models/Area/Temperature.cs @@ -218,7 +218,7 @@ public bool IsWithinTemperatureBounds(float temp) else { // string.format not needed with UberLogger. - Debug.ULogWarningChannel("Temperature", "Yep, something is wrong with your temperature: {0}.", temp); + UnityDebugger.Debugger.LogWarningFormat("Temperature", "Yep, something is wrong with your temperature: {0}.", temp); return false; } } @@ -236,7 +236,7 @@ public bool IsWithinThermalDiffusivityBounds(float thermal_diff) } else { - Debug.ULogWarningChannel("Temperature", "Trying to set a thermal diffusivity that may break the world: {0}.", thermal_diff); + UnityDebugger.Debugger.LogWarningFormat("Temperature", "Trying to set a thermal diffusivity that may break the world: {0}.", thermal_diff); return false; } } diff --git a/Assets/Scripts/Models/Area/World.cs b/Assets/Scripts/Models/Area/World.cs index 0c1ba9984..4274f5867 100644 --- a/Assets/Scripts/Models/Area/World.cs +++ b/Assets/Scripts/Models/Area/World.cs @@ -53,7 +53,7 @@ public World(int width, int height, int depth) int seed = UnityEngine.Random.Range(0, int.MaxValue); Debug.LogWarning("World Seed: " + seed); WorldGenerator.Instance.Generate(this, seed); - Debug.ULogChannel("World", "Generated World"); + UnityDebugger.Debugger.Log("World", "Generated World"); tileGraph = new Path_TileGraph(this); @@ -422,7 +422,7 @@ private void LoadSkybox(string name = null) } else { - Debug.ULogWarningChannel("World", "No skyboxes detected! Falling back to black."); + UnityDebugger.Debugger.LogWarning("World", "No skyboxes detected! Falling back to black."); } } @@ -509,7 +509,7 @@ private void TestRoomGraphGeneration(World world) if (roomGraph.nodes.Count() != 8) { - Debug.ULogErrorChannel("Path_RoomGraph", "Generated incorrect number of nodes: " + roomGraph.nodes.Count().ToString()); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Generated incorrect number of nodes: " + roomGraph.nodes.Count().ToString()); errorCount++; } @@ -517,7 +517,7 @@ private void TestRoomGraphGeneration(World world) { if (roomGraph.nodes.ContainsKey(r) == false) { - Debug.ULogErrorChannel("Path_RoomGraph", "Does not contain room: " + r.ID); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Does not contain room: " + r.ID); errorCount++; } else @@ -529,15 +529,15 @@ private void TestRoomGraphGeneration(World world) case 0: // the outside room has two edges both connecting to room 2 if (edgeCount != 2) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 0 supposed to have 2 edges. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 0 supposed to have 2 edges. Instead has: " + edgeCount); errorCount++; continue; } if (node.edges[0].node.data != world.RoomManager[2] || node.edges[1].node.data != world.RoomManager[4]) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 0 supposed to have edges to Room 2 and Room 4."); - Debug.ULogErrorChannel( + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 0 supposed to have edges to Room 2 and Room 4."); + UnityDebugger.Debugger.LogError( "Path_RoomGraph", string.Format("Instead has: {1} and {2}", node.edges[0].node.data.ID, node.edges[1].node.data.ID)); errorCount++; @@ -547,15 +547,15 @@ private void TestRoomGraphGeneration(World world) case 1: // Room 1 has one edge connecting to room 2 if (edgeCount != 1) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 1 supposed to have 1 edge. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 1 supposed to have 1 edge. Instead has: " + edgeCount); errorCount++; continue; } if (node.edges[0].node.data != world.RoomManager[3]) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 1 supposed to have edge to Room 3."); - Debug.ULogErrorChannel("Path_RoomGraph", "Instead has: " + node.edges[0].node.data.ID.ToString()); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 1 supposed to have edge to Room 3."); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Instead has: " + node.edges[0].node.data.ID.ToString()); errorCount++; } @@ -563,15 +563,15 @@ private void TestRoomGraphGeneration(World world) case 2: // Room 2 has two edges both connecting to the outside room, one connecting to room 1 and one connecting to room 5 if (edgeCount != 2) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 2 supposed to have 2 edges. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 2 supposed to have 2 edges. Instead has: " + edgeCount); errorCount++; continue; } if (node.edges[0].node.data != world.RoomManager[3] || node.edges[1].node.data != world.RoomManager[0]) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 2 supposed to have edges to Room 3 and Room 0."); - Debug.ULogErrorChannel( + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 2 supposed to have edges to Room 3 and Room 0."); + UnityDebugger.Debugger.LogError( "Path_RoomGraph", string.Format("Instead has: {0} and {1}", node.edges[0].node.data.ID, node.edges[1].node.data.ID)); errorCount++; @@ -581,7 +581,7 @@ private void TestRoomGraphGeneration(World world) case 3: // Room 3 has 4 edges, connecting to Rooms 1, 2, 4, and 7 if (edgeCount != 4) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 3 supposed to have 4 edges. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 3 supposed to have 4 edges. Instead has: " + edgeCount); errorCount++; continue; } @@ -589,14 +589,14 @@ private void TestRoomGraphGeneration(World world) if (node.edges[0].node.data != world.RoomManager[4] || node.edges[1].node.data != world.RoomManager[7] || node.edges[2].node.data != world.RoomManager[1] || node.edges[3].node.data != world.RoomManager[2]) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 3 supposed to have edges to Rooms 4, 7, 1, and 2"); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 3 supposed to have edges to Rooms 4, 7, 1, and 2"); string errorMessage = string.Format( "Instead has: {0}, {1}, {2}, and {3}", node.edges[0].node.data.ID, node.edges[1].node.data.ID, node.edges[2].node.data.ID, node.edges[3].node.data.ID); - Debug.ULogErrorChannel("Path_RoomGraph", errorMessage); + UnityDebugger.Debugger.LogError("Path_RoomGraph", errorMessage); errorCount++; } @@ -604,15 +604,15 @@ private void TestRoomGraphGeneration(World world) case 4: // Room 2 has two edges both connecting to the outside room, one connecting to room 1 and one connecting to room 5 if (edgeCount != 2) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 4 supposed to have 2 edges. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 4 supposed to have 2 edges. Instead has: " + edgeCount); errorCount++; continue; } if (node.edges[0].node.data != world.RoomManager[0] || node.edges[1].node.data != world.RoomManager[3]) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 4 supposed to have edges to Room 0 and Room 3."); - Debug.ULogErrorChannel( + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 4 supposed to have edges to Room 0 and Room 3."); + UnityDebugger.Debugger.LogError( "Path_RoomGraph", string.Format("Instead has: {0} and {1}", node.edges[0].node.data.ID, node.edges[1].node.data.ID)); @@ -625,7 +625,7 @@ private void TestRoomGraphGeneration(World world) case 5: // Room 5 has no edges if (edgeCount != 0) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 5 supposed to have no edges. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 5 supposed to have no edges. Instead has: " + edgeCount); errorCount++; continue; } @@ -634,7 +634,7 @@ private void TestRoomGraphGeneration(World world) case 6: // Room 4 has no edges if (edgeCount != 0) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 6 supposed to have no edges. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 6 supposed to have no edges. Instead has: " + edgeCount); errorCount++; continue; } @@ -643,21 +643,21 @@ private void TestRoomGraphGeneration(World world) case 7: // Room 5 has one edge to Room 3 if (edgeCount != 1) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 7 supposed to have 1 edge. Instead has: " + edgeCount); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 7 supposed to have 1 edge. Instead has: " + edgeCount); errorCount++; continue; } if (node.edges[0].node.data != world.RoomManager[3]) { - Debug.ULogErrorChannel("Path_RoomGraph", "Room 7 supposed to have edge to Room 3."); - Debug.ULogErrorChannel("Path_RoomGraph", "Instead has: " + node.edges[0].node.data.ID.ToString()); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Room 7 supposed to have edge to Room 3."); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Instead has: " + node.edges[0].node.data.ID.ToString()); errorCount++; } break; default: - Debug.ULogErrorChannel("Path_RoomGraph", "Unknown room ID: " + r.ID); + UnityDebugger.Debugger.LogError("Path_RoomGraph", "Unknown room ID: " + r.ID); errorCount++; break; } @@ -666,7 +666,7 @@ private void TestRoomGraphGeneration(World world) if (errorCount == 0) { - Debug.ULogChannel("Path_RoomGraph", "TestRoomGraphGeneration completed without errors!"); + UnityDebugger.Debugger.Log("Path_RoomGraph", "TestRoomGraphGeneration completed without errors!"); } } diff --git a/Assets/Scripts/Models/Area/WorldGenerator.cs b/Assets/Scripts/Models/Area/WorldGenerator.cs index 374ef1d62..36c8e70d5 100644 --- a/Assets/Scripts/Models/Area/WorldGenerator.cs +++ b/Assets/Scripts/Models/Area/WorldGenerator.cs @@ -192,7 +192,7 @@ private void ReadXML() } else { - Debug.ULogErrorChannel("WorldGenerator", "Did not find a 'Asteroid' element in the WorldGenerator definition file."); + UnityDebugger.Debugger.LogError("WorldGenerator", "Did not find a 'Asteroid' element in the WorldGenerator definition file."); } if (reader.ReadToNextSibling("StartArea")) @@ -208,7 +208,7 @@ private void ReadXML() } else { - Debug.ULogErrorChannel("WorldGenerator", "Did not find a 'StartArea' element in the WorldGenerator definition file."); + UnityDebugger.Debugger.LogError("WorldGenerator", "Did not find a 'StartArea' element in the WorldGenerator definition file."); } if (reader.ReadToNextSibling("Wallet")) @@ -224,12 +224,12 @@ private void ReadXML() } else { - Debug.ULogErrorChannel("WorldGenerator", "Did not find a 'Wallet' element in the WorldGenerator definition file."); + UnityDebugger.Debugger.LogError("WorldGenerator", "Did not find a 'Wallet' element in the WorldGenerator definition file."); } } else { - Debug.ULogErrorChannel("WorldGenerator", "Did not find a 'WorldGenerator' element in the WorldGenerator definition file."); + UnityDebugger.Debugger.LogError("WorldGenerator", "Did not find a 'WorldGenerator' element in the WorldGenerator definition file."); } } @@ -261,7 +261,7 @@ private void ReadXmlStartArea(XmlReader reader) if (splittedString.Length < startAreaWidth * startAreaHeight) { - Debug.ULogErrorChannel("WorldGenerator", "Error reading 'Tiles' array to short: " + splittedString.Length + " !"); + UnityDebugger.Debugger.LogError("WorldGenerator", "Error reading 'Tiles' array to short: " + splittedString.Length + " !"); break; } diff --git a/Assets/Scripts/Models/Buildable/Components/BuildableComponent.cs b/Assets/Scripts/Models/Buildable/Components/BuildableComponent.cs index 731e697d7..c61471afd 100644 --- a/Assets/Scripts/Models/Buildable/Components/BuildableComponent.cs +++ b/Assets/Scripts/Models/Buildable/Components/BuildableComponent.cs @@ -96,7 +96,7 @@ public static BuildableComponent Deserialize(XmlReader xmlReader) } else { - Debug.ULogErrorChannel(ComponentLogChannel, "There is no deserializer for component '{0}'", componentTypeName); + UnityDebugger.Debugger.LogErrorFormat(ComponentLogChannel, "There is no deserializer for component '{0}'", componentTypeName); return null; } } @@ -120,7 +120,7 @@ public static BuildableComponent Deserialize(JToken jtoken) } else { - Debug.ULogErrorChannel(ComponentLogChannel, "There is no deserializer for component '{0}'", componentTypeName); + UnityDebugger.Debugger.LogErrorFormat(ComponentLogChannel, "There is no deserializer for component '{0}'", componentTypeName); return null; } } @@ -236,7 +236,7 @@ protected bool AreParameterConditionsFulfilled(List conditio foreach (BuildableComponentNameAttribute compNameAttr in attribs) { componentTypes.Add(compNameAttr.ComponentName, type); - Debug.ULogChannel(ComponentLogChannel, "Found component in assembly: {0}", compNameAttr.ComponentName); + UnityDebugger.Debugger.LogFormat(ComponentLogChannel, "Found component in assembly: {0}", compNameAttr.ComponentName); } } } diff --git a/Assets/Scripts/Models/Buildable/Components/Workshop.cs b/Assets/Scripts/Models/Buildable/Components/Workshop.cs index 0daabf251..fea6654a2 100644 --- a/Assets/Scripts/Models/Buildable/Components/Workshop.cs +++ b/Assets/Scripts/Models/Buildable/Components/Workshop.cs @@ -215,7 +215,7 @@ protected override void Initialize() } else { - Debug.ULogWarningChannel(ComponentLogChannel, "Furniture {0} is marked as factory, but has no production chain", ParentFurniture.Name); + UnityDebugger.Debugger.LogWarningFormat(ComponentLogChannel, "Furniture {0} is marked as factory, but has no production chain", ParentFurniture.Name); } } @@ -279,7 +279,7 @@ private void UnlockInventoryAtInput(Furniture furniture) if (tile.Inventory != null && tile.Inventory.Locked) { tile.Inventory.Locked = false; - Debug.ULogChannel(ComponentLogChannel, "Inventory {0} at tile {1} is unlocked", tile.Inventory, tile); + UnityDebugger.Debugger.LogFormat(ComponentLogChannel, "Inventory {0} at tile {1} is unlocked", tile.Inventory, tile); } } } diff --git a/Assets/Scripts/Models/Buildable/Furniture.cs b/Assets/Scripts/Models/Buildable/Furniture.cs index 350cf5bfb..fa5019a6e 100644 --- a/Assets/Scripts/Models/Buildable/Furniture.cs +++ b/Assets/Scripts/Models/Buildable/Furniture.cs @@ -402,7 +402,7 @@ public static Furniture PlaceInstance(Furniture proto, Tile tile) { if (proto.IsValidPosition(tile) == false) { - Debug.ULogWarningChannel("Furniture", "PlaceInstance :: Position Validity Function returned FALSE. " + proto.Name + " " + tile.X + ", " + tile.Y + ", " + tile.Z); + UnityDebugger.Debugger.LogWarning("Furniture", "PlaceInstance :: Position Validity Function returned FALSE. " + proto.Name + " " + tile.X + ", " + tile.Y + ", " + tile.Z); return null; } @@ -565,7 +565,7 @@ public void SetAnimationProgressValue(float currentValue, float maxValue) if (maxValue == 0) { - Debug.ULogError("SetAnimationProgressValue maxValue is zero"); + UnityDebugger.Debugger.LogError("SetAnimationProgressValue maxValue is zero"); } float percent = Mathf.Clamp01(currentValue / maxValue); @@ -893,7 +893,7 @@ public RequestedItem[] AcceptsForStorage() { if (HasTypeTag("Storage") == false) { - Debug.ULogChannel("Stockpile_messages", "Someone is asking a non-stockpile to store stuff!?"); + UnityDebugger.Debugger.Log("Stockpile_messages", "Someone is asking a non-stockpile to store stuff!?"); return null; } diff --git a/Assets/Scripts/Models/Buildable/FurnitureManager.cs b/Assets/Scripts/Models/Buildable/FurnitureManager.cs index f8f221e20..0f82d6441 100644 --- a/Assets/Scripts/Models/Buildable/FurnitureManager.cs +++ b/Assets/Scripts/Models/Buildable/FurnitureManager.cs @@ -52,7 +52,7 @@ public Furniture PlaceFurniture(string type, Tile tile, bool doRoomFloodFill = t { if (PrototypeManager.Furniture.Has(type) == false) { - Debug.ULogErrorChannel("World", "furniturePrototypes doesn't contain a proto for key: " + type); + UnityDebugger.Debugger.LogError("World", "furniturePrototypes doesn't contain a proto for key: " + type); return null; } diff --git a/Assets/Scripts/Models/Buildable/Tile.cs b/Assets/Scripts/Models/Buildable/Tile.cs index 83d0858de..c6cfba0a8 100644 --- a/Assets/Scripts/Models/Buildable/Tile.cs +++ b/Assets/Scripts/Models/Buildable/Tile.cs @@ -202,7 +202,7 @@ public bool PlaceFurniture(Furniture objInstance) if (objInstance.IsValidPosition(this) == false) { - Debug.ULogErrorChannel("Tile", "Trying to assign a furniture to a tile that isn't valid!"); + UnityDebugger.Debugger.LogError("Tile", "Trying to assign a furniture to a tile that isn't valid!"); return false; } @@ -223,7 +223,7 @@ public bool UnplaceUtility(Utility utility) // Just uninstalling. if (Utilities == null) { - Debug.ULogErrorChannel("Tile", "Utilities null when trying to unplace a Utility, this should never happen!"); + UnityDebugger.Debugger.LogError("Tile", "Utilities null when trying to unplace a Utility, this should never happen!"); return false; } @@ -241,7 +241,7 @@ public bool PlaceUtility(Utility objInstance) if (objInstance.IsValidPosition(this) == false) { - Debug.ULogErrorChannel("Tile", "Trying to assign a furniture to a tile that isn't valid!"); + UnityDebugger.Debugger.LogError("Tile", "Trying to assign a furniture to a tile that isn't valid!"); return false; } @@ -263,7 +263,7 @@ public bool PlaceInventory(Inventory inventory) // There's already inventory here. Maybe we can combine a stack? if (Inventory.Type != inventory.Type) { - Debug.ULogErrorChannel("Tile", "Trying to assign inventory to a tile that already has some of a different type."); + UnityDebugger.Debugger.LogError("Tile", "Trying to assign inventory to a tile that already has some of a different type."); return false; } diff --git a/Assets/Scripts/Models/Buildable/TileType.cs b/Assets/Scripts/Models/Buildable/TileType.cs index 7adb356d8..eef47961c 100644 --- a/Assets/Scripts/Models/Buildable/TileType.cs +++ b/Assets/Scripts/Models/Buildable/TileType.cs @@ -163,7 +163,7 @@ public bool CanBuildHere(Tile tile) return value.Boolean; } - Debug.ULogChannel("Lua", "Found no lua function " + CanBuildHereLua); + UnityDebugger.Debugger.Log("Lua", "Found no lua function " + CanBuildHereLua); return false; } @@ -232,7 +232,7 @@ private void ReadBuildingJob(XmlReader parentReader) float jobTimeValue; if (float.TryParse(jobTime, out jobTimeValue) == false) { - Debug.ULogErrorChannel(ULogChanelName, "Could not load jobTime for TyleType: {0} -- jobTime readed {1}", Type, jobTime); + UnityDebugger.Debugger.LogErrorFormat(ULogChanelName, "Could not load jobTime for TyleType: {0} -- jobTime readed {1}", Type, jobTime); return; } @@ -255,7 +255,7 @@ private void ReadBuildingJob(XmlReader parentReader) } else { - Debug.ULogErrorChannel(ULogChanelName, "Could not load Inventory item for TyleType: {0}", Type); + UnityDebugger.Debugger.LogErrorFormat(ULogChanelName, "Could not load Inventory item for TyleType: {0}", Type); } } diff --git a/Assets/Scripts/Models/Buildable/Utility.cs b/Assets/Scripts/Models/Buildable/Utility.cs index 6ea3285e5..b15e59164 100644 --- a/Assets/Scripts/Models/Buildable/Utility.cs +++ b/Assets/Scripts/Models/Buildable/Utility.cs @@ -236,7 +236,7 @@ public static Utility PlaceInstance(Utility proto, Tile tile, bool skipGridUpdat { if (proto.IsValidPosition(tile) == false) { - Debug.ULogErrorChannel("Utility", "PlaceInstance -- Position Validity Function returned FALSE. " + proto.Name + " " + tile.X + ", " + tile.Y + ", " + tile.Z); + UnityDebugger.Debugger.LogError("Utility", "PlaceInstance -- Position Validity Function returned FALSE. " + proto.Name + " " + tile.X + ", " + tile.Y + ", " + tile.Z); return null; } diff --git a/Assets/Scripts/Models/Buildable/UtilityManager.cs b/Assets/Scripts/Models/Buildable/UtilityManager.cs index b16d3a839..7b0a84d0f 100644 --- a/Assets/Scripts/Models/Buildable/UtilityManager.cs +++ b/Assets/Scripts/Models/Buildable/UtilityManager.cs @@ -39,7 +39,7 @@ public Utility PlaceUtility(string type, Tile tile, bool skipGridUpdate = false) { if (PrototypeManager.Utility.Has(type) == false) { - Debug.ULogErrorChannel("World", "PrototypeManager.Utility doesn't contain a proto for key: " + type); + UnityDebugger.Debugger.LogError("World", "PrototypeManager.Utility doesn't contain a proto for key: " + type); return null; } diff --git a/Assets/Scripts/Models/Character/Character.cs b/Assets/Scripts/Models/Character/Character.cs index b816ac22f..6840a28a6 100644 --- a/Assets/Scripts/Models/Character/Character.cs +++ b/Assets/Scripts/Models/Character/Character.cs @@ -240,7 +240,7 @@ public IEnumerable GetContextMenuActions(ContextMenu contextM { LocalizationKey = "Poke " + GetName(), RequireCharacterSelected = false, - Action = (cm, c) => { Debug.ULogChannel("Character", GetDescription()); health.CurrentHealth -= 5; } + Action = (cm, c) => { UnityDebugger.Debugger.Log("Character", GetDescription()); health.CurrentHealth -= 5; } }; yield return new ContextMenuAction @@ -499,7 +499,7 @@ public void ReadStatsFromSave(XmlReader reader) int statValue; if (!int.TryParse(reader.GetAttribute("value"), out statValue)) { - Debug.ULogErrorChannel("Character", "Stat element did not have a value!"); + UnityDebugger.Debugger.LogError("Character", "Stat element did not have a value!"); continue; } @@ -556,7 +556,7 @@ private void LoadStats() stats.Add(newStat.Type, newStat); } - Debug.ULogChannel("Character", "Initialized " + stats.Count + " Stats."); + UnityDebugger.Debugger.Log("Character", "Initialized " + stats.Count + " Stats."); } /// diff --git a/Assets/Scripts/Models/DialogBoxInformation/DialogButton.cs b/Assets/Scripts/Models/DialogBoxInformation/DialogButton.cs index 3b69ad73b..e44592251 100644 --- a/Assets/Scripts/Models/DialogBoxInformation/DialogButton.cs +++ b/Assets/Scripts/Models/DialogBoxInformation/DialogButton.cs @@ -18,11 +18,11 @@ public void OnClicked() buttonName = buttonName.Replace(" ", "_"); EventActions dialogEvents = transform.GetComponentInParent().events; - Debug.ULogChannel("ModDialogBox", "Calling On" + buttonName + "Clicked function"); + UnityDebugger.Debugger.Log("ModDialogBox", "Calling On" + buttonName + "Clicked function"); if (dialogEvents.HasEvent("On" + buttonName + "Clicked") == true) { - Debug.ULogChannel("ModDialogBox", "Found On" + buttonName + "Clicked event"); + UnityDebugger.Debugger.Log("ModDialogBox", "Found On" + buttonName + "Clicked event"); dialogEvents.Trigger("On" + buttonName + "Clicked", transform.GetComponentInParent()); } } diff --git a/Assets/Scripts/Models/Events/AutosaveManager.cs b/Assets/Scripts/Models/Events/AutosaveManager.cs index 2b29fcd35..a6f1a16f5 100644 --- a/Assets/Scripts/Models/Events/AutosaveManager.cs +++ b/Assets/Scripts/Models/Events/AutosaveManager.cs @@ -108,10 +108,10 @@ public void DoAutosave(ScheduledEvent evt) } string filePath = Path.Combine(saveDir.ToString(), fileName + ".sav"); - Debug.ULogChannel("AutosaveManager", "Autosaving to '{0}'.", filePath); + UnityDebugger.Debugger.LogFormat("AutosaveManager", "Autosaving to '{0}'.", filePath); if (File.Exists(filePath) == true) { - Debug.ULogErrorChannel("AutosaveManager", "File already exists -- overwriting the file for now."); + UnityDebugger.Debugger.LogError("AutosaveManager", "File already exists -- overwriting the file for now."); } WorldController.Instance.SaveWorld(filePath); diff --git a/Assets/Scripts/Models/Events/EventAction.cs b/Assets/Scripts/Models/Events/EventAction.cs index 3470837f5..d2310e1f2 100644 --- a/Assets/Scripts/Models/Events/EventAction.cs +++ b/Assets/Scripts/Models/Events/EventAction.cs @@ -44,19 +44,19 @@ public void ReadXml(XmlReader reader) reader.Read(); if (reader.Name != "Action") { - Debug.ULogErrorChannel("EventActions", string.Format("The element is not an Action, but a \"{0}\"", reader.Name)); + UnityDebugger.Debugger.LogError("EventActions", string.Format("The element is not an Action, but a \"{0}\"", reader.Name)); } string name = reader.GetAttribute("event"); if (name == null) { - Debug.ULogErrorChannel("EventActions", string.Format("The attribute \"event\" is a mandatory for an \"Action\" element.")); + UnityDebugger.Debugger.LogError("EventActions", string.Format("The attribute \"event\" is a mandatory for an \"Action\" element.")); } string functionName = reader.GetAttribute("functionName"); if (functionName == null) { - Debug.ULogErrorChannel("EventActions", string.Format("No function name was provided for the Action {0}.", name)); + UnityDebugger.Debugger.LogError("EventActions", string.Format("No function name was provided for the Action {0}.", name)); } Register(name, functionName); diff --git a/Assets/Scripts/Models/Events/TimeManager.cs b/Assets/Scripts/Models/Events/TimeManager.cs index 67a207aeb..82f8a75b1 100644 --- a/Assets/Scripts/Models/Events/TimeManager.cs +++ b/Assets/Scripts/Models/Events/TimeManager.cs @@ -158,7 +158,7 @@ public void SetTimeScalePosition(int newTimeScalePosition) { timeScalePosition = newTimeScalePosition; TimeScale = possibleTimeScales[newTimeScalePosition]; - Debug.ULogChannel("Game speed", "Game speed set to " + TimeScale + "x"); + UnityDebugger.Debugger.Log("Game speed", "Game speed set to " + TimeScale + "x"); } } diff --git a/Assets/Scripts/Models/Functions/CSharpFunctions.cs b/Assets/Scripts/Models/Functions/CSharpFunctions.cs index 1f6efaed2..39ac4ede4 100644 --- a/Assets/Scripts/Models/Functions/CSharpFunctions.cs +++ b/Assets/Scripts/Models/Functions/CSharpFunctions.cs @@ -83,7 +83,7 @@ public bool LoadScript(string text, string scriptName) { if (CompilationResult.HasErrors) { - Debug.ULogErrorChannel( + UnityDebugger.Debugger.LogError( "CSharp", string.Format("[{0}] CSharp compile errors ({1}): {2}", scriptName, CompilationResult.Errors.Count, CompilationResult.GetErrorsLog())); } @@ -123,7 +123,7 @@ public void CallWithInstance(string[] functionNames, object instance, params obj { if (fn == null) { - Debug.ULogErrorChannel("CSharp", "'" + fn + "' is not a CSharp function."); + UnityDebugger.Debugger.LogError("CSharp", "'" + fn + "' is not a CSharp function."); return; } @@ -136,7 +136,7 @@ public void CallWithInstance(string[] functionNames, object instance, params obj if (result != null && result.Type == DataType.String) { - Debug.ULogErrorChannel("CSharp", result.String); + UnityDebugger.Debugger.LogError("CSharp", result.String); } } } diff --git a/Assets/Scripts/Models/Functions/Functions.cs b/Assets/Scripts/Models/Functions/Functions.cs index e6831e5b3..ca70aae5a 100644 --- a/Assets/Scripts/Models/Functions/Functions.cs +++ b/Assets/Scripts/Models/Functions/Functions.cs @@ -81,8 +81,7 @@ public T Call(string functionName, params object[] args) } else { - Debug.ULogChannel(ModFunctionsLogChannel, "'" + functionName + "' is not a LUA nor CSharp function!"); - + UnityDebugger.Debugger.Log(ModFunctionsLogChannel, "'" + functionName + "' is not a LUA nor CSharp function!"); return default(T); } } @@ -93,7 +92,7 @@ public void CallWithInstance(string[] functionNames, object instance, params obj { if (fn == null) { - Debug.ULogErrorChannel(ModFunctionsLogChannel, "'" + fn + "' is not a LUA nor CSharp function!"); + UnityDebugger.Debugger.LogError(ModFunctionsLogChannel, "'" + fn + "' is not a LUA nor CSharp function!"); return; } @@ -106,7 +105,7 @@ public void CallWithInstance(string[] functionNames, object instance, params obj if (result != null && result.Type == DataType.String) { - Debug.ULogErrorChannel(ModFunctionsLogChannel, result.String); + UnityDebugger.Debugger.LogError(ModFunctionsLogChannel, result.String); } } } @@ -128,7 +127,7 @@ private DynValue Call(string functionName, bool throwError, params object[] args } else { - Debug.ULogChannel(ModFunctionsLogChannel, "'" + functionName + "' is not a LUA nor is it a CSharp function!"); + UnityDebugger.Debugger.Log(ModFunctionsLogChannel, "'" + functionName + "' is not a LUA nor is it a CSharp function!"); if (throwError) { diff --git a/Assets/Scripts/Models/Functions/LuaFunctions.cs b/Assets/Scripts/Models/Functions/LuaFunctions.cs index 3cfd70521..f8bfb7dea 100644 --- a/Assets/Scripts/Models/Functions/LuaFunctions.cs +++ b/Assets/Scripts/Models/Functions/LuaFunctions.cs @@ -64,7 +64,7 @@ public bool LoadScript(string text, string scriptName) } catch (SyntaxErrorException e) { - Debug.ULogErrorChannel("Lua", "[" + scriptName + "] LUA Parse error: " + e.DecoratedMessage); + UnityDebugger.Debugger.LogError("Lua", "[" + scriptName + "] LUA Parse error: " + e.DecoratedMessage); return false; } @@ -97,14 +97,14 @@ public void CallWithInstance(string[] functionNames, object instance, params obj if (instance == null) { // These errors are about the lua code so putting them in the Lua channel. - Debug.ULogErrorChannel("Lua", "Instance is null, cannot call LUA function (something is fishy)."); + UnityDebugger.Debugger.LogError("Lua", "Instance is null, cannot call LUA function (something is fishy)."); } foreach (string fn in functionNames) { if (fn == null) { - Debug.ULogErrorChannel("Lua", "'" + fn + "' is not a LUA function."); + UnityDebugger.Debugger.LogError("Lua", "'" + fn + "' is not a LUA function."); return; } @@ -118,7 +118,7 @@ public void CallWithInstance(string[] functionNames, object instance, params obj } catch (ScriptRuntimeException e) { - Debug.ULogErrorChannel("Lua", "[" + scriptName + "] LUA RunTime error: " + e.DecoratedMessage); + UnityDebugger.Debugger.LogError("Lua", "[" + scriptName + "] LUA RunTime error: " + e.DecoratedMessage); } } } @@ -143,7 +143,7 @@ private DynValue Call(string functionName, bool throwError, params object[] args } catch (ScriptRuntimeException e) { - Debug.ULogErrorChannel("Lua", "[" + scriptName + "] LUA RunTime error: " + e.DecoratedMessage); + UnityDebugger.Debugger.LogError("Lua", "[" + scriptName + "] LUA RunTime error: " + e.DecoratedMessage); return null; } } diff --git a/Assets/Scripts/Models/InputOutput/AudioManager.cs b/Assets/Scripts/Models/InputOutput/AudioManager.cs index eb6e17b28..b305ac15b 100644 --- a/Assets/Scripts/Models/InputOutput/AudioManager.cs +++ b/Assets/Scripts/Models/InputOutput/AudioManager.cs @@ -91,7 +91,7 @@ public static SoundClip GetAudio(string categoryName, string audioName) { try { - Debug.LogWarning("No audio available called: " + audioNameAndCategory, null); + UnityDebugger.Debugger.LogWarning("No audio available called: " + audioNameAndCategory); clip = audioClips["Sound/Error"]; } catch diff --git a/Assets/Scripts/Models/InputOutput/SoundClip.cs b/Assets/Scripts/Models/InputOutput/SoundClip.cs index 55f9ee952..3a0795134 100644 --- a/Assets/Scripts/Models/InputOutput/SoundClip.cs +++ b/Assets/Scripts/Models/InputOutput/SoundClip.cs @@ -46,7 +46,7 @@ public Sound Get() { if (clips == null || clips.Count == 0) { - Debug.ULogErrorChannel("Audio", "Attempting to access an empty SoundClip."); + UnityDebugger.Debugger.LogError("Audio", "Attempting to access an empty SoundClip."); return null; } diff --git a/Assets/Scripts/Models/InputOutput/SpriteManager.cs b/Assets/Scripts/Models/InputOutput/SpriteManager.cs index b07822b29..48ed806d1 100644 --- a/Assets/Scripts/Models/InputOutput/SpriteManager.cs +++ b/Assets/Scripts/Models/InputOutput/SpriteManager.cs @@ -61,7 +61,7 @@ public static Sprite GetSprite(string categoryName, string spriteName) else { sprite = Sprite.Create(noResourceTexture, new Rect(Vector2.zero, new Vector3(32, 32)), new Vector2(0.5f, 0.5f), 32); - Debug.ULogWarning("No sprite: {0}, using fallback sprite.", spriteName); + UnityDebugger.Debugger.LogWarningFormat("SpriteManager", "No sprite: {0}, using fallback sprite.", spriteName); } return sprite; @@ -184,7 +184,7 @@ private static void LoadImage(string spriteCategory, string filePath) } else { - Debug.ULogErrorChannel("SpriteManager", "Could not find a tag."); + UnityDebugger.Debugger.LogError("SpriteManager", "Could not find a tag."); return; } } diff --git a/Assets/Scripts/Models/Inventory/Inventory.cs b/Assets/Scripts/Models/Inventory/Inventory.cs index 0ad54863b..122df2f33 100644 --- a/Assets/Scripts/Models/Inventory/Inventory.cs +++ b/Assets/Scripts/Models/Inventory/Inventory.cs @@ -145,7 +145,7 @@ public IEnumerable GetContextMenuActions(ContextMenu contextM { LocalizationKey = "Sample Item Context action", RequireCharacterSelected = true, - Action = (cm, c) => Debug.ULogChannel("Inventory", "Sample menu action") + Action = (cm, c) => UnityDebugger.Debugger.Log("Inventory", "Sample menu action") }; } diff --git a/Assets/Scripts/Models/Inventory/InventoryManager.cs b/Assets/Scripts/Models/Inventory/InventoryManager.cs index 7efa9f68a..eb8b6311d 100644 --- a/Assets/Scripts/Models/Inventory/InventoryManager.cs +++ b/Assets/Scripts/Models/Inventory/InventoryManager.cs @@ -149,7 +149,7 @@ public bool PlaceInventory(Job job, Character character) // Check that it's wanted by the job if (job.RequestedItems.ContainsKey(sourceInventory.Type) == false) { - Debug.ULogErrorChannel(InventoryManagerLogChanel, "Trying to add inventory to a job that it doesn't want."); + UnityDebugger.Debugger.LogError(InventoryManagerLogChanel, "Trying to add inventory to a job that it doesn't want."); return false; } @@ -187,7 +187,7 @@ public bool PlaceInventory(Character character, Inventory sourceInventory, int a } else if (character.inventory.Type != sourceInventory.Type) { - Debug.ULogErrorChannel(InventoryManagerLogChanel, "Character is trying to pick up a mismatched inventory object type."); + UnityDebugger.Debugger.LogError(InventoryManagerLogChanel, "Character is trying to pick up a mismatched inventory object type."); return false; } diff --git a/Assets/Scripts/Models/Job/Job.cs b/Assets/Scripts/Models/Job/Job.cs index 1c608c885..830ce896e 100644 --- a/Assets/Scripts/Models/Job/Job.cs +++ b/Assets/Scripts/Models/Job/Job.cs @@ -555,10 +555,10 @@ public void ReadXmlPrototype(XmlReader reader) public void FSMLogRequirements() { - Debug.ULogChannel("FSM", " - {0} {1}", Type, acceptsAny ? "Any" : "All"); + UnityDebugger.Debugger.Log("FSM", string.Format(" - {0} {1}", Type, acceptsAny ? "Any" : "All")); foreach (RequestedItem item in RequestedItems.Values) { - Debug.ULogChannel("FSM", " - {0}, min: {1}, max: {2}", item.Type, item.MinAmountRequested, item.MaxAmountRequested); + UnityDebugger.Debugger.Log("FSM", string.Format(" - {0}, min: {1}, max: {2}", item.Type, item.MinAmountRequested, item.MaxAmountRequested)); } } } diff --git a/Assets/Scripts/Models/Job/JobQueue.cs b/Assets/Scripts/Models/Job/JobQueue.cs index 4f273f306..5548fdd30 100644 --- a/Assets/Scripts/Models/Job/JobQueue.cs +++ b/Assets/Scripts/Models/Job/JobQueue.cs @@ -131,14 +131,14 @@ public Job GetJob(Character character) { if (CharacterCantReachHelper(job, character)) { - Debug.ULogError("Character could not find a path to the job site."); + UnityDebugger.Debugger.LogError("Character could not find a path to the job site."); ReInsertHelper(job); continue; } else if ((job.RequestedItems.Count > 0) && !job.CanGetToInventory(character)) { job.AddCharCantReach(character); - Debug.ULogError("Character could not find a path to any inventory available."); + UnityDebugger.Debugger.LogError("Character could not find a path to any inventory available."); ReInsertHelper(job); continue; } @@ -273,6 +273,6 @@ private void ReInsertHelper(Job job) [System.Diagnostics.Conditional("FSM_DEBUG_LOG")] private void DebugLog(string message, params object[] par) { - Debug.ULogChannel("FSM", message, par); + UnityDebugger.Debugger.LogFormat("FSM", message, par); } } diff --git a/Assets/Scripts/Models/Prototypes/PrototypeMap.cs b/Assets/Scripts/Models/Prototypes/PrototypeMap.cs index 8af2aedb2..15ef30c46 100644 --- a/Assets/Scripts/Models/Prototypes/PrototypeMap.cs +++ b/Assets/Scripts/Models/Prototypes/PrototypeMap.cs @@ -6,11 +6,13 @@ // file LICENSE, which is part of this source code package, for details. // ==================================================== #endregion + using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml; +using UnityEngine; /// /// A class that holds prototypes to be used later. @@ -132,7 +134,7 @@ public void Add(T proto) { if (Has(proto.Type)) { - Debug.ULogWarningChannel("PrototypeMap", "Trying to register a prototype of type '{0}' which already exists. Overwriting.", proto.Type); + UnityDebugger.Debugger.LogWarningFormat("PrototypeMap", "Trying to register a prototype of type '{0}' which already exists. Overwriting.", proto.Type); } Set(proto); @@ -158,12 +160,12 @@ public void LoadPrototypes(string xmlText) } else { - Debug.ULogErrorChannel("PrototypeMap", "The '" + listTag + "' prototype definition file doesn't have any '" + elementTag + "' elements."); + UnityDebugger.Debugger.LogError("PrototypeMap", "The '" + listTag + "' prototype definition file doesn't have any '" + elementTag + "' elements."); } } else { - Debug.ULogErrorChannel("PrototypeMap", "Did not find a '" + listTag + "' element in the prototype definition file."); + UnityDebugger.Debugger.LogError("PrototypeMap", "Did not find a '" + listTag + "' element in the prototype definition file."); } } diff --git a/Assets/Scripts/Models/Scheduler/ScheduledEvent.cs b/Assets/Scripts/Models/Scheduler/ScheduledEvent.cs index c284f34b2..738f5ba34 100644 --- a/Assets/Scripts/Models/Scheduler/ScheduledEvent.cs +++ b/Assets/Scripts/Models/Scheduler/ScheduledEvent.cs @@ -238,7 +238,7 @@ public void Fire() { if (Finished) { - Debug.ULogChannel("ScheduledEvent", "Scheduled event '" + Name + "' finished last repeat already -- not firing again."); + UnityDebugger.Debugger.Log("ScheduledEvent", "Scheduled event '" + Name + "' finished last repeat already -- not firing again."); return; } diff --git a/Assets/Scripts/Models/Scheduler/Scheduler.cs b/Assets/Scripts/Models/Scheduler/Scheduler.cs index 2f1873b38..9c22067fa 100644 --- a/Assets/Scripts/Models/Scheduler/Scheduler.cs +++ b/Assets/Scripts/Models/Scheduler/Scheduler.cs @@ -91,7 +91,7 @@ public void ScheduleEvent(string name, float cooldown, float timeToWait, bool re { if (PrototypeManager.ScheduledEvent.Has(name) == false) { - Debug.ULogWarningChannel("Scheduler", "Tried to schedule an event from a prototype '{0}' which does not exist. Bailing.", name); + UnityDebugger.Debugger.LogWarningFormat("Scheduler", "Tried to schedule an event from a prototype '{0}' which does not exist. Bailing.", name); return; } @@ -110,7 +110,7 @@ public void RegisterEvent(ScheduledEvent evt) { if (IsRegistered(evt)) { - Debug.ULogChannel("Scheduler", "Event '{0}' registered more than once.", evt.Name); + UnityDebugger.Debugger.LogFormat("Scheduler", "Event '{0}' registered more than once.", evt.Name); } eventsToAddNextTick.Add(evt); diff --git a/Assets/Scripts/Models/Settings.cs b/Assets/Scripts/Models/Settings.cs index d2d3002f3..0d89d18ff 100644 --- a/Assets/Scripts/Models/Settings.cs +++ b/Assets/Scripts/Models/Settings.cs @@ -55,7 +55,7 @@ public static string GetSettingWithOverwrite(string key, string defaultValue) { if (settingsDict == null) { - Debug.ULogErrorChannel("Settings", "Settings Dictionary was not loaded!"); + UnityDebugger.Debugger.LogError("Settings", "Settings Dictionary was not loaded!"); return defaultValue; } @@ -81,7 +81,7 @@ public static void SetSetting(string key, string value) { if (settingsDict == null) { - Debug.ULogErrorChannel("Settings", "Settings Dictionary was not loaded!"); + UnityDebugger.Debugger.LogError("Settings", "Settings Dictionary was not loaded!"); return; } @@ -91,13 +91,13 @@ public static void SetSetting(string key, string value) // update the setting. settingsDict.Remove(key); settingsDict.Add(key, value); - Debug.ULogChannel("Settings", "Updated setting : " + key + " to value of " + value); + UnityDebugger.Debugger.Log("Settings", "Updated setting : " + key + " to value of " + value); } else { // add a new setting to the dict. settingsDict.Add(key, value); - Debug.ULogChannel("Settings", "Created new setting : " + key + " to value of " + value); + UnityDebugger.Debugger.Log("Settings", "Created new setting : " + key + " to value of " + value); } } @@ -106,7 +106,7 @@ public static T GetSetting(string key, T defaultValue) { if (settingsDict == null) { - Debug.ULogErrorChannel("Settings", "Settings Dictionary was not loaded!"); + UnityDebugger.Debugger.LogError("Settings", "Settings Dictionary was not loaded!"); return defaultValue; } @@ -120,21 +120,21 @@ public static T GetSetting(string key, T defaultValue) } catch (Exception exception) { - Debug.ULogErrorChannel("Settings", "Exception {0} whyle trying to convert {1} to type {2}", exception.Message, value, typeof(T)); + UnityDebugger.Debugger.LogErrorFormat("Settings", "Exception {0} whyle trying to convert {1} to type {2}", exception.Message, value, typeof(T)); return defaultValue; } } - Debug.ULogWarningChannel("Settings", "Attempted to access a setting that was not loaded from Settings.json:\t" + key); + UnityDebugger.Debugger.LogWarning("Settings", "Attempted to access a setting that was not loaded from Settings.json:\t" + key); return defaultValue; } public static void SaveSettings() { - Debug.ULogChannel("Settings", "Settings have changed, so there are settings to save!"); + UnityDebugger.Debugger.Log("Settings", "Settings have changed, so there are settings to save!"); string jsonData = JsonConvert.SerializeObject(settingsDict, Newtonsoft.Json.Formatting.Indented); - Debug.ULogChannel("Settings", "Saving settings :: " + jsonData); + UnityDebugger.Debugger.Log("Settings", "Saving settings :: " + jsonData); // Save the document. try @@ -146,8 +146,8 @@ public static void SaveSettings() } catch (Exception e) { - Debug.ULogWarningChannel("Settings", "Settings could not be saved to " + userSettingsFilePath); - Debug.ULogWarningChannel("Settings", e.Message); + UnityDebugger.Debugger.LogWarning("Settings", "Settings could not be saved to " + userSettingsFilePath); + UnityDebugger.Debugger.LogWarning("Settings", e.Message); } } @@ -161,7 +161,7 @@ public static void LoadSettings() // If that doesn't work fall back to the hard coded FallbackSettingJson above. if (System.IO.File.Exists(userSettingsFilePath) == false) { - Debug.ULogChannel("Settings", "User settings file could not be found at '" + userSettingsFilePath + "'. Falling back to defaults."); + UnityDebugger.Debugger.Log("Settings", "User settings file could not be found at '" + userSettingsFilePath + "'. Falling back to defaults."); settingsJsonText = DefaultSettingsJsonFallback(); } @@ -173,8 +173,8 @@ public static void LoadSettings() } catch (Exception e) { - Debug.ULogWarningChannel("Settings", "User settings file could not be found at '" + userSettingsFilePath + "'. Falling back to defaults."); - Debug.ULogWarningChannel("Settings", e.Message); + UnityDebugger.Debugger.LogWarning("Settings", "User settings file could not be found at '" + userSettingsFilePath + "'. Falling back to defaults."); + UnityDebugger.Debugger.LogWarning("Settings", e.Message); settingsJsonText = DefaultSettingsJsonFallback(); } @@ -189,7 +189,7 @@ private static string DefaultSettingsJsonFallback() if (System.IO.File.Exists(DefaultSettingsFilePath) == false) { - Debug.ULogWarningChannel("Settings", "Default settings file could not be found at '" + DefaultSettingsFilePath + "'. Falling back to Settings.cs defaults."); + UnityDebugger.Debugger.LogWarning("Settings", "Default settings file could not be found at '" + DefaultSettingsFilePath + "'. Falling back to Settings.cs defaults."); try { @@ -197,8 +197,8 @@ private static string DefaultSettingsJsonFallback() } catch (Exception e) { - Debug.ULogWarningChannel("Settings", "Default settings file could not be created at '" + DefaultSettingsFilePath + "'."); - Debug.ULogWarningChannel("Settings", e.Message); + UnityDebugger.Debugger.LogWarning("Settings", "Default settings file could not be created at '" + DefaultSettingsFilePath + "'."); + UnityDebugger.Debugger.LogWarning("Settings", e.Message); } } else @@ -209,8 +209,8 @@ private static string DefaultSettingsJsonFallback() } catch (Exception e) { - Debug.ULogWarningChannel("Settings", "Settings file at '" + DefaultSettingsFilePath + "' could not be read. Falling back to Settings.cs defaults."); - Debug.ULogWarningChannel("Settings", e.Message); + UnityDebugger.Debugger.LogWarning("Settings", "Settings file at '" + DefaultSettingsFilePath + "' could not be read. Falling back to Settings.cs defaults."); + UnityDebugger.Debugger.LogWarning("Settings", e.Message); } } diff --git a/Assets/Scripts/Models/Ships/Ship.cs b/Assets/Scripts/Models/Ships/Ship.cs index a56565095..42dde5586 100644 --- a/Assets/Scripts/Models/Ships/Ship.cs +++ b/Assets/Scripts/Models/Ships/Ship.cs @@ -238,7 +238,7 @@ public void SetDestination(Furniture goalBerth) { if (goalBerth == null) { - Debug.ULogError("Ships", "Destination berth should not be set to null this way. Use Berth property or SetDestination(x,y) instead."); + UnityDebugger.Debugger.LogError("Ships", "Destination berth should not be set to null this way. Use Berth property or SetDestination(x,y) instead."); return; } @@ -297,7 +297,7 @@ public void UnwrapAtBerth() // Change tile to defined contents if (tile.Type.Equals(TileType.Empty) == false || tile.Furniture != null) { - Debug.ULogErrorChannel("Ships", "Tile " + tile.X + "," + tile.Y + " is not empty. Replacing anyway."); + UnityDebugger.Debugger.LogError("Ships", "Tile " + tile.X + "," + tile.Y + " is not empty. Replacing anyway."); } tile.SetTileType(PrototypeManager.TileType.Get(tileTypes[x, y])); @@ -432,7 +432,7 @@ private Tile GetTile(World world, Furniture berth, int x, int y, int z) default: worldX = 0; worldY = 0; - Debug.ULogErrorChannel("Ships", "Invalid berthing direction: " + BerthDirection); + UnityDebugger.Debugger.LogError("Ships", "Invalid berthing direction: " + BerthDirection); break; } diff --git a/Assets/Scripts/Models/Ships/ShipManager.cs b/Assets/Scripts/Models/Ships/ShipManager.cs index df0ae81b6..6061698a1 100644 --- a/Assets/Scripts/Models/Ships/ShipManager.cs +++ b/Assets/Scripts/Models/Ships/ShipManager.cs @@ -67,7 +67,7 @@ public Ship AddShip(string type, float x, float y) { if (PrototypeManager.Ship.Has(type) == false) { - Debug.ULogErrorChannel("Ships", "Prototype `" + type + "` does not exist"); + UnityDebugger.Debugger.LogError("Ships", "Prototype `" + type + "` does not exist"); return null; } @@ -139,7 +139,7 @@ public void DeberthShip(Furniture berth) { if (berthShipMap.ContainsKey(berth) == false || berthShipMap[berth] == null) { - Debug.ULogErrorChannel("Ships", "No ship berthed here: " + berth.Tile.ToString()); + UnityDebugger.Debugger.LogError("Ships", "No ship berthed here: " + berth.Tile.ToString()); return; } diff --git a/Assets/Scripts/Pathfinding/Path_AStar.cs b/Assets/Scripts/Pathfinding/Path_AStar.cs index b3df7c5ce..eda8e203a 100644 --- a/Assets/Scripts/Pathfinding/Path_AStar.cs +++ b/Assets/Scripts/Pathfinding/Path_AStar.cs @@ -20,7 +20,7 @@ public Path_AStar(Queue path) { if (path == null || !path.Any()) { - Debug.ULogWarningChannel("Path_AStar", "Created path with no tiles, is this intended?"); + UnityDebugger.Debugger.LogWarning("Path_AStar", "Created path with no tiles, is this intended?"); } this.path = path; @@ -55,7 +55,7 @@ public Path_AStar(World world, Tile tileStart, Pathfinder.GoalEvaluator isGoal, // Make sure our start/end tiles are in the list of nodes! if (nodes.ContainsKey(tileStart) == false) { - Debug.ULogErrorChannel("Path_AStar", "The starting tile isn't in the list of nodes!"); + UnityDebugger.Debugger.LogError("Path_AStar", "The starting tile isn't in the list of nodes!"); return; } @@ -141,13 +141,13 @@ public Tile Dequeue() { if (path == null) { - Debug.ULogErrorChannel("Path_AStar", "Attempting to dequeue from an null path."); + UnityDebugger.Debugger.LogError("Path_AStar", "Attempting to dequeue from an null path."); return null; } if (path.Count <= 0) { - Debug.ULogErrorChannel("Path_AStar", "Path queue is zero or less elements long."); + UnityDebugger.Debugger.LogError("Path_AStar", "Path queue is zero or less elements long."); return null; } @@ -168,7 +168,7 @@ public Tile EndTile() { if (path == null || path.Count == 0) { - Debug.ULogChannel("Path_AStar", "Path is null or empty."); + UnityDebugger.Debugger.Log("Path_AStar", "Path is null or empty."); return null; } diff --git a/Assets/Scripts/Pathfinding/Path_RoomGraph.cs b/Assets/Scripts/Pathfinding/Path_RoomGraph.cs index 151679bd2..70ecf3738 100644 --- a/Assets/Scripts/Pathfinding/Path_RoomGraph.cs +++ b/Assets/Scripts/Pathfinding/Path_RoomGraph.cs @@ -15,12 +15,12 @@ public class Path_RoomGraph public Path_RoomGraph(World world) { - Debug.ULogChannel("Path_RoomGraph", "Entered Path_RoomGraph"); + UnityDebugger.Debugger.Log("Path_RoomGraph", "Entered Path_RoomGraph"); // Loop through all rooms of the world // For each room, create a node nodes = new Dictionary>(); - Debug.ULogChannel("Path_RoomGraph", "There are " + world.RoomManager.Count + " Rooms"); + UnityDebugger.Debugger.Log("Path_RoomGraph", "There are " + world.RoomManager.Count + " Rooms"); foreach (Room room in world.RoomManager) { Path_Node n = new Path_Node(); @@ -28,7 +28,7 @@ public Path_RoomGraph(World world) nodes.Add(room, n); } - Debug.ULogChannel("Path_RoomGraph", "Created " + nodes.Count + " nodes."); + UnityDebugger.Debugger.Log("Path_RoomGraph", "Created " + nodes.Count + " nodes."); // Now loop through all nodes again // Create edges for neighbours @@ -44,10 +44,10 @@ public Path_RoomGraph(World world) foreach (Room room in nodes.Keys) { - Debug.ULogChannel("Path_RoomGraph", "Room " + room.ID + " has edges to:"); + UnityDebugger.Debugger.Log("Path_RoomGraph", "Room " + room.ID + " has edges to:"); foreach (Path_Edge edge in nodes[room].edges) { - Debug.ULogChannel("Path_RoomGraph", "\tEdge connects to " + edge.node.data.ID); + UnityDebugger.Debugger.Log("\tEdge connects to " + edge.node.data.ID); } } } diff --git a/Assets/Scripts/Pathfinding/Path_TileGraph.cs b/Assets/Scripts/Pathfinding/Path_TileGraph.cs index 86f010791..77f33c873 100644 --- a/Assets/Scripts/Pathfinding/Path_TileGraph.cs +++ b/Assets/Scripts/Pathfinding/Path_TileGraph.cs @@ -17,7 +17,7 @@ public class Path_TileGraph public Path_TileGraph(World world) { - Debug.ULogChannel("Path_TileGraph", "Entered Path_TileGraph"); + UnityDebugger.Debugger.Log("Path_TileGraph", "Entered Path_TileGraph"); /* * Loop through all tiles of the world @@ -44,7 +44,7 @@ public Path_TileGraph(World world) } } - Debug.ULogChannel("Path_TileGraph", "Created " + nodes.Count + " nodes."); + UnityDebugger.Debugger.Log("Path_TileGraph", "Created " + nodes.Count + " nodes."); // Now loop through all nodes again // Create edges for neighbours diff --git a/Assets/Scripts/Pathfinding/Pathfinder.cs b/Assets/Scripts/Pathfinding/Pathfinder.cs index 008fffd5f..e1ff0dcbe 100644 --- a/Assets/Scripts/Pathfinding/Pathfinder.cs +++ b/Assets/Scripts/Pathfinding/Pathfinder.cs @@ -345,7 +345,7 @@ public static Tile GetNearestExit(List roomList) [System.Diagnostics.Conditional("PATHFINDER_DEBUG_LOG")] private static void DebugLog(string message, params object[] par) { - Debug.ULogChannel("Pathfinding", message, par); + UnityDebugger.Debugger.LogFormat("Pathfinding", message, par); } [System.Diagnostics.Conditional("PATHFINDER_DEBUG_LOG")] diff --git a/Assets/Scripts/Pathfinding/PathfindingPriorityQueue.cs b/Assets/Scripts/Pathfinding/PathfindingPriorityQueue.cs index 17a0856b2..f4126b624 100644 --- a/Assets/Scripts/Pathfinding/PathfindingPriorityQueue.cs +++ b/Assets/Scripts/Pathfinding/PathfindingPriorityQueue.cs @@ -71,7 +71,7 @@ public void Enqueue(T data, float priority) { if (mapDataToWrappedNode.ContainsKey(data)) { - Debug.ULogErrorChannel("PathfindingPriorityQueue", "Priority Queue can't re-enqueue a node that's already enqueued."); + UnityDebugger.Debugger.LogError("PathfindingPriorityQueue", "Priority Queue can't re-enqueue a node that's already enqueued."); return; } diff --git a/Assets/Scripts/Pathfinding/RoomPath_AStar.cs b/Assets/Scripts/Pathfinding/RoomPath_AStar.cs index 5424af781..4dbdb928a 100644 --- a/Assets/Scripts/Pathfinding/RoomPath_AStar.cs +++ b/Assets/Scripts/Pathfinding/RoomPath_AStar.cs @@ -22,7 +22,7 @@ public RoomPath_AStar(Queue path) { if (path == null || !path.Any()) { - Debug.ULogWarningChannel("Path_AStar", "Created path with no tiles, is this intended?"); + UnityDebugger.Debugger.LogWarning("Path_AStar", "Created path with no tiles, is this intended?"); } this.path = path; @@ -57,7 +57,7 @@ public RoomPath_AStar(World world, Room roomStart, Pathfinder.RoomGoalEvaluator // Make sure our start/end tiles are in the list of nodes! if (nodes.ContainsKey(roomStart) == false) { - Debug.ULogErrorChannel("Path_AStar", "The starting tile isn't in the list of nodes!"); + UnityDebugger.Debugger.LogError("Path_AStar", "The starting tile isn't in the list of nodes!"); return; } @@ -141,13 +141,13 @@ public Room Dequeue() { if (path == null) { - Debug.ULogErrorChannel("Path_AStar", "Attempting to dequeue from an null path."); + UnityDebugger.Debugger.LogError("Path_AStar", "Attempting to dequeue from an null path."); return null; } if (path.Count <= 0) { - Debug.ULogErrorChannel("Path_AStar", "Path queue is zero or less elements long."); + UnityDebugger.Debugger.LogError("Path_AStar", "Path queue is zero or less elements long."); return null; } @@ -168,7 +168,7 @@ public Room EndRoom() { if (path == null || path.Count == 0) { - Debug.ULogChannel("Path_AStar", "Path is null or empty."); + UnityDebugger.Debugger.Log("Path_AStar", "Path is null or empty."); return null; } diff --git a/Assets/Scripts/State/JobState.cs b/Assets/Scripts/State/JobState.cs index e144768b0..b0f82ddb7 100644 --- a/Assets/Scripts/State/JobState.cs +++ b/Assets/Scripts/State/JobState.cs @@ -100,7 +100,7 @@ public override void Interrupt() private void AbandonJob() { DebugLog(" - Job abandoned!"); - Debug.ULogChannel("Character", character.GetName() + " abandoned their job."); + UnityDebugger.Debugger.Log("Character", character.GetName() + " abandoned their job."); Job.OnJobCompleted -= OnJobCompleted; Job.OnJobStopped -= OnJobStopped; @@ -134,7 +134,7 @@ private void OnJobStopped(Job stoppedJob) if (Job != stoppedJob) { - Debug.ULogErrorChannel("Character", "Character being told about job that isn't his. You forgot to unregister something."); + UnityDebugger.Debugger.LogError("Character", "Character being told about job that isn't his. You forgot to unregister something."); return; } } @@ -153,7 +153,7 @@ private void OnJobCompleted(Job finishedJob) if (Job != finishedJob) { - Debug.ULogErrorChannel("Character", "Character being told about job that isn't his. You forgot to unregister something."); + UnityDebugger.Debugger.LogError("Character", "Character being told about job that isn't his. You forgot to unregister something."); return; } } diff --git a/Assets/Scripts/State/MoveState.cs b/Assets/Scripts/State/MoveState.cs index 5bd4a9d18..5bbfed7f7 100644 --- a/Assets/Scripts/State/MoveState.cs +++ b/Assets/Scripts/State/MoveState.cs @@ -86,7 +86,7 @@ public override void Update(float deltaTime) // so that we don't waste a bunch of time walking towards a dead end. // To save CPU, maybe we can only check every so often? // Or maybe we should register a callback to the OnTileChanged event? - // Debug.ULogErrorChannel("FIXME", "A character was trying to enter an unwalkable tile."); + // UnityDebugger.Debugger.LogErrorChannel("FIXME", "A character was trying to enter an unwalkable tile."); // Should the character show that he is surprised to find a wall? Finished(); diff --git a/Assets/Scripts/State/State.cs b/Assets/Scripts/State/State.cs index 9119b0157..c24fa7831 100644 --- a/Assets/Scripts/State/State.cs +++ b/Assets/Scripts/State/State.cs @@ -66,7 +66,7 @@ protected void Finished() protected void DebugLog(string message, params object[] par) { string prefixedMessage = string.Format("{0} {1}: {2}", character.GetName(), StateStack(), message); - Debug.ULogChannel("FSM", prefixedMessage, par); + UnityDebugger.Debugger.LogFormat("FSM", prefixedMessage, par); } private string StateStack() diff --git a/Assets/Scripts/UI/DialogBox/DialogBox.cs b/Assets/Scripts/UI/DialogBox/DialogBox.cs index 3eb650eca..61774c5e8 100644 --- a/Assets/Scripts/UI/DialogBox/DialogBox.cs +++ b/Assets/Scripts/UI/DialogBox/DialogBox.cs @@ -39,7 +39,7 @@ public virtual void CloseDialog() Closed = null; - Debug.ULogChannel("ModDialogBox", "openedWhileModal=" + openedWhileModal.ToString()); + UnityDebugger.Debugger.Log("ModDialogBox", "openedWhileModal=" + openedWhileModal.ToString()); if (!openedWhileModal) { GameController.Instance.IsModal = false; diff --git a/Assets/Scripts/UI/DialogBox/DialogBoxManager.cs b/Assets/Scripts/UI/DialogBox/DialogBoxManager.cs index a9fc99ba2..a868dfc2a 100644 --- a/Assets/Scripts/UI/DialogBox/DialogBoxManager.cs +++ b/Assets/Scripts/UI/DialogBox/DialogBoxManager.cs @@ -95,7 +95,7 @@ public DialogBox ShowDialogBoxByName(string dialogName) } else { - Debug.ULogErrorChannel("ModDialogBox", "Couldn't find dialog box with name" + dialogName); + UnityDebugger.Debugger.LogError("ModDialogBox", "Couldn't find dialog box with name" + dialogName); return null; } } @@ -170,7 +170,7 @@ private Toggle CreatePinQuestButton() /// private void LoadModdedDialogBoxes() { - Debug.ULogChannel("ModDialogBox", "Loading xml dialog boxes"); + UnityDebugger.Debugger.Log("ModDialogBox", "Loading xml dialog boxes"); string dialogBoxPath = Path.Combine(Application.streamingAssetsPath, "UI"); dialogBoxPath = Path.Combine(dialogBoxPath, "DialogBoxes"); DirectoryInfo dialogBoxPathInfo = new DirectoryInfo(dialogBoxPath); @@ -180,7 +180,7 @@ private void LoadModdedDialogBoxes() switch (fileInfo.Extension) { case ".xml": - Debug.ULogChannel("ModDialogBox", "Found xml element:" + fileInfo.Name); + UnityDebugger.Debugger.Log("ModDialogBox", "Found xml element:" + fileInfo.Name); GameObject dialogBoxPrefab = CreateDialogGO("DB_MOD", "Modded Dialog Box"); ModDialogBox modDialogBox = dialogBoxPrefab.GetComponent(); modDialogBox.LoadFromXML(fileInfo); @@ -188,7 +188,7 @@ private void LoadModdedDialogBoxes() DialogBoxes[modDialogBox.Title] = modDialogBox; break; case ".lua": - Debug.ULogChannel("ModDialogBox", "Found lua element:" + fileInfo.Name); + UnityDebugger.Debugger.Log("ModDialogBox", "Found lua element:" + fileInfo.Name); WorldController.Instance.modsManager.LoadFunctionsInFile(fileInfo, "ModDialogBox"); break; } diff --git a/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadGame.cs b/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadGame.cs index ca7562c76..1a4ad1689 100644 --- a/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadGame.cs +++ b/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadGame.cs @@ -137,7 +137,7 @@ public void LoadWorld(string filePath) // from the load dialog box. // Get the file name from the save file dialog box. - Debug.ULogChannel("DialogBoxLoadGame", "LoadWorld button was clicked."); + UnityDebugger.Debugger.Log("DialogBoxLoadGame", "LoadWorld button was clicked."); DialogBoxManager dbm = GameObject.Find("Dialog Boxes").GetComponent(); dbm.dialogBoxPromptOrInfo.SetPrompt("message_loading_game"); diff --git a/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadSaveGame.cs b/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadSaveGame.cs index c6604b5d4..0ae65f9ef 100644 --- a/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadSaveGame.cs +++ b/Assets/Scripts/UI/DialogBox/FileSaveLoad/DialogBoxLoadSaveGame.cs @@ -29,7 +29,7 @@ public void EnsureDirectoryExists(string directoryPath) { if (Directory.Exists(directoryPath) == false) { - Debug.ULogWarningChannel("DialogBoxLoadSaveGame", "Directory: " + directoryPath + " doesn't exist - creating."); + UnityDebugger.Debugger.LogWarning("DialogBoxLoadSaveGame", "Directory: " + directoryPath + " doesn't exist - creating."); Directory.CreateDirectory(directoryPath); } } diff --git a/Assets/Scripts/UI/DialogBox/Mod/ModDialogBox.cs b/Assets/Scripts/UI/DialogBox/Mod/ModDialogBox.cs index 9a2257e2c..355ac7c6a 100644 --- a/Assets/Scripts/UI/DialogBox/Mod/ModDialogBox.cs +++ b/Assets/Scripts/UI/DialogBox/Mod/ModDialogBox.cs @@ -151,7 +151,7 @@ public void LoadFromXML(FileInfo file) } catch (System.Exception error) { - Debug.ULogErrorChannel("ModDialogBox", "Error converting image:" + error.Message); + UnityDebugger.Debugger.LogError("ModDialogBox", "Error converting image:" + error.Message); return; } @@ -201,7 +201,7 @@ public void LoadFromXML(FileInfo file) } catch (System.Exception error) { - Debug.ULogErrorChannel("ModDialogBox", "Error deserializing data:" + error.Message); + UnityDebugger.Debugger.LogError("ModDialogBox", "Error deserializing data:" + error.Message); } } } diff --git a/Assets/Scripts/UI/DialogBox/PromptOrInfo/DialogBoxPromptOrInfo.cs b/Assets/Scripts/UI/DialogBox/PromptOrInfo/DialogBoxPromptOrInfo.cs index c98294786..122d415a7 100644 --- a/Assets/Scripts/UI/DialogBox/PromptOrInfo/DialogBoxPromptOrInfo.cs +++ b/Assets/Scripts/UI/DialogBox/PromptOrInfo/DialogBoxPromptOrInfo.cs @@ -62,7 +62,7 @@ public void SetButtons(Table buttons) button.gameObject.SetActive(false); } - Debug.ULogChannel("ModDialogBox", "Table length:" + buttons.Length.ToString()); + UnityDebugger.Debugger.Log("ModDialogBox", "Table length:" + buttons.Length.ToString()); for (int i = 1; i <= buttons.Length; i++) { switch (buttons.RawGet(i).ToObject()) diff --git a/Assets/Scripts/UI/HeadlineController.cs b/Assets/Scripts/UI/HeadlineController.cs index 07a0d5ef8..d94ab8931 100644 --- a/Assets/Scripts/UI/HeadlineController.cs +++ b/Assets/Scripts/UI/HeadlineController.cs @@ -54,7 +54,7 @@ private void UpdateHeadline(string newHeadline) canvasGroup.interactable = true; canvasGroup.blocksRaycasts = true; - Debug.ULogChannel("Headline", newHeadline); + UnityDebugger.Debugger.Log("Headline", newHeadline); textBox.text = newHeadline; Scheduler.Scheduler.Current.DeregisterEvent(scheduledEvent); diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DevConsole.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DevConsole.cs index f3100757a..3fe12a448 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DevConsole.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DevConsole.cs @@ -583,7 +583,7 @@ private void OnEnable() if (instance != this && instance != null) { // Destroy instance. - Debug.ULogErrorChannel("DevConsole", "There can only be one Console per project. Deleting instance with name: " + instance.gameObject.name); + UnityDebugger.Debugger.LogError("DevConsole", "There can only be one Console per project. Deleting instance with name: " + instance.gameObject.name); Destroy(instance.gameObject); } @@ -613,7 +613,7 @@ private void Start() if (textArea == null || inputField == null || autoComplete == null || scrollRect == null || root == null) { gameObject.SetActive(false); - Debug.ULogError("DevConsole", "Missing gameobjects, look at the serializeable fields"); + UnityDebugger.Debugger.LogError("DevConsole", "Missing gameobjects, look at the serializeable fields"); } textArea.fontSize = CommandSettings.FontSize; diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CSharpCommand.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CSharpCommand.cs index 43c38fcb7..84dbf9d52 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CSharpCommand.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CSharpCommand.cs @@ -112,7 +112,7 @@ public void ExecuteCommand(string arguments) { // Debug Error DevConsole.LogError(Errors.ExecuteConsoleError.Description(this)); - Debug.ULogErrorChannel("DevConsole", e.ToString()); + UnityDebugger.Debugger.LogError("DevConsole", e.ToString()); } } diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandBase.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandBase.cs index 55ce239c2..fffb36864 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandBase.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandBase.cs @@ -145,11 +145,8 @@ protected T GetValueType(string arg, Type typeVariable = null) } else if (arg.Contains('[')) { - Debug.LogWarning("Object Mode"); arg = arg.Trim().Trim('[', ']'); - Debug.LogWarning(arg); - string pattern = @"\,?((?:\"".*?\"")|(?:[^\,]*))\,?"; string[] args = Regex.Matches(arg, pattern) @@ -198,7 +195,6 @@ protected T GetValueType(string arg, Type typeVariable = null) if (chosenConstructor == null) { - args.ToList().ForEach(x => Debug.LogWarning(x)); throw new Exception("The entered value is not a valid " + typeOfT + " value"); } else diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandParams.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandParams.cs index 3a8d6aea9..6ceea7784 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandParams.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandParams.cs @@ -52,7 +52,7 @@ protected override object[] ParseArguments(string message) } catch (Exception e) { - Debug.ULogErrorChannel("DevConsole", e.ToString()); + UnityDebugger.Debugger.LogError("DevConsole", e.ToString()); return new object[] { }; } } diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithFourParameters.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithFourParameters.cs index 66b75a45e..0fb145855 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithFourParameters.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithFourParameters.cs @@ -62,7 +62,7 @@ protected override object[] ParseArguments(string message) } catch (Exception e) { - Debug.ULogErrorChannel("DevConsole", e.ToString()); + UnityDebugger.Debugger.LogError("DevConsole", e.ToString()); return new object[] { }; } } diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithOneParameter.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithOneParameter.cs index a0d79082d..84c493225 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithOneParameter.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithOneParameter.cs @@ -61,7 +61,7 @@ protected override object[] ParseArguments(string args) } catch (Exception e) { - Debug.ULogErrorChannel("DevConsole", e.ToString()); + UnityDebugger.Debugger.LogError("DevConsole", e.ToString()); return new object[] { }; } } diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithThreeParameters.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithThreeParameters.cs index 8550418e7..e3a538ca5 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithThreeParameters.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithThreeParameters.cs @@ -62,7 +62,7 @@ protected override object[] ParseArguments(string message) } catch (Exception e) { - Debug.ULogErrorChannel("DevConsole", e.ToString()); + UnityDebugger.Debugger.LogError("DevConsole", e.ToString()); return new object[] { }; } } diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithTwoParameters.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithTwoParameters.cs index 778bd2063..beff4cec6 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithTwoParameters.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/CommandWithTwoParameters.cs @@ -62,7 +62,7 @@ protected override object[] ParseArguments(string message) } catch (Exception e) { - Debug.ULogErrorChannel("DevConsole", e.ToString()); + UnityDebugger.Debugger.LogError("DevConsole", e.ToString()); return new object[] { }; } } diff --git a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/InvokeCommand.cs b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/InvokeCommand.cs index 2bda7c9ed..7a118a763 100644 --- a/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/InvokeCommand.cs +++ b/Assets/Scripts/UI/InGameUI/DevConsole/DeveloperConsole.CommandTypes/InvokeCommand.cs @@ -72,7 +72,7 @@ public InvokeCommand(string title, string functionName, string descriptiveText, // This will only happen if the semi colon is the last element in the string Parameters = string.Empty; - Debug.ULogWarningChannel("DevConsole", "Parameters had a semicolon as a last character this is an illegal string."); + UnityDebugger.Debugger.LogWarning("DevConsole", "Parameters had a semicolon as a last character this is an illegal string."); } } else @@ -125,7 +125,7 @@ public InvokeCommand(string title, string functionName, string descriptiveText, // This in most cases is fine, just means that when you call it, // it won't work (unless the type is object) types[i] = typeof(object); - Debug.ULogErrorChannel("DevConsole", e.Message); + UnityDebugger.Debugger.LogError("DevConsole", e.Message); } } } @@ -254,7 +254,7 @@ protected override object[] ParseArguments(string arguments) } catch (Exception e) { - Debug.ULogErrorChannel("DevConsole", e.ToString()); + UnityDebugger.Debugger.LogError("DevConsole", e.ToString()); } return new object[] { }; diff --git a/Assets/Scripts/UI/InGameUI/PerformanceHUD/PerformanceHUDManager.cs b/Assets/Scripts/UI/InGameUI/PerformanceHUD/PerformanceHUDManager.cs index c2a29c83e..38018bb9b 100644 --- a/Assets/Scripts/UI/InGameUI/PerformanceHUD/PerformanceHUDManager.cs +++ b/Assets/Scripts/UI/InGameUI/PerformanceHUD/PerformanceHUDManager.cs @@ -90,7 +90,7 @@ private void Start() // Just a guard statement essentially if (PerformanceComponentGroups.groups.Length > groupSetting) { - Debug.ULogChannel("Performance", "The current channel was set to index: " + groupSetting); + UnityDebugger.Debugger.Log("Performance", "The current channel was set to index: " + groupSetting); currentGroup = PerformanceComponentGroups.groups[groupSetting]; // Order by ascending using Linq @@ -102,12 +102,12 @@ private void Start() else if (groupSetting > 0 && PerformanceComponentGroups.groups.Length > 0) { // If so then just set to first option (normally none) - Debug.ULogErrorChannel("Performance", "Index out of range: Current group is set to 0" + groupSetting); + UnityDebugger.Debugger.LogError("Performance", "Index out of range: Current group is set to 0" + groupSetting); } else { // Else set to none (none is a readonly so it should always exist) - Debug.ULogErrorChannel("Performance", "Array Empty: The PerformanceComponentGroups.groups array is empty"); + UnityDebugger.Debugger.LogError("Performance", "Array Empty: The PerformanceComponentGroups.groups array is empty"); currentGroup = PerformanceComponentGroups.None; } diff --git a/Assets/Scripts/UI/MouseOver.cs b/Assets/Scripts/UI/MouseOver.cs index 5b476c0f5..a2a332d54 100644 --- a/Assets/Scripts/UI/MouseOver.cs +++ b/Assets/Scripts/UI/MouseOver.cs @@ -48,7 +48,7 @@ private void Start() if (text == null) { - Debug.ULogErrorChannel("MouseOver", "MouseOver: No 'Text' UI component on this object."); + UnityDebugger.Debugger.LogError("MouseOver", "MouseOver: No 'Text' UI component on this object."); this.enabled = false; return; } @@ -56,7 +56,7 @@ private void Start() mouseController = WorldController.Instance.mouseController; if (mouseController == null) { - Debug.ULogErrorChannel("MouseOver", "How do we not have an instance of mouse controller?"); + UnityDebugger.Debugger.LogError("MouseOver", "How do we not have an instance of mouse controller?"); this.enabled = false; return; } diff --git a/Assets/Scripts/UI/Overlay/OverlayDescriptor.cs b/Assets/Scripts/UI/Overlay/OverlayDescriptor.cs index 46ebc42d4..d2e296abb 100644 --- a/Assets/Scripts/UI/Overlay/OverlayDescriptor.cs +++ b/Assets/Scripts/UI/Overlay/OverlayDescriptor.cs @@ -94,7 +94,7 @@ public void ReadXmlPrototype(XmlReader xmlReader) } catch (ArgumentException e) { - Debug.ULogErrorChannel("OverlayMap", "Invalid color map!", e); + UnityDebugger.Debugger.LogErrorFormat("OverlayMap", "Invalid color map!\n{0}", e.Message); } } diff --git a/Assets/Scripts/UI/Overlay/OverlayMap.cs b/Assets/Scripts/UI/Overlay/OverlayMap.cs index b691bd784..fa8966d6e 100644 --- a/Assets/Scripts/UI/Overlay/OverlayMap.cs +++ b/Assets/Scripts/UI/Overlay/OverlayMap.cs @@ -258,7 +258,7 @@ public void SetOverlay(string name) if (FunctionsManager.Overlay.HasFunction(descr.LuaFunctionName) == false) { - Debug.ULogErrorChannel("OverlayMap", string.Format("Couldn't find a function named '{0}' in '{1}'", descr.LuaFunctionName)); + UnityDebugger.Debugger.LogError("OverlayMap", string.Format("Couldn't find a function named '{0}' in '{1}'", descr.LuaFunctionName)); return; } @@ -277,7 +277,7 @@ public void SetOverlay(string name) { if (loggedOnce == false) { - Debug.ULogErrorChannel("OverlayMap", string.Format("The return value from the function named '{0}' was null for tile at ({1}, {2}, {3})", descr.LuaFunctionName, x, y, z)); + UnityDebugger.Debugger.LogError("OverlayMap", string.Format("The return value from the function named '{0}' was null for tile at ({1}, {2}, {3})", descr.LuaFunctionName, x, y, z)); loggedOnce = true; } @@ -293,7 +293,7 @@ public void SetOverlay(string name) } else { - Debug.ULogWarningChannel("OverlayMap", string.Format("Overlay with name {0} not found in prototypes", name)); + UnityDebugger.Debugger.LogWarning("OverlayMap", string.Format("Overlay with name {0} not found in prototypes", name)); } } @@ -378,7 +378,7 @@ private void Init() meshRenderer.material = mat; if (mat == null || meshRenderer == null) { - Debug.ULogErrorChannel("OverlayMap", "Material or renderer is null. Failing."); + UnityDebugger.Debugger.LogError("OverlayMap", "Material or renderer is null. Failing."); } initialized = true; @@ -430,7 +430,7 @@ private void GenerateTexture() { if (colorMapTexture == null) { - Debug.ULogErrorChannel("OverlayMap", "No color map texture setted!"); + UnityDebugger.Debugger.LogError("OverlayMap", "No color map texture setted!"); } if (!overlayColorMapLookup.ContainsKey(currentOverlay)) @@ -534,7 +534,7 @@ private void CreateGUI() UnityEngine.UI.Dropdown dropdown = parentPanel.GetComponentInChildren(); if (dropdown == null) { - Debug.ULogWarningChannel("OverlayMap", "No parent panel was selected!"); + UnityDebugger.Debugger.LogWarning("OverlayMap", "No parent panel was selected!"); return; } diff --git a/Assets/Scripts/Utilities/ModUtils.cs b/Assets/Scripts/Utilities/ModUtils.cs index 44254d899..9243ca0fb 100644 --- a/Assets/Scripts/Utilities/ModUtils.cs +++ b/Assets/Scripts/Utilities/ModUtils.cs @@ -64,32 +64,32 @@ public static void LogError(object obj) public static void ULogChannel(string channel, string message) { - Debug.ULogChannel(channel, message); + UnityDebugger.Debugger.Log(channel, message); } public static void ULogWarningChannel(string channel, string message) { - Debug.ULogWarningChannel(channel, message); + UnityDebugger.Debugger.LogWarning(channel, message); } public static void ULogErrorChannel(string channel, string message) { - Debug.ULogErrorChannel(channel, message); + UnityDebugger.Debugger.LogError(channel, message); } public static void ULog(string message) { - Debug.ULogChannel(defaultLogChannel, message); + UnityDebugger.Debugger.Log(defaultLogChannel, message); } public static void ULogWarning(string message) { - Debug.ULogWarningChannel(defaultLogChannel, message); + UnityDebugger.Debugger.LogWarning(defaultLogChannel, message); } public static void ULogError(string message) { - Debug.ULogErrorChannel(defaultLogChannel, message); + UnityDebugger.Debugger.LogError(defaultLogChannel, message); } public static float Clamp(float value, float min, float max) diff --git a/Assets/UberLogger.meta b/Assets/UberLogger.meta deleted file mode 100644 index 60cbf91f9..000000000 --- a/Assets/UberLogger.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 36e49051ba9ea364b91d6968ace42c92 -folderAsset: yes -timeCreated: 1471896262 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art.meta b/Assets/UberLogger/Art.meta deleted file mode 100644 index 9b8123b76..000000000 --- a/Assets/UberLogger/Art.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 08b646709d2a14c419ef4e641ce44797 -folderAsset: yes -timeCreated: 1437657322 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/Button.png b/Assets/UberLogger/Art/Button.png deleted file mode 100644 index 138bac3a33bc174053462b6f3eaedc69f26c4d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1510 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv>!3-otox^<@7?>FXd_r7R7T9VobJbq%uD#qt zdxg8sayOlo-nuKj^;Y}pFZMB<=V!Dw&}dzd@$w*(**+%o15K6$n5+mkTNrG<%HMn) z5CvMS^|js{Y18LzyEepjQ<&YhIQuOT_FJPJwkJ4ljdI+P=(H``X^?xVW^m zv|?Ia_3^&i!<~)C`}_s z#Ni`{j~qF2<-ye(k8VAD`sm@aM=xHy0D62BjD`SO2rTqc`M|)y$WRjG7yO@^fPtEZ z(Z{Ubty0^7!NXbL5n0T@z;^_M8K-LVNdpDhOFVsD+3zv(^N9*9tT#;t3%N#=IF^=V zoRC+8#rl@>8I3WG39Vo^Q(O+7WoXYU^fAedYGUxo<+|;}hhHq!4?FWjnfs}=0 zmgJ-|tax`x9Vjx>)5S4FVrue-qbxjAx@KB3Z(P5Av*aeL1q);&Bs|X?jR^LM^uEsM zc_zrkE6y|U*s0UkuN@FmdZwYZdeO3VSq~FmB{BprSJqp;V1dHhwB!Wl>!*+Fv#`Y2 zwXvxclrrsUayam^S7+JTv&<}S)}5%Dd&8okA@aQJNxt}OH8C+UH#TMemgt(=vtLys nTTNBoaQ@)UmIx47mchWV;9<63Q2sJd`OVgTe~DWM4f^yU`p diff --git a/Assets/UberLogger/Art/Button.png.meta b/Assets/UberLogger/Art/Button.png.meta deleted file mode 100644 index dc863ca54..000000000 --- a/Assets/UberLogger/Art/Button.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: 2ae9477f7f0774b808aef406d3bf2d3c -timeCreated: 1437687420 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/ButtonError.png b/Assets/UberLogger/Art/ButtonError.png deleted file mode 100644 index 9fcc2146aba972690db37d80383ed750bdedf450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1656 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv>!3HFi<}R-XQjEnx?oJHr&dIz4aySb-B8wRq z_>O=u<5X=vX$A%smCTTck_cZPtK|G#y~LFKq*T3%+ybC#1_ql7D* z7iAWdWaj57fXq!y$}cUkRZ;?31P2gzmSmOrNrwBXptL9l?5C7u{nVV)+|<01VxT@ltkwa;7OoM+krjyr5X-=U2=SW@$mLc+ zsm1v@rJx`P&C4vYGqM4D2wfNvA`o59`MCu}sl~-WZFZ(mEy!Z%>LU==*jbuEH6RP3 zYw$111o|`)lFzu@HPa**innQQ~<0?6Txt4;CuT5RlH$$l|a1bRjBQV9$5Pc~!a|6XcRR zGaPN6C2bU1Yo57Ba?6Eg_m{69FfR$X;5=c%4Ug6vNz#w}y?8~jz{O3Ra z*Y?kBT>O5&_5{D>M^8IBS}2&7{mQy$UH0t%jjBfew6vHTi3++Mzn-1mv*X7P!H{c) zuW!G2$Y)W<#65TYWlg{NbGWW-^^rT%%aQ$+waTUa+lDOyG9J^Xb?z`ab9~?KFJ*Ht zZ@RfgL#$h6vS-Q>v*mZCZ&rO>xZ&L$hxbz^w)A@jNOSD;KjBloZj;#TB?bREwNIZ; zvYW3y{q)bKkGx0T8aLflDsgd`ENFRu-^p7~nAXqVw=_g+qKC?f6eGK}w_XJvNc$-q z&D(wJ9Dmkr>vg%;ULD!GIYdiTI(}`K=hC2e2QBPsGu=|s6g&A%f96a!HI81w_o)1J z_Zs7C&3dk&SaogSa{W|!HZ^oZ5vr`W)y*ZnQhc`ij&AGX` zG1E*{MREPHqu`u-Ppz~ty+KT>2>m^^*4T(n9G;` cTg9}WfjRDIq|~FIN}%e%)78&qol`;+0EviB!~g&Q diff --git a/Assets/UberLogger/Art/ButtonError.png.meta b/Assets/UberLogger/Art/ButtonError.png.meta deleted file mode 100644 index c6b9cf6eb..000000000 --- a/Assets/UberLogger/Art/ButtonError.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: f752d027f2368431c924c0306e747c4b -timeCreated: 1437728159 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/ErrorIcon.png b/Assets/UberLogger/Art/ErrorIcon.png deleted file mode 100644 index 1af20cc9145bd0a377adabe525f25fef64fb0258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P)Nklz{Bj!zRxo=@9YK|Zd0Uh4!nwqF9vc71{1^!kECb! zr8_V@u@9xNDYc8zN8&wj35MFjqO=il7^ZhA?Ah>I`UdMMxHXJza<#Y>#}onVw%nb5=Es8R;sQ?Ltv3cgVJZm;ru#!4Vv_gQuYej*3yM;Ui$Us5q3V&v(A5W}7U$=bf{YK%%Pg@2x(I9qnlQSqNQAtd zv4H_p6S63}jtHzekVTPnfTF?*999u7nYpQXVBeUT*yv-GK-cJ;pOaq{T#%TY3JNi> z79=5b)nIEPaan^T0o7=u4@%8QsT-1Yz@ossW5)%IQ&>K<<5J#u(hQh2*L%7+hGek5 zy>yWGfP%o00~6HN|MyeMn&DnD>1Q>oS$f*Mv(N9={H*>i_o4hCR|o^|m(~D<$D#?X z76FVRCn{JY6!}6JSdHQs!#bEn9U6PW8$=&Du+m1!8vPH9#hi?-(@spA1S(cMUHx3v IIVCg!0EI7gQ~&?~ diff --git a/Assets/UberLogger/Art/LogLine1.png.meta b/Assets/UberLogger/Art/LogLine1.png.meta deleted file mode 100644 index 46c2a163e..000000000 --- a/Assets/UberLogger/Art/LogLine1.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: 58be81cf6eccb4cabbae417792fd2765 -timeCreated: 1437660139 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/LogLine2.png b/Assets/UberLogger/Art/LogLine2.png deleted file mode 100644 index 3dd4b752b05a6c4ac7b8132f62b52cefa8b944ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}oCO|{#S9F3 z${@^GvDChdfq{8dW=KRygs+cPa(=E}VoH8es$NBI0Z=sqgH44MkeQoWlBiITo0C^; zRbi_HR$&EXgM{^!6u?SKvTcYej*3yM;Ui$Us5q3V&v(A5W}7U$=bf{YK%%Pg@2x(I9qnlQSqNQAtd zv4H_p6S63}jtHzekVTPnfTF?*999u7nYpQXVBeSlLmI0Dx<=>xocyBTg2d!hP>6xG zAPJ$X23r$}%NisJs74!oP-;d>-H@yU76s-VJ1$_H!t$XVS1c3Pa$we6@9E+glEM1+ z(m~z>3IazCO!&9%f0bP0 Hl+XkKn9p@( diff --git a/Assets/UberLogger/Art/LogLine2.png.meta b/Assets/UberLogger/Art/LogLine2.png.meta deleted file mode 100644 index ca8f95d5a..000000000 --- a/Assets/UberLogger/Art/LogLine2.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: 33bd69e44bf8341e5a10577910796fb6 -timeCreated: 1437660139 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/LogLineSelected.png b/Assets/UberLogger/Art/LogLineSelected.png deleted file mode 100644 index 1cf4942402bdd5c81a7f3f6902105f6dfcdd4e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}oCO|{#S9F3 z${@^GvDChdfq{8dW=KRygs+cPa(=E}VoH8es$NBI0Z=sqgH44MkeQoWlBiITo0C^; zRbi_HR$&EXgM{^!6u?SKvTcYej*3yM;Ui$Us5q3V&v(A5W}7U$=bf{YK%%Pg@2x(I9qnlQSqNQAtd zv4H_p6S63}jtHzekVTPnfTF?*999u7nYpQXVBeUT*yv-GK-cJ;pOaq{T#%TY3JNi> z79=5b)nIEPaan^T0o7=u4@%8QsT-1Yz@ossW5)%IQ&>K<1Q>oS$6Gz({@#$DAj=#)0*MLp%qoQ5<7f z2eYU{V^4U4=pzT#0ENe*39S|Zj3Os0SR)kqLKtYGmdK II;Vst09LAV-T(jq diff --git a/Assets/UberLogger/Art/LogLineSelected.png.meta b/Assets/UberLogger/Art/LogLineSelected.png.meta deleted file mode 100644 index 5fbdcb2b6..000000000 --- a/Assets/UberLogger/Art/LogLineSelected.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: c60b5ba991951418b86ce94a4b97321c -timeCreated: 1437660139 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/MessageIcon.png b/Assets/UberLogger/Art/MessageIcon.png deleted file mode 100644 index 46d19f8ac4baefde47c19b76f884ec87e90e4129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP)&mW1Y`GmBL#E0+{+PDaLQs6R-Ho5UHkWes}?%D(rxYJ$I%7t(3+ZeV8 zbrD(+itQv)NwXLJ2>HFU0-4R z41NN?Z#6OO7qCJ(35UavVzJoWU@&-Wu~-hF@xfrQtX8WZi^XE2)9IW;dk1d79jscd z_DP{osNqN(P@q<;@n*BBgnTxe{Y)ehCAdy^&h6whpU=P9Wn!{gt#~{h=b21~Z#KJ{ zA|)D)zJ%`%c~zj@@Ap4I@;wreA*j)4n9XJrlq6}VQ%)|Id#Kat?qhmL1zeFx#E+4! z*K3Auf@HEh`)}dBpaQGKV(}U``)V?oEGU64k_t5%4c2bA8FeKX z3WxY;qfZI{g+7E z4e-S6b_abv-)*PUdDZ1|nNz7$D4kAM@K&BYej*3yM;Ui$Us5q3V&v(A5W}7U$=bf{YK%%Pg@2x(I9qnlQSqNQAtd zv4H_p6S63}jtHzekVTPnfTF?*999u7nYpQXVBeUT*yv-GK-cJ;pOaq{T#%TY3JNi> z79=5b)nIEPaan^T0o7=u4@%8QsT-1Yz@ossW5)%IQ&>K<QP0$uR-OCr>mdKI;Vst04r^Q4gdfE diff --git a/Assets/UberLogger/Art/ToolbarButton.png.meta b/Assets/UberLogger/Art/ToolbarButton.png.meta deleted file mode 100644 index f91b871c3..000000000 --- a/Assets/UberLogger/Art/ToolbarButton.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: 1e3d00b6e3a884febbfd0da496905572 -timeCreated: 1437660139 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/ToolbarButtonClicked.png b/Assets/UberLogger/Art/ToolbarButtonClicked.png deleted file mode 100644 index b9fc1fa8f54b770242442a5bc9c577b4b9bbba8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1217 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}oCO|{#S9F3 z${@^GvDChdfq{8dW=KRygs+cPa(=E}VoH8es$NBI0Z=sqgH44MkeQoWlBiITo0C^; zRbi_HR$&EXgM{^!6u?SKvTcYej*3yM;Ui$Us5q3V&v(A5W}7U$=bf{YK%%Pg@2x(I9qnlQSqNQAtd zv4H_p6S63}jtHzekVTPnfTF?*999u7nYpQXVBeUT*yv-GK-cJ;pOaq{T#%TY3JNi> z79=5b)nIEPaan^T0o7=u4@%8QsT-1Yz@ossW5)%IQ&>K<<0{@RvJRLvH+Z@@hGek5 zow!l(fB{d-B%kF^xAY(PKFKlXeSzzDqdmK;&sDywG5&nF(lY!zV~j-z<8kZNq6b=? gMGN+9j-tPSy~H$D^%z+`e^9yN>FVdQ&MBb@01>Kxt^fc4 diff --git a/Assets/UberLogger/Art/ToolbarButtonClicked.png.meta b/Assets/UberLogger/Art/ToolbarButtonClicked.png.meta deleted file mode 100644 index e802694ec..000000000 --- a/Assets/UberLogger/Art/ToolbarButtonClicked.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: c445efe53c41a452897859c5e65dde5c -timeCreated: 1437662129 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/ToolbarButtonDown.png b/Assets/UberLogger/Art/ToolbarButtonDown.png deleted file mode 100644 index 0c463ab22bbcb91594611bdc9ce99848b4e037f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1217 zcmchXy>HV%7{(n?r4q=%P$5+emMg>*pJOK}IUE-nmnISkQ3xVM2;n9dY7zS^`$`p`PZ#cS+|lP|vqf6f z%dm|t(dgh+B>I*^-5jU-kUm<77`$)wY!CWHA#gzY%w!<&frZ>H3ax6LFJTw)IWa3r zf|lfYUUfTN*w8P9I2{#*H9{N+K)>G?`-+I&J0Mdi6o4cHSx!?&+8fx!@YA+8H=N{P z9vyjY*K~-9ZJy0*tm1W26a<#&@CeswIfsdCFRY5z2YkZ;8Bqe`AYyh$%lnIBk%<`c z%?TKb46&dY!!@e3qp*rQW_O?)1ZlFA$)%95%)(ddeT6frqYt&HNDB1s_>RpUf!ED=>B1bY=Q=v7NMEo2APgrkad(hrWm1|*AOuywzUIi+J={8hO81VIr0?`#A8N^u??0vJ)_hsfFE-bv zer&xuxhtJ`^!WR;t?b6B>WAqkznrCgdFRdjy}{21%J0vE!u9>c&2!DfyYnw*b~j2h e&d%!_|6f@6_IB!Qxpr%o{Z}eWHGO;W_QO96)PR`) diff --git a/Assets/UberLogger/Art/ToolbarButtonDown.png.meta b/Assets/UberLogger/Art/ToolbarButtonDown.png.meta deleted file mode 100644 index da5095721..000000000 --- a/Assets/UberLogger/Art/ToolbarButtonDown.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: bd719bdc497244113bf9f08779f78082 -timeCreated: 1437664533 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/UberConsoleSkin.guiskin b/Assets/UberLogger/Art/UberConsoleSkin.guiskin deleted file mode 100644 index 9d6958b97..000000000 --- a/Assets/UberLogger/Art/UberConsoleSkin.guiskin +++ /dev/null @@ -1,1433 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 1 - m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} - m_Name: UberConsoleSkin - m_EditorClassIdentifier: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_box: - m_Name: box - m_Normal: - m_Background: {fileID: 0} - m_TextColor: {r: .799999952, g: .799999952, b: .799999952, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 1 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_button: - m_Name: button - m_Normal: - m_Background: {fileID: 11006, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .899999976, g: .899999976, b: .899999976, a: 1} - m_Hover: - m_Background: {fileID: 11003, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .899999976, g: .899999976, b: .899999976, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 11005, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .90196079, g: .90196079, b: .90196079, a: 1} - m_OnHover: - m_Background: {fileID: 11004, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .899999976, g: .899999976, b: .899999976, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 4 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_toggle: - m_Name: toggle - m_Normal: - m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .891128957, g: .891128957, b: .891128957, a: 1} - m_Hover: - m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .890196085, g: .890196085, b: .890196085, a: 1} - m_OnHover: - m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 14 - m_Right: 0 - m_Top: 14 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 15 - m_Right: 0 - m_Top: 3 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: 0 - m_Top: -4 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_label: - m_Name: label - m_Normal: - m_Background: {fileID: 0} - m_TextColor: {r: .899999976, g: .899999976, b: .899999976, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 1 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_textField: - m_Name: textfield - m_Normal: - m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .799999952, g: .799999952, b: .799999952, a: 1} - m_Hover: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .899999976, g: .899999976, b: .899999976, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 0 - m_TextClipping: 1 - m_ImagePosition: 3 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_textArea: - m_Name: textarea - m_Normal: - m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .90196079, g: .90196079, b: .90196079, a: 1} - m_Hover: - m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: .799999952, g: .799999952, b: .799999952, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 1 - m_RichText: 0 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_window: - m_Name: window - m_Normal: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnFocused: - m_Background: {fileID: 2800000, guid: e4083732964464539b3e141a263f50b6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Border: - m_Left: 10 - m_Right: 9 - m_Top: 19 - m_Bottom: 9 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 10 - m_Right: 10 - m_Top: 20 - m_Bottom: 10 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 1 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: -18} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalSlider: - m_Name: horizontalslider - m_Normal: - m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 3 - m_Right: 3 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -2 - m_Bottom: -3 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalSliderThumb: - m_Name: horizontalsliderthumb - m_Normal: - m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 4 - m_Right: 4 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 7 - m_Right: 7 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 12 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalSlider: - m_Name: verticalslider - m_Normal: - m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 3 - m_Bottom: 3 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: -1 - m_Overflow: - m_Left: -2 - m_Right: -3 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_verticalSliderThumb: - m_Name: verticalsliderthumb - m_Normal: - m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 7 - m_Bottom: 7 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: -1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 12 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_horizontalScrollbar: - m_Name: horizontalscrollbar - m_Normal: - m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 9 - m_Right: 9 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 4 - m_Right: 4 - m_Top: 1 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 15 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarThumb: - m_Name: horizontalscrollbarthumb - m_Normal: - m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 6 - m_Right: 6 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: -1 - m_Bottom: 1 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 13 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarLeftButton: - m_Name: horizontalscrollbarleftbutton - m_Normal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_horizontalScrollbarRightButton: - m_Name: horizontalscrollbarrightbutton - m_Normal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbar: - m_Name: verticalscrollbar - m_Normal: - m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 9 - m_Bottom: 9 - m_Margin: - m_Left: 1 - m_Right: 4 - m_Top: 4 - m_Bottom: 4 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 1 - m_Bottom: 1 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 15 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbarThumb: - m_Name: verticalscrollbarthumb - m_Normal: - m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 6 - m_Right: 6 - m_Top: 6 - m_Bottom: 6 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 6 - m_Bottom: 6 - m_Overflow: - m_Left: -1 - m_Right: -1 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 2 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 15 - m_FixedHeight: 0 - m_StretchWidth: 0 - m_StretchHeight: 1 - m_verticalScrollbarUpButton: - m_Name: verticalscrollbarupbutton - m_Normal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_verticalScrollbarDownButton: - m_Name: verticalscrollbardownbutton - m_Normal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_ScrollView: - m_Name: scrollview - m_Normal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Hover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Active: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Focused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 1 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_CustomStyles: - - m_Name: LogLine1 - m_Normal: - m_Background: {fileID: 2800000, guid: 58be81cf6eccb4cabbae417792fd2765, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 2800000, guid: 58be81cf6eccb4cabbae417792fd2765, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 58be81cf6eccb4cabbae417792fd2765, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: 58be81cf6eccb4cabbae417792fd2765, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: LogLine2 - m_Normal: - m_Background: {fileID: 2800000, guid: 33bd69e44bf8341e5a10577910796fb6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 2800000, guid: 33bd69e44bf8341e5a10577910796fb6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: 33bd69e44bf8341e5a10577910796fb6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: 33bd69e44bf8341e5a10577910796fb6, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: SelectedLogLine - m_Normal: - m_Background: {fileID: 2800000, guid: c60b5ba991951418b86ce94a4b97321c, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 2800000, guid: c60b5ba991951418b86ce94a4b97321c, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: c60b5ba991951418b86ce94a4b97321c, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: c60b5ba991951418b86ce94a4b97321c, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnActive: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_OnFocused: - m_Background: {fileID: 0} - m_TextColor: {r: 0, g: 0, b: 0, a: 1} - m_Border: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 0 - m_FontStyle: 0 - m_Alignment: 0 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - - m_Name: ToolbarButton - m_Normal: - m_Background: {fileID: 2800000, guid: 1e3d00b6e3a884febbfd0da496905572, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Hover: - m_Background: {fileID: 2800000, guid: 1e3d00b6e3a884febbfd0da496905572, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Active: - m_Background: {fileID: 2800000, guid: c445efe53c41a452897859c5e65dde5c, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Focused: - m_Background: {fileID: 2800000, guid: 1e3d00b6e3a884febbfd0da496905572, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnNormal: - m_Background: {fileID: 2800000, guid: bd719bdc497244113bf9f08779f78082, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnHover: - m_Background: {fileID: 0} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnActive: - m_Background: {fileID: 2800000, guid: c445efe53c41a452897859c5e65dde5c, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_OnFocused: - m_Background: {fileID: 2800000, guid: c60b5ba991951418b86ce94a4b97321c, type: 3} - m_TextColor: {r: 1, g: 1, b: 1, a: 1} - m_Border: - m_Left: 1 - m_Right: 1 - m_Top: 0 - m_Bottom: 0 - m_Margin: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 3 - m_Bottom: 3 - m_Overflow: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_Font: {fileID: 0} - m_FontSize: 10 - m_FontStyle: 0 - m_Alignment: 4 - m_WordWrap: 0 - m_RichText: 1 - m_TextClipping: 0 - m_ImagePosition: 0 - m_ContentOffset: {x: 0, y: 0} - m_FixedWidth: 0 - m_FixedHeight: 0 - m_StretchWidth: 1 - m_StretchHeight: 0 - m_Settings: - m_DoubleClickSelectsWord: 1 - m_TripleClickSelectsLine: 1 - m_CursorColor: {r: 1, g: 1, b: 1, a: 1} - m_CursorFlashSpeed: -1 - m_SelectionColor: {r: 1, g: .384039074, b: 0, a: .699999988} diff --git a/Assets/UberLogger/Art/UberConsoleSkin.guiskin.meta b/Assets/UberLogger/Art/UberConsoleSkin.guiskin.meta deleted file mode 100644 index 40240aec8..000000000 --- a/Assets/UberLogger/Art/UberConsoleSkin.guiskin.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7018997e7c4ba41d8aa5a2338b82d57f -timeCreated: 1437656589 -licenseType: Free -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/WarningIcon.png b/Assets/UberLogger/Art/WarningIcon.png deleted file mode 100644 index 0ad9537f3791b20ecc03197a77644a9053e9bf70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmV+x0_pvUP)_f{c>SnJ?{hkMV*^SsY{-jIm!zap!`1%>$zjlB+!AI`9P z{~k|sS#BviIZRo6#0{b zlk3-cARiZ`)z*Ic$?>><%+nQ7o=XHX?CIlv3?QbAlzTj z|NOO!6r2oE@iw62Bkl%v8tcZT;6?HS^S`ChbV5(B(vS~`U(LzR_8W0u9u;|q)L+pY zPf=2a{fjl|AiuoGtdk;22SU`KU4dRhp{xYf@)EO39_qqM#<=;tOii{Bd5iR_$WHl; zc+bK?ZtB{vr{WY<#4;}W9ZX$aU?!fx!PSnZ*Y}P=YM!1PN7}nJ?b}!8nbB-Y5rkQy zGm&Plw8UvznyFoLg@{aW;Lv#@)J0aQkXo#oZ%@LQH&)W>@T13Mz;f3MuM*U zgwFd(eWtIBjOk8x-z)5O@vYHdkq33G9x}rkClqEm5tIBSy4ruOD4QLaBlklZs%Zp% Y0I@*Go1$?AEdT%j07*qoM6N<$g0d$5>i_@% diff --git a/Assets/UberLogger/Art/WarningIcon.png.meta b/Assets/UberLogger/Art/WarningIcon.png.meta deleted file mode 100644 index 9762f65f5..000000000 --- a/Assets/UberLogger/Art/WarningIcon.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: ecc8f3c040a254019afd50c8bc285b48 -timeCreated: 1437663836 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 1 - textureType: 2 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Art/WhiteTexture.png b/Assets/UberLogger/Art/WhiteTexture.png deleted file mode 100644 index 84f7a959fae2422eb93548b6b373e8cdc7270dc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1214 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}oCO|{#S9F3 z${@^GvDChdfq{8dW=KRygs+cPa(=E}VoH8es$NBI0Z=sqgH44MkeQoWlBiITo0C^; zRbi_HR$&EXgM{^!6u?SKvTcYej*3yM;Ui$Us5q3V&v(A5W}7U$=bf{YK%%Pg@2x(I9qnlQSqNQAtd zv4H_p6S63}jtHzekVTPnfTF?*999u7nYpQXVBeUT*yv-GK-cJ;pOaq{T#%TY3JNi> z79=5b)nIEPaan^T0o7=u4@%8QsT-1Yz@ossW5)%IQ&>K<JU6p6~|IM-Hq33Xeq-S}g(?X`|#dcTLeM=GwUmCKaGU#naW#Wt~$( F69E5Yej*3yM;Ui$Us5q3V&v(A5W}7U$=bf{YK%%Pg@2x(I9qnlQSqNQAtd zv4H_p6S63}jtHzekVTPnfTF?*999u7nYpQXVBeUT*yv-GK-cJ;pOaq{T#%TY3JNi> z79=5b)nIEPaan^T0o7=u4@%8QsT-1Yz@ossW5)%IQ&>K<<5Js{RRYYKFFjoxLo!(3 z&T`~xHV|R${o=DTRd1U2(wD3?_YXB3D!JJEc=fq}6&K8oS^TS7yEQ8N_uqFnf3MlS zJm$mv+MIKhjy697-v6!n^fh$dS?LuKN|M|Y%Cv8b;b6_Y|M|ebP~SS1-EWzBUz@N0 zt$MC6;tl-*l+z9Qbwiwb%*j3O)MD8uvecs(w)^e{uIcOJJGBz~JfX=d#Wz Gp$Pzm&b37V diff --git a/Assets/UberLogger/Art/WindowTexture.png.meta b/Assets/UberLogger/Art/WindowTexture.png.meta deleted file mode 100644 index a6788dd73..000000000 --- a/Assets/UberLogger/Art/WindowTexture.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: e4083732964464539b3e141a263f50b6 -timeCreated: 1437658895 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Debug.cs b/Assets/UberLogger/Debug.cs deleted file mode 100644 index bf2594323..000000000 --- a/Assets/UberLogger/Debug.cs +++ /dev/null @@ -1,360 +0,0 @@ -// -using UnityEngine; -using UberLogger; - -public static class Debug -{ - /// - /// Enable/Disable log. - /// - public static bool IsLogEnabled { get; set; } - - static Debug() - { - IsLogEnabled = true; - } - - //Unity replacement methods - public static void DrawRay(Vector3 start, Vector3 dir, Color? color=null, float duration = 0.0f, bool depthTest = true) - { - if (IsLogEnabled == false) - { - return; - } - - var col = color ?? Color.white; - UnityEngine.Debug.DrawRay(start, dir, col, duration, depthTest); - } - - public static void DrawLine(Vector3 start, Vector3 end, Color? color=null, float duration = 0.0f, bool depthTest = true) - { - if (IsLogEnabled == false) - { - return; - } - - var col = color ?? Color.white; - UnityEngine.Debug.DrawLine(start, end, col, duration, depthTest); - } - - public static void Break() - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.Break(); - } - -#if UNITY_5 - public static void Assert(bool condition) - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.Assert(condition); - } - - public static void Assert(bool condition, string message) - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.Assert(condition, message); - } - - public static void Assert(bool condition, string format, params object[] args) - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.AssertFormat(condition, format, args); - } - - public static void ClearDeveloperConsole() - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.ClearDeveloperConsole(); - } -#endif - - [StackTraceIgnore] - public static void LogFormat(UnityEngine.Object context, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Message, message, par); - } - - [StackTraceIgnore] - public static void LogFormat(string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", null, LogSeverity.Message, message, par); - } - - [StackTraceIgnore] - public static void Log(object message, UnityEngine.Object context = null) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Message, message); - } - - [StackTraceIgnore] - public static void LogErrorFormat(UnityEngine.Object context, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Error, message, par); - } - - [StackTraceIgnore] - public static void LogErrorFormat(string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", null, LogSeverity.Error, message, par); - } - - [StackTraceIgnore] - public static void LogError(object message, UnityEngine.Object context = null) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Error, message); - } - - [StackTraceIgnore] - public static void LogWarningFormat(UnityEngine.Object context, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void LogWarningFormat(string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", null, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void LogWarning(object message, UnityEngine.Object context = null) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Warning, message); - } - - // New methods - [StackTraceIgnore] - public static void ULog(UnityEngine.Object context, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void ULog(string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", null, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void ULogChannel(UnityEngine.Object context, string channel, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log(channel, context, LogSeverity.Message, message, par); - } - - [StackTraceIgnore] - public static void ULogChannel(string channel, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log(channel, null, LogSeverity.Message, message, par); - } - - - [StackTraceIgnore] - public static void ULogWarning(UnityEngine.Object context, object message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void ULogWarning(object message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", null, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void ULogWarningChannel(UnityEngine.Object context, string channel, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log(channel, context, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void ULogWarningChannel(string channel, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log(channel, null, LogSeverity.Warning, message, par); - } - - [StackTraceIgnore] - public static void ULogError(UnityEngine.Object context, object message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", context, LogSeverity.Error, message, par); - } - - [StackTraceIgnore] - public static void ULogError(object message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log("", null, LogSeverity.Error, message, par); - } - - [StackTraceIgnore] - public static void ULogErrorChannel(UnityEngine.Object context, string channel, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log(channel, context, LogSeverity.Error, message, par); - } - - [StackTraceIgnore] - public static void ULogErrorChannel(string channel, string message, params object[] par) - { - if (IsLogEnabled == false) - { - return; - } - - UberLogger.Logger.Log(channel, null, LogSeverity.Error, message, par); - } - - - //Logs that will not be caught by UberLogger - //Useful for debugging UberLogger - [LogUnityOnly] - public static void UnityLog(object message) - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.Log(message); - } - - [LogUnityOnly] - public static void UnityLogWarning(object message) - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.LogWarning(message); - } - - [LogUnityOnly] - public static void UnityLogError(object message) - { - if (IsLogEnabled == false) - { - return; - } - - UnityEngine.Debug.LogError(message); - } -} diff --git a/Assets/UberLogger/Debug.cs.meta b/Assets/UberLogger/Debug.cs.meta deleted file mode 100644 index 57b13df8d..000000000 --- a/Assets/UberLogger/Debug.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 78e53ab1366804822b3fa81f9ea350f7 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Assets/UberLogger/Editor.meta b/Assets/UberLogger/Editor.meta deleted file mode 100644 index 3d1578f12..000000000 --- a/Assets/UberLogger/Editor.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 924e28e7ff79f47cfa66acf89387353d -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: diff --git a/Assets/UberLogger/Editor/UberLoggerEditorWindow.cs b/Assets/UberLogger/Editor/UberLoggerEditorWindow.cs deleted file mode 100644 index cf2c72329..000000000 --- a/Assets/UberLogger/Editor/UberLoggerEditorWindow.cs +++ /dev/null @@ -1,599 +0,0 @@ -// -using UnityEngine; -using UnityEditor; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System; -using UberLogger; - -/// -/// The console logging frontend. -/// Pulls data from the UberLoggerEditor backend -/// - -public class UberLoggerEditorWindow : EditorWindow -{ - //Settings - float logDetailsWindowHeight = 100; // Customise details window size - int pushStep = 50; - int lastItemsCount = 0; - - [MenuItem("Window/Show Uber Console")] - static public void ShowLogWindow() - { - Init(); - } - - static public void Init() - { - var window = ScriptableObject.CreateInstance(); - window.Show(); - window.position = new Rect(200,200,400,300); - window.CurrentTopPaneHeight = window.position.height/2; - } - - void OnEnable() - { - // Connect to or create the backend - if(!EditorLogger) - { - EditorLogger = UberLogger.Logger.GetLogger(); - if(!EditorLogger) - { - EditorLogger = UberLoggerEditor.Create(); - } - } - - // UberLogger doesn't allow for duplicate loggers, so this is safe - // And, due to Unity serialisation stuff, necessary to do to it here. - UberLogger.Logger.AddLogger(EditorLogger); - -#if UNITY_5 - titleContent.text = "Uber Console"; -#else - title = "Uber Console"; - -#endif - - ClearSelectedMessage(); - - SmallErrorIcon = EditorGUIUtility.FindTexture( "d_console.erroricon.sml" ) ; - SmallWarningIcon = EditorGUIUtility.FindTexture( "d_console.warnicon.sml" ) ; - SmallMessageIcon = EditorGUIUtility.FindTexture( "d_console.infoicon.sml" ) ; - ErrorIcon = SmallErrorIcon; - WarningIcon = SmallWarningIcon; - MessageIcon = SmallMessageIcon; - } - - public void OnGUI() - { - //Set up the basic style, based on the Unity defaults - //A bit hacky, but means we don't have to ship an editor guistyle and can fit in to pro and free skins - Color defaultLineColor = GUI.backgroundColor; - - foreach(var style in GUI.skin.customStyles) - { - if(style.name=="LODSliderRangeSelected") - { - SelectedLogLineStyle = new GUIStyle(EditorStyles.label); - LogLineStyle = new GUIStyle(EditorStyles.label); - SelectedLogLineStyle.margin = new RectOffset(0, 0, 0,0 ); - SelectedLogLineStyle.normal.background = style.normal.background; - SelectedLogLineStyle.active = SelectedLogLineStyle.normal; - SelectedLogLineStyle.hover = SelectedLogLineStyle.normal; - SelectedLogLineStyle.focused = SelectedLogLineStyle.normal; - - LogLineStyle.margin = new RectOffset(0, 0, 0,0 ); - LogLineStyle.normal.background = EditorGUIUtility.whiteTexture; - LogLineStyle.active = LogLineStyle.normal; - LogLineStyle.hover = LogLineStyle.normal; - LogLineStyle.focused = LogLineStyle.normal; - break; - } - } - - LineColour1 = defaultLineColor; - LineColour2 = new Color(defaultLineColor.r*0.9f, defaultLineColor.g*0.9f, defaultLineColor.b*0.9f); - SizerLineColour = new Color(defaultLineColor.r*0.5f, defaultLineColor.g*0.5f, defaultLineColor.b*0.5f); - - GUILayout.BeginVertical(GUILayout.Height(CurrentTopPaneHeight), GUILayout.MinHeight(100)); - DrawToolbar(); - DrawFilter(); - DrawChannels(); - DrawLogList(); - GUILayout.EndVertical(); - ResizeTopPane(); - - //Create a small gap so the resize handle isn't overwritten - GUILayout.Space(10); - GUILayout.BeginVertical(GUILayout.MaxHeight(logDetailsWindowHeight)); - DrawLogDetails(); - GUILayout.EndVertical(); - - //Force a repaint, since we're constantly resizing/adding stuff to the window - //Potential optimisation here is to only repaint if the window is resized or we have new logs - Repaint(); - } - - //Some helper functions to draw buttons that are only as big as their text - bool ButtonClamped(string text, GUIStyle style) - { - return GUILayout.Button(text, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(text)).x)); - } - - bool ToggleClamped(bool state, string text, GUIStyle style) - { - return GUILayout.Toggle(state, text, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(text)).x)); - } - - bool ToggleClamped(bool state, GUIContent content, GUIStyle style, params GUILayoutOption[] par) - { - return GUILayout.Toggle(state, content, style, GUILayout.MaxWidth(style.CalcSize(content).x)); - } - - void LabelClamped(string text, GUIStyle style) - { - GUILayout.Label(text, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(text)).x)); - } - - /// - /// Draws the thin, Unity-style toolbar showing error counts and toggle buttons - /// - void DrawToolbar() - { - EditorGUILayout.BeginHorizontal(); - if(ButtonClamped("Clear", EditorStyles.toolbarButton)) - { - EditorLogger.Clear(); - } - EditorLogger.ClearOnPlay = ToggleClamped(EditorLogger.ClearOnPlay, "Clear On Play", EditorStyles.toolbarButton); - EditorLogger.PauseOnError = ToggleClamped(EditorLogger.PauseOnError, "Pause On Error", EditorStyles.toolbarButton); - ShowTimes = ToggleClamped(ShowTimes, "Show Times", EditorStyles.toolbarButton); - - var buttonSize = EditorStyles.toolbarButton.CalcSize(new GUIContent("T")).y; - GUILayout.FlexibleSpace(); - - var showErrors = ToggleClamped(ShowErrors, new GUIContent(EditorLogger.NoErrors.ToString(), SmallErrorIcon), EditorStyles.toolbarButton, GUILayout.Height(buttonSize)); - var showWarnings = ToggleClamped(ShowWarnings, new GUIContent(EditorLogger.NoWarnings.ToString(), SmallWarningIcon), EditorStyles.toolbarButton, GUILayout.Height(buttonSize)); - var showMessages = ToggleClamped(ShowMessages, new GUIContent(EditorLogger.NoMessages.ToString(), SmallMessageIcon), EditorStyles.toolbarButton, GUILayout.Height(buttonSize)); - //If the errors/warning to show has changed, clear the selected message - if(showErrors!=ShowErrors || showWarnings!=ShowWarnings || showMessages!=ShowMessages) - { - ClearSelectedMessage(); - } - ShowWarnings = showWarnings; - ShowMessages = showMessages; - ShowErrors = showErrors; - EditorGUILayout.EndHorizontal(); - } - - /// - /// Draws the channel selector - /// - void DrawChannels() - { - var channels = GetChannels(); - int currentChannelIndex = 0; - for(int c1=0; c1 - /// Based on filter and channel selections, should this log be shown? - /// - bool ShouldShowLog(System.Text.RegularExpressions.Regex regex, LogInfo log) - { - if(log.Channel==CurrentChannel || CurrentChannel=="All" || (CurrentChannel=="No Channel" && String.IsNullOrEmpty(log.Channel))) - { - if((log.Severity==LogSeverity.Message && ShowMessages) - || (log.Severity==LogSeverity.Warning && ShowWarnings) - || (log.Severity==LogSeverity.Error && ShowErrors)) - { - if(regex==null || regex.IsMatch(log.Message)) - { - return true; - } - } - } - - return false; - } - - /// - /// Draws the main log panel - /// - public void DrawLogList() - { - var oldColor = GUI.backgroundColor; - - LogListScrollPosition = EditorGUILayout.BeginScrollView(LogListScrollPosition); - var maxLogPanelHeight = position.height; - - float buttonY = 0; - float buttonHeight = LogLineStyle.CalcSize(new GUIContent("Test")).y; - - System.Text.RegularExpressions.Regex filterRegex = null; - - if(!String.IsNullOrEmpty(FilterRegex)) - { - filterRegex = new System.Text.RegularExpressions.Regex(FilterRegex); - } - - int drawnButtons = 0; - var logLineStyle = new GUIStyle(LogLineStyle); - for(int c1=0; c1LogListScrollPosition.y && buttonY0) - { - JumpToSource(log.Callstack[0]); - } - } - else - { - LastMessageClickTime = EditorApplication.timeSinceStartup; - } - } - else - { - SelectedMessage = c1; - SelectedCallstackFrame = -1; - } - - //Always select the game object that is the source of this message - var go = log.Source as GameObject; - if(go!=null) - { - Selection.activeGameObject = go; - } - - } - } - else - { - GUILayout.Space(buttonHeight); - } - buttonY += buttonHeight; - if (lastItemsCount != EditorLogger.LogInfo.Count) - { - LogListScrollPosition.y += pushStep; - lastItemsCount = EditorLogger.LogInfo.Count; - } - } - } - EditorGUILayout.EndScrollView(); - GUI.backgroundColor = oldColor; - } - - - /// - /// The bottom of the panel - details of the selected log - /// - public void DrawLogDetails() - { - var oldColor = GUI.backgroundColor; - SelectedMessage = Mathf.Clamp(SelectedMessage, 0, EditorLogger.LogInfo.Count); - if(EditorLogger.LogInfo.Count>0 && SelectedMessage>=0) - { - LogDetailsScrollPosition = EditorGUILayout.BeginScrollView(LogDetailsScrollPosition); - var log = EditorLogger.LogInfo[SelectedMessage]; - var logLineStyle = LogLineStyle; - for(int c1=0; c1 GetChannels() - { - var categories = EditorLogger.Channels; - - var channelList = new List(); - channelList.Add("All"); - channelList.Add("No Channel"); - channelList.AddRange(categories); - return channelList; - } - - /// - /// Handles the split window stuff, somewhat bodgily - /// - private void ResizeTopPane() - { - //Set up the resize collision rect - CursorChangeRect = new Rect(0, CurrentTopPaneHeight, position.width, 5f); - - var oldColor = GUI.color; - GUI.color = SizerLineColour; - GUI.DrawTexture(CursorChangeRect,EditorGUIUtility.whiteTexture); - GUI.color = oldColor; - EditorGUIUtility.AddCursorRect(CursorChangeRect,UnityEditor.MouseCursor.ResizeVertical); - - if( Event.current.type == EventType.mouseDown && CursorChangeRect.Contains(Event.current.mousePosition)) - { - Resize = true; - } - - if(Resize) - { - CurrentTopPaneHeight = Event.current.mousePosition.y; - CursorChangeRect.Set(CursorChangeRect.x,CurrentTopPaneHeight,CursorChangeRect.width,CursorChangeRect.height); - } - - if(Event.current.type == EventType.MouseUp) - Resize = false; - - CurrentTopPaneHeight = Mathf.Clamp(CurrentTopPaneHeight, 100, position.height-100); - } - - //Cache for GetSourceForFrame - string SourceLines; - LogStackFrame SourceLinesFrame; - - /// - ///If the frame has a valid filename, get the source string for the code around the frame - ///This is cached, so we don't keep getting it. - /// - string GetSourceForFrame(LogStackFrame frame) - { - if(SourceLinesFrame==frame) - { - return SourceLines; - } - - - if(frame.FileName==null) - { - return ""; - } - var filename = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), frame.FileName); - if (!System.IO.File.Exists(filename)) - { - return ""; - } - - int lineNumber = frame.LineNumber-1; - int linesAround = 3; - var lines = System.IO.File.ReadAllLines(filename); - var firstLine = Mathf.Max(lineNumber-linesAround, 0); - var lastLine = Mathf.Min(lineNumber+linesAround+1, lines.Count()); - - SourceLines = ""; - if(firstLine!=0) - { - SourceLines += "...\n"; - } - for(int c1=firstLine; c1"; - } - SourceLines += str; - } - if(lastLine!=lines.Count()) - { - SourceLines += "...\n"; - } - - SourceLinesFrame = frame; - return SourceLines; - } - - void ClearSelectedMessage() - { - SelectedMessage = -1; - SelectedCallstackFrame = -1; - ShowFrameSource = false; - } - - Vector2 LogListScrollPosition; - Vector2 LogDetailsScrollPosition; - - Texture2D ErrorIcon; - Texture2D WarningIcon; - Texture2D MessageIcon; - Texture2D SmallErrorIcon; - Texture2D SmallWarningIcon; - Texture2D SmallMessageIcon; - - bool ShowTimes = true; - float CurrentTopPaneHeight; - bool Resize = false; - Rect CursorChangeRect; - int SelectedMessage = -1; - - double LastMessageClickTime = 0; - double LastFrameClickTime = 0; - - - //Serialise the logger field so that Unity doesn't forget about the logger when you hit Play - [UnityEngine.SerializeField] - UberLoggerEditor EditorLogger; - - //Standard unity pro colours - // Color SelectedLineColour = new Color(35.0f/255.0f, 95.0f/255.0f, 153.0f/255.0f); - Color LineColour1; - Color LineColour2; - Color SizerLineColour; - - GUIStyle LogLineStyle; - GUIStyle SelectedLogLineStyle; - string CurrentChannel=null; - string FilterRegex = null; - bool ShowErrors = true; - bool ShowWarnings = true; - bool ShowMessages = true; - int SelectedCallstackFrame = 0; - bool ShowFrameSource = false; -} diff --git a/Assets/UberLogger/Editor/UberLoggerEditorWindow.cs.meta b/Assets/UberLogger/Editor/UberLoggerEditorWindow.cs.meta deleted file mode 100644 index 560c65f0d..000000000 --- a/Assets/UberLogger/Editor/UberLoggerEditorWindow.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 6ef03148bd3bd4ff99c7296168e907fb -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Assets/UberLogger/Examples.meta b/Assets/UberLogger/Examples.meta deleted file mode 100644 index f0cf37a4b..000000000 --- a/Assets/UberLogger/Examples.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 46af38384518a4e179c0b324b0da9c21 -folderAsset: yes -timeCreated: 1437580112 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Examples/TestUberLogger.cs b/Assets/UberLogger/Examples/TestUberLogger.cs deleted file mode 100644 index 5b66ee505..000000000 --- a/Assets/UberLogger/Examples/TestUberLogger.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -using UnityEngine; -using System.Collections; -using System.Collections.Generic; - -public class TestUberLogger : MonoBehaviour -{ - // Use this for initialization - void Start () - { - UberLogger.Logger.AddLogger(new UberLoggerFile("UberLogger.log"), false); - DoTest(); - var t = new List(); - t[0] = 5; - - } - - public void DoTest() - { - // UnityEngine.Debug.Log("Starting"); - Debug.LogWarning("Log Warning with GameObject", gameObject); - Debug.LogError("Log Error with GameObject", gameObject); - Debug.Log("Log Message with GameObject", gameObject); - Debug.LogFormat("Log Format param {0}", "Test"); - Debug.LogFormat(gameObject, "Log Format with GameObject and param {0}", "Test"); - - Debug.ULog("ULog"); - Debug.ULog("ULog with param {0}", "Test"); - Debug.ULog(gameObject, "ULog with GameObject"); - Debug.ULog(gameObject, "ULog with GameObject and param {0}", "Test"); - - Debug.ULogChannel("Test", "ULogChannel"); - Debug.ULogChannel("Test", "ULogChannel with param {0}", "Test"); - Debug.ULogChannel(gameObject, "Test", "ULogChannel with GameObject"); - Debug.ULogChannel(gameObject, "Test", "ULogChannel with GameObject and param {0}", "Test"); - - Debug.ULogWarning("ULogWarning"); - Debug.ULogWarning("ULogWarning with param {0}", "Test"); - Debug.ULogWarning(gameObject, "ULogWarning with GameObject"); - Debug.ULogWarning(gameObject, "ULogWarning with GameObject and param {0}", "Test"); - - Debug.ULogWarningChannel("Test", "ULogWarningChannel"); - Debug.ULogWarningChannel("Test", "ULogWarningChannel with param {0}", "Test"); - Debug.ULogWarningChannel(gameObject, "Test", "ULogWarningChannel with GameObject"); - Debug.ULogWarningChannel(gameObject, "Test", "ULogWarningChannel with GameObject and param {0}", "Test"); - - Debug.ULogError("ULogError"); - Debug.ULogError("ULogError with param {0}", "Test"); - Debug.ULogError(gameObject, "ULogError with GameObject"); - Debug.ULogError(gameObject, "ULogError with GameObject and param {0}", "Test"); - - Debug.ULogErrorChannel("Test", "ULogErrorChannel"); - Debug.ULogErrorChannel("Test", "ULogErrorChannel with param {0}", "Test"); - Debug.ULogErrorChannel(gameObject, "Test", "ULogErrorChannel with GameObject"); - Debug.ULogErrorChannel(gameObject, "Test", "ULogErrorChannel with GameObject and param {0}", "Test"); - } - - // Update is called once per frame - void Update () { - DoTest(); - } -} diff --git a/Assets/UberLogger/Examples/TestUberLogger.cs.meta b/Assets/UberLogger/Examples/TestUberLogger.cs.meta deleted file mode 100644 index b725fba55..000000000 --- a/Assets/UberLogger/Examples/TestUberLogger.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 88630061c1c4a4857b9aa37cccf293f0 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Assets/UberLogger/Examples/TestUberLogger.unity b/Assets/UberLogger/Examples/TestUberLogger.unity deleted file mode 100644 index 33528fc1b..000000000 --- a/Assets/UberLogger/Examples/TestUberLogger.unity +++ /dev/null @@ -1,340 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -SceneSettings: - m_ObjectHideFlags: 0 - m_PVSData: - m_PVSObjectsArray: [] - m_PVSPortalsArray: [] - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: .25 - backfaceThreshold: 100 ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 6 - m_Fog: 0 - m_FogColor: {r: .5, g: .5, b: .5, a: 1} - m_FogMode: 3 - m_FogDensity: .00999999978 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: .211999997, g: .226999998, b: .259000003, a: 1} - m_AmbientEquatorColor: {r: .114, g: .125, b: .133000001, a: 1} - m_AmbientGroundColor: {r: .0469999984, g: .0430000015, b: .0350000001, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: .5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 5 - m_GIWorkflowMode: 0 - m_LightmapsMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 3 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AOMaxDistance: 1 - m_Padding: 2 - m_CompAOExponent: 0 - m_LightmapParameters: {fileID: 0} - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_ReflectionCompression: 2 - m_LightmapSnapshot: {fileID: 0} - m_RuntimeCPUUsage: 25 ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentRadius: .5 - agentHeight: 2 - agentSlope: 45 - agentClimb: .400000006 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - accuratePlacement: 0 - minRegionArea: 2 - cellSize: .166666672 - manualCellSize: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &96528619 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 - m_Component: - - 4: {fileID: 96528621} - - 108: {fileID: 96528620} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &96528620 -Light: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 96528619} - m_Enabled: 1 - serializedVersion: 6 - m_Type: 1 - m_Color: {r: 1, g: .956862748, b: .839215696, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_Strength: 1 - m_Bias: .0500000007 - m_NormalBias: .400000006 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 4 - m_BounceIntensity: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_AreaSize: {x: 1, y: 1} ---- !u!4 &96528621 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 96528619} - m_LocalRotation: {x: .408217937, y: -.234569728, z: .109381676, w: .875426054} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 ---- !u!1 &159539984 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 108080, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - m_PrefabInternal: {fileID: 1894830317} - serializedVersion: 4 - m_Component: - - 4: {fileID: 159539986} - - 114: {fileID: 159539985} - m_Layer: 0 - m_Name: UberAppConsole - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &159539985 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 11463974, guid: 82c521de7b47a4ce89bb1da3aa96e96f, - type: 2} - m_PrefabInternal: {fileID: 1894830317} - m_GameObject: {fileID: 159539984} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0e07a4dd7148412e9649a25c8abcb11, type: 3} - m_Name: - m_EditorClassIdentifier: - Skin: {fileID: 11400000, guid: 7018997e7c4ba41d8aa5a2338b82d57f, type: 2} - SmallErrorIcon: {fileID: 2800000, guid: f5e296e323cd64d619488c517c4692af, type: 3} - SmallWarningIcon: {fileID: 2800000, guid: ecc8f3c040a254019afd50c8bc285b48, type: 3} - SmallMessageIcon: {fileID: 2800000, guid: fa976bac27b1e440eb0d8bd71c1caac3, type: 3} - GUIColour: {r: 1, g: 1, b: 1, a: .781000018} - FontSize: 0 - SizerLineColour: {r: .164705887, g: .164705887, b: .164705887, a: 1} - SizerStartHeightRatio: .75 - ButtonTexture: {fileID: 2800000, guid: 2ae9477f7f0774b808aef406d3bf2d3c, type: 3} - ErrorButtonTexture: {fileID: 2800000, guid: f752d027f2368431c924c0306e747c4b, type: 3} - ButtonPosition: {x: 0, y: 0} - ButtonSize: {x: 32, y: 32} ---- !u!4 &159539986 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - m_PrefabInternal: {fileID: 1894830317} - m_GameObject: {fileID: 159539984} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 22.7158318, y: -1.60936856, z: 6.47446775} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 ---- !u!1 &221752931 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 - m_Component: - - 4: {fileID: 221752936} - - 20: {fileID: 221752935} - - 92: {fileID: 221752934} - - 124: {fileID: 221752933} - - 81: {fileID: 221752932} - - 114: {fileID: 221752937} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &221752932 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 221752931} - m_Enabled: 1 ---- !u!124 &221752933 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 221752931} - m_Enabled: 1 ---- !u!92 &221752934 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 221752931} - m_Enabled: 1 ---- !u!20 &221752935 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 221752931} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: .300000012 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: .0219999999 - m_StereoMirrorMode: 0 ---- !u!4 &221752936 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 221752931} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 ---- !u!114 &221752937 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 221752931} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 88630061c1c4a4857b9aa37cccf293f0, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &1894830317 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_LocalPosition.x - value: 22.7158318 - objectReference: {fileID: 0} - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_LocalPosition.y - value: -1.60936856 - objectReference: {fileID: 0} - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_LocalPosition.z - value: 6.47446775 - objectReference: {fileID: 0} - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 464206, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 82c521de7b47a4ce89bb1da3aa96e96f, type: 2} - m_RootGameObject: {fileID: 159539984} - m_IsPrefabParent: 0 diff --git a/Assets/UberLogger/Examples/TestUberLogger.unity.meta b/Assets/UberLogger/Examples/TestUberLogger.unity.meta deleted file mode 100644 index 53f48e2d8..000000000 --- a/Assets/UberLogger/Examples/TestUberLogger.unity.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: dc3e87c7488b748b59aeef00e7b50c02 -DefaultImporter: - userData: - assetBundleName: diff --git a/Assets/UberLogger/LICENSE b/Assets/UberLogger/LICENSE deleted file mode 100644 index c2ebf8e79..000000000 --- a/Assets/UberLogger/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 bbbscarter - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/Assets/UberLogger/LICENSE.meta b/Assets/UberLogger/LICENSE.meta deleted file mode 100644 index 30d3a9b34..000000000 --- a/Assets/UberLogger/LICENSE.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f8478442035604d6c9af1c71c9733e99 -timeCreated: 1440268457 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Pics.meta b/Assets/UberLogger/Pics.meta deleted file mode 100644 index 9cfc74c67..000000000 --- a/Assets/UberLogger/Pics.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c8ec9229de0ff4d198015ed626773e9e -folderAsset: yes -timeCreated: 1438190280 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Pics/UberConsoleEditor.png b/Assets/UberLogger/Pics/UberConsoleEditor.png deleted file mode 100644 index 054a96915dde0dfee62bd54191337ca3bfbcbba9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62543 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 diff --git a/Assets/UberLogger/Pics/UberConsoleEditor.png.meta b/Assets/UberLogger/Pics/UberConsoleEditor.png.meta deleted file mode 100644 index 85bec9d7e..000000000 --- a/Assets/UberLogger/Pics/UberConsoleEditor.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: 956a7045f98324f14909698e76c69aca -timeCreated: 1438191103 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/Pics/UberConsoleGame.png b/Assets/UberLogger/Pics/UberConsoleGame.png deleted file mode 100644 index 3c49803f2b5b0e1384e1ab673d7e0f968fd41ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138338 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
  • Qo=l}y%38)B{u^P2J_ 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 M)i%;9*L0%(4=>|t`v3p{ diff --git a/Assets/UberLogger/Pics/UberConsoleGame.png.meta b/Assets/UberLogger/Pics/UberConsoleGame.png.meta deleted file mode 100644 index 57605fff2..000000000 --- a/Assets/UberLogger/Pics/UberConsoleGame.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -fileFormatVersion: 2 -guid: 38968d44a1fcb411fa62f629016048a6 -timeCreated: 1438191103 -licenseType: Free -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - cubemapConvolution: 0 - cubemapConvolutionSteps: 8 - cubemapConvolutionExponent: 1.5 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - rGBM: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: -1 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/README.md b/Assets/UberLogger/README.md deleted file mode 100644 index 952023743..000000000 --- a/Assets/UberLogger/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# UberLogger -UberLogger is a free, modular, opensource replacement for Unity's -Debug.Log system. It also includes UberConsole, a replacement for -Unity's editor console, an in game console version of UberConsole and -a file logger. - -UberConsole looks like this: - -![](Pics/UberConsoleEditor.png) - -And the in-game version looks like this: - -![](Pics/UberConsoleGame.png) - -## Core Features -* Drop in replacement for Unity's Debug.Log() methods. No code changes - needed. -* A threadsafe, modular backend that supports any number of loggers, - so Debug.Log can be routed to multiple locations. The supplied file - logger should work on mobile devices. -* Included are a replacement editor console, an in-game console and a - file logger. -* Support for named debug channels - Debug.LogChannel("Boot", "Some - message") can be filtered based on the channel name. -* Methods may be marked as excluded from callstacks by tagging them - with '[StackTraceIgnore]', to keep your logs tidy. - -## UberConsole Features -* More compact view shows more errors in the same space. -* Supports debug log channels -* Messages can be filtered by regular expressions -* Timestamps -* Source code can be shown inline with the callstack. -* An in-game version of UberConsole is also provided. - -## Installation -* Stick the UberLogger folder somewhere under your Unity project - Assets folder. -* To view the editor UberConsole, go to Window->Show Uber Console. -* To use UberConsole in your game, drag the UberAppConsole prefab into - your scene. -* Usage examples can be seen in the Examples folder. - -## Notes -* Currently only tested in Unity 4 and 5 Free, but should work in Pro. -* Due to file incompatibilities, the in-game console skin doesn't work - in Unity 4 and would need to be set up again. Same with the - prefab. That said, the code works, and so does the editor UberConsole. -* Pull requests welcome! - - * * * * - -[UberLogger]: https://github.com/bbbscarter/UberLogger diff --git a/Assets/UberLogger/README.md.meta b/Assets/UberLogger/README.md.meta deleted file mode 100644 index 43488ee47..000000000 --- a/Assets/UberLogger/README.md.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 951b1a41f8f1d4c57b6fbcc74ca23057 -timeCreated: 1438190280 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/UberAppConsole.prefab b/Assets/UberLogger/UberAppConsole.prefab deleted file mode 100644 index 944412df9..000000000 --- a/Assets/UberLogger/UberAppConsole.prefab +++ /dev/null @@ -1,64 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &108080 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 4 - m_Component: - - 4: {fileID: 464206} - - 114: {fileID: 11463974} - m_Layer: 0 - m_Name: UberAppConsole - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &464206 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 108080} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 22.7158318, y: -1.60936856, z: 6.47446775} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 ---- !u!114 &11463974 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 108080} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0e07a4dd7148412e9649a25c8abcb11, type: 3} - m_Name: - m_EditorClassIdentifier: - Skin: {fileID: 11400000, guid: 7018997e7c4ba41d8aa5a2338b82d57f, type: 2} - SmallErrorIcon: {fileID: 2800000, guid: f5e296e323cd64d619488c517c4692af, type: 3} - SmallWarningIcon: {fileID: 2800000, guid: ecc8f3c040a254019afd50c8bc285b48, type: 3} - SmallMessageIcon: {fileID: 2800000, guid: fa976bac27b1e440eb0d8bd71c1caac3, type: 3} - GUIColour: {r: 1, g: 1, b: 1, a: .781000018} - FontSize: 0 - SizerLineColour: {r: .164705887, g: .164705887, b: .164705887, a: 1} - SizerStartHeightRatio: .75 - ButtonTexture: {fileID: 2800000, guid: 2ae9477f7f0774b808aef406d3bf2d3c, type: 3} - ErrorButtonTexture: {fileID: 2800000, guid: f752d027f2368431c924c0306e747c4b, type: 3} - ButtonPosition: {x: 0, y: 0} - ButtonSize: {x: 32, y: 32} ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 108080} - m_IsPrefabParent: 1 diff --git a/Assets/UberLogger/UberAppConsole.prefab.meta b/Assets/UberLogger/UberAppConsole.prefab.meta deleted file mode 100644 index fff0c85c6..000000000 --- a/Assets/UberLogger/UberAppConsole.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 82c521de7b47a4ce89bb1da3aa96e96f -timeCreated: 1438191581 -licenseType: Free -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/UberLogger.cs b/Assets/UberLogger/UberLogger.cs deleted file mode 100644 index d24360dc5..000000000 --- a/Assets/UberLogger/UberLogger.cs +++ /dev/null @@ -1,540 +0,0 @@ -// -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System; - -#if UNITY_EDITOR -using UnityEditor; -#endif - -namespace UberLogger -{ - //Use this to exclude methods from the stack trace - [AttributeUsage(AttributeTargets.Method)] - public class StackTraceIgnore : Attribute { } - - //Use this to stop UberLogger handling logs with this in the callstack. - [AttributeUsage(AttributeTargets.Method)] - public class LogUnityOnly : Attribute { } - - public enum LogSeverity - { - Message, - Warning, - Error, - } - - /// - /// Interface for deriving new logger backends. - /// Add a new logger via Logger.AddLogger() - /// - public interface ILogger - { - /// - /// Logging backend entry point. logInfo contains all the information about the logging request. - /// - void Log(LogInfo logInfo); - } - - - //Information about a particular frame of a callstack - [System.Serializable] - public class LogStackFrame - { - public string MethodName; - public string DeclaringType; - public string ParameterSig; - - public int LineNumber; - public string FileName; - - string FormattedMethodName; - - /// - /// Convert from a .Net stack frame - /// - public LogStackFrame(StackFrame frame) - { - var method = frame.GetMethod(); - MethodName = method.Name; - DeclaringType = method.DeclaringType.Name; - - var pars = method.GetParameters(); - for (int c1 = 0; c1 < pars.Length; c1++) - { - ParameterSig += String.Format("{0} {1}", pars[c1].ParameterType, pars[c1].Name); - if (c1 + 1 < pars.Length) - { - ParameterSig += ", "; - } - } - - FileName = frame.GetFileName(); - LineNumber = frame.GetFileLineNumber(); - FormattedMethodName = MakeFormattedMethodName(); - } - - /// - /// Convert from a Unity stack frame (for internal Unity errors rather than excpetions) - /// - public LogStackFrame(string unityStackFrame) - { - if (Logger.ExtractInfoFromUnityStackInfo(unityStackFrame, ref DeclaringType, ref MethodName, ref FileName, ref LineNumber)) - { - FormattedMethodName = MakeFormattedMethodName(); - } - else - { - FormattedMethodName = unityStackFrame; - } - } - - - /// - /// Basic stack frame info when we have nothing else - /// - public LogStackFrame(string message, string filename, int lineNumber) - { - FileName = filename; - LineNumber = lineNumber; - FormattedMethodName = message; - } - - - - public string GetFormattedMethodName() - { - return FormattedMethodName; - } - - /// - /// Make a nice string showing the stack information - used by the loggers - /// - string MakeFormattedMethodName() - { - string filename = FileName; - if (!String.IsNullOrEmpty(FileName)) - { - var startSubName = FileName.IndexOf("Assets", StringComparison.OrdinalIgnoreCase); - - if (startSubName > 0) - { - filename = FileName.Substring(startSubName); - } - } - string methodName = String.Format("{0}.{1}({2}) (at {3}:{4})", DeclaringType, MethodName, ParameterSig, filename, LineNumber); - return methodName; - } - } - - /// - /// A single item of logging information - /// - [System.Serializable] - public class LogInfo - { - public UnityEngine.Object Source; - public string Channel; - public LogSeverity Severity; - public string Message; - public List Callstack; - public double TimeStamp; - string TimeStampAsString; - - public string GetTimeStampAsString() - { - return TimeStampAsString; - } - - public LogInfo(UnityEngine.Object source, string channel, LogSeverity severity, List callstack, object message, params object[] par) - { - Source = source; - Channel = channel; - Severity = severity; - Message = ""; - - var messageString = message as String; - if (messageString != null) - { - if (par.Length > 0) - { - Message = System.String.Format(messageString, par); - } - else - { - Message = messageString; - } - } - else - { - if (message != null) - { - Message = message.ToString(); - } - } - - Callstack = callstack; - TimeStamp = Logger.GetTime(); - TimeStampAsString = String.Format("{0:0.0000}", TimeStamp); - } - } - - /// - /// The core of UberLogger - the entry point for logging information - /// - public static class Logger - { - // Controls how many historical messages to keep to pass into newly registered loggers - public static int MaxMessagesToKeep = 1000; - - // If true, any logs sent to UberLogger will be forwarded on to the Unity logger. - // Useful if you want to use both systems - public static bool ForwardMessages = true; - - static List Loggers = new List(); - static LinkedList RecentMessages = new LinkedList(); - static double StartTime; - static bool AlreadyLogging = false; - - static Logger() - { - // Register with Unity's logging system -#if UNITY_5 - Application.logMessageReceived += UnityLogHandler; -#else - Application.RegisterLogCallback(UnityLogHandler); -#endif - StartTime = GetTime(); - } - - /// - /// Registered Unity error handler - /// - [StackTraceIgnore] - static void UnityLogHandler(string logString, string stackTrace, UnityEngine.LogType logType) - { - UnityLogInternal(logString, stackTrace, logType); - } - - static public double GetTime() - { -#if UNITY_EDITOR - return EditorApplication.timeSinceStartup - StartTime; -#else - double time = Time.time; - return time - StartTime; -#endif - } - - /// - /// Registers a new logger backend, which we be told every time there's a new log. - /// if populateWithExistingMessages is true, UberLogger will immediately pump the new logger with past messages - /// - static public void AddLogger(ILogger logger, bool populateWithExistingMessages = true) - { - lock (Loggers) - { - if (populateWithExistingMessages) - { - foreach (var oldLog in RecentMessages) - { - logger.Log(oldLog); - } - } - - if (!Loggers.Contains(logger)) - { - Loggers.Add(logger); - } - } - } - - /// - /// Tries to extract useful information about the log from a Unity error message. - /// Only used when handling a Unity error message and we can't get a useful callstack - /// - static public bool ExtractInfoFromUnityMessage(string log, ref string filename, ref int lineNumber) - { - // log = "Assets/Code/Debug.cs(140,21): warning CS0618: 'some error' - var match = System.Text.RegularExpressions.Regex.Matches(log, @"(.*)\((\d+).*\)"); - - if (match.Count > 0) - { - filename = match[0].Groups[1].Value; - lineNumber = Convert.ToInt32(match[0].Groups[2].Value); - return true; - } - return false; - } - - - /// - /// Tries to extract useful information about the log from a Unity stack trace - /// - static public bool ExtractInfoFromUnityStackInfo(string log, ref string declaringType, ref string methodName, ref string filename, ref int lineNumber) - { - // log = "DebugLoggerEditorWindow.DrawLogDetails () (at Assets/Code/Editor.cs:298)"; - var match = System.Text.RegularExpressions.Regex.Matches(log, @"(.*)\.(.*)\s*\(.*\(at (.*):(\d+)"); - - if (match.Count > 0) - { - declaringType = match[0].Groups[1].Value; - methodName = match[0].Groups[2].Value; - filename = match[0].Groups[3].Value; - lineNumber = Convert.ToInt32(match[0].Groups[4].Value); - return true; - } - return false; - } - - /// - /// Converts the curent stack trace into a list of UberLogger's LogStackFrame. - /// Excludes any methods with the StackTraceIgnore attribute - /// Returns false if the stack frame contains any methods flagged as LogUnityOnly - /// - [StackTraceIgnore] - static bool GetCallstack(ref List callstack) - { - callstack.Clear(); - StackTrace stackTrace = new StackTrace(true); // get call stack - StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames) - - foreach (StackFrame stackFrame in stackFrames) - { - var method = stackFrame.GetMethod(); - if (method.IsDefined(typeof(LogUnityOnly), true)) - { - return true; - } - if (!method.IsDefined(typeof(StackTraceIgnore), true)) - { - //Cut out some internal noise from Unity stuff - if (!(method.Name == "CallLogCallback" && method.DeclaringType.Name == "Application") - && !(method.DeclaringType.Name == "Debug" && (method.Name == "Internal_Log" || method.Name == "Log"))) - { - var logStackFrame = new LogStackFrame(stackFrame); - - callstack.Add(logStackFrame); - - } - } - } - - return false; - } - - /// - /// Converts a Unity callstack string into a list of UberLogger's LogStackFrame - /// Doesn't do any filtering, since this should only be dealing with internal Unity errors rather than client code - /// - static List GetCallstackFromUnityLog(string unityCallstack) - { - var lines = System.Text.RegularExpressions.Regex.Split(unityCallstack, System.Environment.NewLine); - var stack = new List(); - foreach (var line in lines) - { - var frame = new LogStackFrame(line); - if (!string.IsNullOrEmpty(frame.GetFormattedMethodName())) - { - stack.Add(new LogStackFrame(line)); - } - } - return stack; - } - - /// - /// The core entry point of all logging coming from Unity. Takes a log request, creates the call stack and pumps it to all the backends - /// - [StackTraceIgnore()] - static void UnityLogInternal(string unityMessage, string unityCallStack, UnityEngine.LogType logType) - { - //Make sure only one thread can do this at a time. - //This should mean that most backends don't have to worry about thread safety (unless they do complicated stuff) - lock (Loggers) - { - //Prevent nasty recursion problems - if (!AlreadyLogging) - { - try - { - AlreadyLogging = true; - - var callstack = new List(); - var unityOnly = GetCallstack(ref callstack); - if (unityOnly) - { - return; - } - - //If we have no useful callstack, fall back to parsing Unity's callstack - if (callstack.Count == 0) - { - callstack = GetCallstackFromUnityLog(unityCallStack); - } - - LogSeverity severity; - switch (logType) - { - case UnityEngine.LogType.Error: severity = LogSeverity.Error; break; - case UnityEngine.LogType.Exception: severity = LogSeverity.Error; break; - case UnityEngine.LogType.Warning: severity = LogSeverity.Warning; break; - default: severity = LogSeverity.Message; break; - } - - string filename = ""; - int lineNumber = 0; - - //Finally, parse the error message so we can get basic file and line information - if (ExtractInfoFromUnityMessage(unityMessage, ref filename, ref lineNumber)) - { - callstack.Insert(0, new LogStackFrame(unityMessage, filename, lineNumber)); - } - - var logInfo = new LogInfo(null, "", severity, callstack, unityMessage); - - //Add this message to our history - RecentMessages.AddLast(logInfo); - - //Make sure our history doesn't get too big - TrimOldMessages(); - - //Delete any dead loggers and pump them with the new log - Loggers.RemoveAll(l => l == null); - Loggers.ForEach(l => l.Log(logInfo)); - } - finally - { - AlreadyLogging = false; - } - } - } - } - - - /// - /// The core entry point of all logging coming from client code. - /// Takes a log request, creates the call stack and pumps it to all the backends - /// - [StackTraceIgnore()] - static public void Log(string channel, UnityEngine.Object source, LogSeverity severity, object message, params object[] par) - { - lock (Loggers) - { - if (!AlreadyLogging) - { - try - { - AlreadyLogging = true; - var callstack = new List(); - var unityOnly = GetCallstack(ref callstack); - if (unityOnly) - { - return; - } - - var logInfo = new LogInfo(source, channel, severity, callstack, SquashToOneLine(message), par); - - //Add this message to our history - RecentMessages.AddLast(logInfo); - - //Make sure our history doesn't get too big - TrimOldMessages(); - - //Delete any dead loggers and pump them with the new log - Loggers.RemoveAll(l => l == null); - Loggers.ForEach(l => l.Log(logInfo)); - - //If required, pump this message back into Unity - if (ForwardMessages) - { - ForwardToUnity(source, severity, message, par); - } - } - finally - { - AlreadyLogging = false; - } - } - } - } - /// - /// Helperfunction to reduce multiline messages to one line. - /// - /// Message make one line only - /// Message free of linebreaks - private static object SquashToOneLine(object message) - { - message = message.ToString().Replace("\r\n", " "); - message = message.ToString().Replace("\n", " "); - - return (object)message; - } - - /// - /// Forwards an UberLogger log to Unity so it's visible in the built-in console - /// - [LogUnityOnly()] - static void ForwardToUnity(UnityEngine.Object source, LogSeverity severity, object message, params object[] par) - { - object showObject = null; - if (message != null) - { - var messageAsString = message as string; - if (messageAsString != null) - { - if (par.Length > 0) - { - showObject = String.Format(messageAsString, par); - } - else - { - showObject = message; - } - } - else - { - showObject = message; - } - } - - if (source == null) - { - if (severity == LogSeverity.Message) UnityEngine.Debug.Log(showObject); - else if (severity == LogSeverity.Warning) UnityEngine.Debug.LogWarning(showObject); - else if (severity == LogSeverity.Error) UnityEngine.Debug.LogError(showObject); - } - else - { - if (severity == LogSeverity.Message) UnityEngine.Debug.Log(showObject, source); - else if (severity == LogSeverity.Warning) UnityEngine.Debug.LogWarning(showObject, source); - else if (severity == LogSeverity.Error) UnityEngine.Debug.LogError(showObject, source); - } - } - - /// - /// Finds a registered logger, if it exists - /// - static public T GetLogger() where T : class - { - foreach (var logger in Loggers) - { - if (logger is T) - { - return logger as T; - } - } - return null; - } - - static void TrimOldMessages() - { - while (RecentMessages.Count > MaxMessagesToKeep) - { - RecentMessages.RemoveFirst(); - } - } - } - -} diff --git a/Assets/UberLogger/UberLogger.cs.meta b/Assets/UberLogger/UberLogger.cs.meta deleted file mode 100644 index b0adbfbc3..000000000 --- a/Assets/UberLogger/UberLogger.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b82f8d256ff5d4555b51e2cf116640e1 -timeCreated: 1437572839 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/UberLoggerAppWindow.cs b/Assets/UberLogger/UberLoggerAppWindow.cs deleted file mode 100644 index 643d37abd..000000000 --- a/Assets/UberLogger/UberLoggerAppWindow.cs +++ /dev/null @@ -1,496 +0,0 @@ -// -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System; -using UberLogger; - - -/// -/// The in-app console logging frontend and backend -/// -public class UberLoggerAppWindow : MonoBehaviour, UberLogger.ILogger -{ - public GUISkin Skin; - public Texture2D SmallErrorIcon; - public Texture2D SmallWarningIcon; - public Texture2D SmallMessageIcon; - public Color GUIColour = new Color(1, 1, 1, 0.5f); - - //If non-zero, scales the fonts - public int FontSize = 0; - public Color SizerLineColour = new Color(42.0f/255.0f, 42.0f/255.0f, 42.0f/255.0f); - public float SizerStartHeightRatio = 0.75f; - - public void Log(LogInfo logInfo) - { - LogInfo.Add(logInfo); - if(logInfo.Severity==LogSeverity.Error) - { - NoErrors++; - } - else if(logInfo.Severity==LogSeverity.Warning) - { - NoWarnings++; - } - else - { - NoMessages++; - } - if(logInfo.Severity==LogSeverity.Error && PauseOnError) - { - UnityEngine.Debug.Break(); - } - } - - void Clear() - { - LogInfo.Clear(); - NoWarnings = 0; - NoErrors = 0; - NoMessages = 0; - } - - void Start() - { - DontDestroyOnLoad(gameObject); - UberLogger.Logger.AddLogger(this); - ClearSelectedMessage(); - WindowRect = new Rect(0,0, Screen.width/2, Screen.height); - CurrentTopPaneHeight = Screen.height*SizerStartHeightRatio; - } - - bool ShowWindow = false; - public Texture2D ButtonTexture; - public Texture2D ErrorButtonTexture; - public Vector2 ButtonPosition; - public Vector2 ButtonSize = new Vector2(32, 32); - - /// - /// Shows either the activation button or the full UI - /// - public void OnGUI() - { - GUI.skin = Skin; - if(ShowWindow) - { - var oldGUIColor = GUI.color; - GUI.color = GUIColour; - WindowRect = new Rect(0,0, Screen.width/2, Screen.height); - //Set up the basic style, based on the Unity defaults - LogLineStyle1 = Skin.customStyles[0]; - LogLineStyle2 = Skin.customStyles[1]; - SelectedLogLineStyle = Skin.customStyles[2]; - - - - LogLineStyle1.fontSize = FontSize; - LogLineStyle2.fontSize = FontSize; - SelectedLogLineStyle.fontSize = FontSize; - - WindowRect = GUILayout.Window(1, WindowRect, DrawWindow, "Uber Console", GUI.skin.window); - GUI.color = oldGUIColor; - } - else - { - DrawActivationButton(); - } - } - - public void DrawActivationButton() - { - Texture2D buttonTex = ButtonTexture; - if(NoErrors>0) - { - buttonTex = ErrorButtonTexture; - } - var buttonPos = ButtonPosition; - buttonPos.x*=Screen.width; - buttonPos.y*=Screen.height; - if(buttonPos.x+ButtonSize.x> Screen.width) - { - buttonPos.x = Screen.width-ButtonSize.x; - } - if(buttonPos.y+ButtonSize.y > Screen.height) - { - buttonPos.y = Screen.height-ButtonSize.y; - } - var buttonRect = new Rect(buttonPos.x, buttonPos.y, ButtonSize.x, ButtonSize.y); - var style = new GUIStyle(); - - if(GUI.Button(buttonRect, buttonTex, style)) - { - ShowWindow = !ShowWindow; - } - } - - /// - /// Draws the main window - /// - void DrawWindow(int windowID) - { - // GUI.DragWindow(new Rect(0, 0, 10000, 20)); - var oldGUIColour = GUI.color; - GUI.color = GUIColour; - GUILayout.BeginVertical(GUILayout.Height(CurrentTopPaneHeight-GUI.skin.window.padding.top), GUILayout.MinHeight(100)); - DrawToolbar(); - DrawFilter(); - DrawChannels(); - DrawLogList(); - GUILayout.EndVertical(); - ResizeTopPane(); - - //Create a small gap so the resize handle isn't overwritten - GUILayout.Space(10); - GUILayout.BeginVertical(); - DrawLogDetails(); - GUILayout.EndVertical(); - GUI.color = oldGUIColour; - - DrawActivationButton(); - } - - //Some helper functions to draw buttons that are only as big as their text - bool ButtonClamped(string text, GUIStyle style) - { - return GUILayout.Button(text, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(text)).x)); - } - - bool ToggleClamped(bool state, string text, GUIStyle style) - { - return GUILayout.Toggle(state, text, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(text)).x)); - } - - bool ToggleClamped(bool state, GUIContent content, GUIStyle style, params GUILayoutOption[] par) - { - return GUILayout.Toggle(state, content, style, GUILayout.MaxWidth(style.CalcSize(content).x)); - } - - void LabelClamped(string text, GUIStyle style) - { - GUILayout.Label(text, style, GUILayout.MaxWidth(style.CalcSize(new GUIContent(text)).x)); - } - - /// - /// Draws the thin, Unity-style toolbar showing error counts and toggle buttons - /// - void DrawToolbar() - { - var toolbarStyle = GUI.skin.customStyles[3]; - GUILayout.BeginHorizontal(); - if(ButtonClamped("Clear", toolbarStyle)) - { - Clear(); - } - // PauseOnError = ToggleClamped(PauseOnError, "Pause On Error", toolbarStyle); - ShowTimes = ToggleClamped(ShowTimes, "Show Times", toolbarStyle); - - var buttonSize = toolbarStyle.CalcSize(new GUIContent("T")).y; - GUILayout.FlexibleSpace(); - - var showErrors = ToggleClamped(ShowErrors, new GUIContent(NoErrors.ToString(), SmallErrorIcon), toolbarStyle, GUILayout.Height(buttonSize)); - var showWarnings = ToggleClamped(ShowWarnings, new GUIContent(NoWarnings.ToString(), SmallWarningIcon), toolbarStyle, GUILayout.Height(buttonSize)); - var showMessages = ToggleClamped(ShowMessages, new GUIContent(NoMessages.ToString(), SmallMessageIcon), toolbarStyle, GUILayout.Height(buttonSize)); - //If the errors/warning to show has changed, clear the selected message - if(showErrors!=ShowErrors || showWarnings!=ShowWarnings || showMessages!=ShowMessages) - { - ClearSelectedMessage(); - } - ShowWarnings = showWarnings; - ShowMessages = showMessages; - ShowErrors = showErrors; - GUILayout.EndHorizontal(); - } - - /// - /// Draws the channel selector - /// - void DrawChannels() - { - var channels = GetChannels(); - int currentChannelIndex = 0; - for(int c1=0; c1 - /// Based on filter and channel selections, should this log be shown? - /// - bool ShouldShowLog(System.Text.RegularExpressions.Regex regex, LogInfo log) - { - if(log.Channel==CurrentChannel || CurrentChannel=="All" || (CurrentChannel=="No Channel" && String.IsNullOrEmpty(log.Channel))) - { - if((log.Severity==LogSeverity.Message && ShowMessages) - || (log.Severity==LogSeverity.Warning && ShowWarnings) - || (log.Severity==LogSeverity.Error && ShowErrors)) - { - if(regex==null || regex.IsMatch(log.Message)) - { - return true; - } - } - } - - return false; - } - - /// - /// Draws the main log panel - /// - public void DrawLogList() - { - var oldColor = GUI.backgroundColor; - - LogListScrollPosition = GUILayout.BeginScrollView(LogListScrollPosition); - var maxLogPanelHeight = WindowRect.height; - - float buttonY = 0; - float buttonHeight = LogLineStyle1.CalcSize(new GUIContent("Test")).y; - - System.Text.RegularExpressions.Regex filterRegex = null; - - if(!String.IsNullOrEmpty(FilterRegex)) - { - filterRegex = new System.Text.RegularExpressions.Regex(FilterRegex); - } - - int drawnButtons = 0; - var logLineStyle = LogLineStyle1; - for(int c1=0; c1LogListScrollPosition.y && buttonY - /// The bottom of the panel - details of the selected log - /// - public void DrawLogDetails() - { - var oldColor = GUI.backgroundColor; - SelectedMessage = Mathf.Clamp(SelectedMessage, 0, LogInfo.Count); - if(LogInfo.Count>0 && SelectedMessage>=0) - { - LogDetailsScrollPosition = GUILayout.BeginScrollView(LogDetailsScrollPosition); - var log = LogInfo[SelectedMessage]; - var logLineStyle = LogLineStyle1; - for(int c1=0; c1 GetChannels() - { - var categories = new HashSet(); - foreach(var logInfo in LogInfo) - { - if(!String.IsNullOrEmpty(logInfo.Channel) && !categories.Contains(logInfo.Channel)) - { - categories.Add(logInfo.Channel); - } - } - - var channelList = new List(); - channelList.Add("All"); - channelList.Add("No Channel"); - channelList.AddRange(categories); - return channelList; - } - - bool Resizing = false; - private void ResizeTopPane() - { - //Set up the resize collision rect - // float offset = GUI.skin.window.border.bottom; - float offset = 0; - var resizerRect = new Rect(0, CurrentTopPaneHeight+offset, WindowRect.width, 5f); - - var oldColor = GUI.color; - GUI.color = SizerLineColour; - GUI.DrawTexture(resizerRect, Texture2D.whiteTexture); - GUI.color = oldColor; - - if( Event.current.type == EventType.mouseDown && resizerRect.Contains(Event.current.mousePosition)) - { - Resizing = true; - } - - if(Resizing) - { - CurrentTopPaneHeight = Event.current.mousePosition.y; - } - - if(Event.current.type == EventType.MouseUp) - { - Resizing = false; - } - - - CurrentTopPaneHeight = Mathf.Clamp(CurrentTopPaneHeight, 100, WindowRect.height-100); - } - - void ClearSelectedMessage() - { - SelectedMessage = -1; - SelectedCallstackFrame = -1; - } - - Vector2 LogListScrollPosition; - Vector2 LogDetailsScrollPosition; - - - bool ShowTimes = true; - float CurrentTopPaneHeight; - int SelectedMessage = -1; - - double LastMessageClickTime = 0; - - List LogInfo = new List(); - bool PauseOnError = false; - int NoErrors; - int NoWarnings; - int NoMessages; - Rect WindowRect = new Rect(0,0, 100, 100); - - - GUIStyle LogLineStyle1; - GUIStyle LogLineStyle2; - GUIStyle SelectedLogLineStyle; - string CurrentChannel=null; - string FilterRegex = ""; - - bool ShowErrors = true; - bool ShowWarnings = true; - bool ShowMessages = true; - int SelectedCallstackFrame = 0; -} diff --git a/Assets/UberLogger/UberLoggerAppWindow.cs.meta b/Assets/UberLogger/UberLoggerAppWindow.cs.meta deleted file mode 100644 index c2d05c855..000000000 --- a/Assets/UberLogger/UberLoggerAppWindow.cs.meta +++ /dev/null @@ -1,19 +0,0 @@ -fileFormatVersion: 2 -guid: a0e07a4dd7148412e9649a25c8abcb11 -timeCreated: 1437728182 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: - - Skin: {fileID: 11400000, guid: 7018997e7c4ba41d8aa5a2338b82d57f, type: 2} - - ButtonTexture: {fileID: 2800000, guid: 2ae9477f7f0774b808aef406d3bf2d3c, type: 3} - - ErrorButtonTexture: {fileID: 2800000, guid: f752d027f2368431c924c0306e747c4b, - type: 3} - - SmallErrorIcon: {fileID: 2800000, guid: f5e296e323cd64d619488c517c4692af, type: 3} - - SmallWarningIcon: {fileID: 2800000, guid: ecc8f3c040a254019afd50c8bc285b48, type: 3} - - SmallMessageIcon: {fileID: 2800000, guid: fa976bac27b1e440eb0d8bd71c1caac3, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/UberLogger/UberLoggerEditor.cs b/Assets/UberLogger/UberLoggerEditor.cs deleted file mode 100644 index 4ea9b76f3..000000000 --- a/Assets/UberLogger/UberLoggerEditor.cs +++ /dev/null @@ -1,111 +0,0 @@ -// -#if UNITY_EDITOR -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System; -using UnityEditor; -using UberLogger; - - -/// -/// The basic editor logger backend -/// This is seperate from the editor frontend, so we can have multiple frontends active if we wish, -/// and so that we catch errors even without the frontend active. -/// Derived from ScriptableObject so it persists across play sessions. -/// -[System.Serializable] -public class UberLoggerEditor : ScriptableObject, UberLogger.ILogger -{ - public List LogInfo = new List(); - public bool PauseOnError = false; - public bool ClearOnPlay = true; - public bool WasPlaying = false; - - static public UberLoggerEditor Create() - { - var editorDebug = ScriptableObject.FindObjectOfType(); - - if(editorDebug==null) - { - editorDebug = ScriptableObject.CreateInstance(); - } - - editorDebug.NoErrors = 0; - editorDebug.NoWarnings = 0; - editorDebug.NoMessages = 0; - - return editorDebug; - } - - public void OnEnable() - { - EditorApplication.playmodeStateChanged += OnPlaymodeStateChanged; - - //Make this scriptable object persist between Play sessions - hideFlags = HideFlags.HideAndDontSave; - } - - /// - /// If we're about to start playing and 'ClearOnPlay' is set, clear the current logs - /// - public void ProcessOnStartClear() - { - if(!WasPlaying && EditorApplication.isPlayingOrWillChangePlaymode) - { - if(ClearOnPlay) - { - Clear(); - } - } - WasPlaying = EditorApplication.isPlayingOrWillChangePlaymode; - } - - void OnPlaymodeStateChanged() - { - ProcessOnStartClear(); - } - - public int NoErrors; - public int NoWarnings; - public int NoMessages; - public HashSet Channels = new HashSet(); - - public void Log(LogInfo logInfo) - { - if(!String.IsNullOrEmpty(logInfo.Channel) && !Channels.Contains(logInfo.Channel)) - { - Channels.Add(logInfo.Channel); - } - - ProcessOnStartClear(); - LogInfo.Add(logInfo); - if(logInfo.Severity==LogSeverity.Error) - { - NoErrors++; - } - else if(logInfo.Severity==LogSeverity.Warning) - { - NoWarnings++; - } - else - { - NoMessages++; - } - if(logInfo.Severity==LogSeverity.Error && PauseOnError) - { - UnityEngine.Debug.Break(); - } - } - - public void Clear() - { - LogInfo.Clear(); - Channels.Clear(); - NoWarnings = 0; - NoErrors = 0; - NoMessages = 0; - } -} - -#endif diff --git a/Assets/UberLogger/UberLoggerEditor.cs.meta b/Assets/UberLogger/UberLoggerEditor.cs.meta deleted file mode 100644 index 2eecee363..000000000 --- a/Assets/UberLogger/UberLoggerEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 171c7ffd53d8144faa6b0cd0cb750235 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Assets/UberLogger/UberLoggerFile.cs b/Assets/UberLogger/UberLoggerFile.cs deleted file mode 100644 index 857ca05ca..000000000 --- a/Assets/UberLogger/UberLoggerFile.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -using System.Collections; -using System.Collections.Generic; -using UberLogger; -using System.IO; -using UnityEngine; - -/// -/// A basic file logger backend -/// -public class UberLoggerFile : UberLogger.ILogger -{ - private StreamWriter LogFileWriter; - private bool IncludeCallStacks; - - /// - /// Constructor. Make sure to add it to UberLogger via Logger.AddLogger(); - /// filename is relative to Application.persistentDataPath - /// if includeCallStacks is true it will dump out the full callstack for all logs, at the expense of big log files. - /// - public UberLoggerFile(string filename, bool includeCallStacks = true) - { - IncludeCallStacks = includeCallStacks; - var fileLogPath = System.IO.Path.Combine(Application.persistentDataPath, filename); - Debug.Log("Initialising file logging to " + fileLogPath); - LogFileWriter = new StreamWriter(fileLogPath, false); - LogFileWriter.AutoFlush = true; - } - - public void Log(LogInfo logInfo) - { - lock(this) - { - LogFileWriter.WriteLine(logInfo.Message); - if(IncludeCallStacks && logInfo.Callstack.Count>0) - { - foreach(var frame in logInfo.Callstack) - { - LogFileWriter.WriteLine(frame.GetFormattedMethodName()); - } - LogFileWriter.WriteLine(); - } - } - } -} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index a3104b1ea..c76759f1f 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -74,7 +74,6 @@ PlayerSettings: ignoreAlphaClear: 0 xboxOneResolution: 0 xboxOneMonoLoggingLevel: 0 - xboxOneLoggingLevel: 1 ps3SplashScreen: {fileID: 0} videoMemoryForVertexBuffers: 0 psp2PowerMode: 0 @@ -285,7 +284,6 @@ PlayerSettings: ps4PatchPkgPath: ps4PatchLatestPkgPath: ps4PatchChangeinfoPath: - ps4PatchDayOne: 0 ps4attribUserManagement: 0 ps4attribMoveSupport: 0 ps4attrib3DSupport: 0 @@ -382,7 +380,6 @@ PlayerSettings: tizenSigningProfileName: tizenGPSPermissions: 0 tizenMicrophonePermissions: 0 - tizenMinOSVersion: 0 n3dsUseExtSaveData: 0 n3dsCompressStaticMem: 1 n3dsExtSaveDataNumber: 0x12345 diff --git a/README.md b/README.md index 99988cb1f..748626beb 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,8 @@ are licensed under the MIT License and can be found here: Audio engine : FMOD by Firelight Technologies +Logger: Based on UnityDebugger by Valian (at ), modified source code available at + ## Contributing Please check the [CONTRIBUTING.md](CONTRIBUTING.md) file for contribution instructions and guidelines.