├── .gitignore ├── Foundation Terminal ├── Assets │ ├── Foundation.meta │ ├── Foundation │ │ ├── Terminal.meta │ │ └── Terminal │ │ │ ├── Internal.meta │ │ │ ├── Internal │ │ │ ├── ClearCommand.cs │ │ │ ├── ClearCommand.cs.meta │ │ │ ├── ObservableList.cs │ │ │ ├── ObservableList.cs.meta │ │ │ ├── SpamCommand.cs │ │ │ ├── SpamCommand.cs.meta │ │ │ ├── TerminalCommandView.cs │ │ │ ├── TerminalCommandView.cs.meta │ │ │ ├── TerminalItemView.cs │ │ │ ├── TerminalItemView.cs.meta │ │ │ ├── TerminalView.cs │ │ │ └── TerminalView.cs.meta │ │ │ ├── NVentimiglia_Unity3d-uGUI-Terminal.pdf │ │ │ ├── NVentimiglia_Unity3d-uGUI-Terminal.pdf.meta │ │ │ ├── Terminal.cs │ │ │ ├── Terminal.cs.meta │ │ │ ├── Terminal.prefab │ │ │ ├── Terminal.prefab.meta │ │ │ ├── TerminalExample.unity │ │ │ └── TerminalExample.unity.meta │ ├── UnityVS.meta │ └── UnityVS │ │ ├── Editor.meta │ │ └── Editor │ │ ├── SyntaxTree.VisualStudio.Unity.Bridge.dll │ │ ├── SyntaxTree.VisualStudio.Unity.Bridge.dll.meta │ │ ├── SyntaxTree.VisualStudio.Unity.Messaging.dll │ │ ├── SyntaxTree.VisualStudio.Unity.Messaging.dll.meta │ │ ├── UnityVS.VersionSpecific.dll │ │ └── UnityVS.VersionSpecific.dll.meta ├── Foundation │ ├── Console.meta │ └── Console │ │ ├── ClearCommand.cs │ │ ├── ClearCommand.cs.meta │ │ ├── ObservableList.cs │ │ ├── ObservableList.cs.meta │ │ ├── QuitCommand.cs │ │ ├── QuitCommand.cs.meta │ │ ├── README.txt │ │ ├── README.txt.meta │ │ ├── Terminal.cs │ │ ├── Terminal.cs.meta │ │ ├── Terminal.prefab │ │ ├── Terminal.prefab.meta │ │ ├── Terminal.unity │ │ ├── Terminal.unity.meta │ │ ├── TerminalView.cs │ │ ├── TerminalView.cs.meta │ │ ├── TerminalViewCommand.cs │ │ ├── TerminalViewCommand.cs.meta │ │ ├── TerminalViewItem.cs │ │ └── TerminalViewItem.cs.meta ├── ProjectSettings │ ├── AudioManager.asset │ ├── DynamicsManager.asset │ ├── EditorBuildSettings.asset │ ├── EditorSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── NavMeshAreas.asset │ ├── NetworkManager.asset │ ├── Physics2DSettings.asset │ ├── ProjectSettings.asset │ ├── ProjectVersion.txt │ ├── QualitySettings.asset │ ├── TagManager.asset │ └── TimeManager.asset ├── UnityVS.Foundation Console.CSharp.Editor.csproj.DotSettings └── UnityVS.Foundation Console.v12.suo ├── Foundation.Terminal 2015.7.30.unitypackage ├── README.md └── Terminal.gif /.gitignore: -------------------------------------------------------------------------------- 1 | [Ll]ibrary/ 2 | [Tt]emp/ 3 | [Oo]bj/ 4 | [Bb]uilds/ 5 | UnityVS/ 6 | 7 | # Autogenerated VS/MD solution and project files 8 | *.csproj 9 | *.unityproj 10 | *.sln 11 | *.userprefs 12 | 13 | *.pidb 14 | *.booproj 15 | 16 | 17 | 18 | 19 | #Fast Platform Switch 20 | /LocalCache/ -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3079f9d6caef70e439f2eafe123c78b3 3 | folderAsset: yes 4 | timeCreated: 1425665077 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b5e9048b2d2e117498b3759bee9aabab 3 | folderAsset: yes 4 | timeCreated: 1425664880 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5780e176f34b8544f84ffbda791bea0b 3 | folderAsset: yes 4 | timeCreated: 1425665610 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/ClearCommand.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : Avariceonline.com 3 | // Author : Nicholas Ventimiglia 4 | // Product : Unity3d Foundation 5 | // Published : 2015 6 | // ------------------------------------- 7 | using UnityEngine; 8 | 9 | namespace Foundation.Console.Internal 10 | { 11 | /// 12 | /// Extends the console with a 'clear' command 13 | /// 14 | [AddComponentMenu("Foundation/Terminal/ClearCommand")] 15 | public class ClearCommand : MonoBehaviour 16 | { 17 | protected void Awake() 18 | { 19 | Terminal.Add(new TerminalCommand 20 | { 21 | Label = "Clear", 22 | Method = () => Terminal.Clear() 23 | }); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/ClearCommand.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: de0ee7071d38a1c488937d7d28152841 3 | timeCreated: 1425665611 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/ObservableList.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : Avariceonline.com 3 | // Author : Nicholas Ventimiglia 4 | // Product : Unity3d Foundation 5 | // Published : 2015 6 | // ------------------------------------- 7 | using System; 8 | using System.Collections; 9 | using System.Collections.Generic; 10 | 11 | namespace Foundation.Console.Internal 12 | { 13 | /// 14 | /// A List with on change delegates 15 | /// 16 | /// 17 | public class ObservableList : IList 18 | { 19 | protected List InternalList = new List(); 20 | 21 | public event Action OnAdd; 22 | public event Action OnInset; 23 | public event Action OnRemove; 24 | #pragma warning disable 0067 25 | public event Action OnClear; 26 | #pragma warning restore 0067 27 | 28 | 29 | public IEnumerator GetEnumerator() 30 | { 31 | return InternalList.GetEnumerator(); 32 | } 33 | 34 | IEnumerator IEnumerable.GetEnumerator() 35 | { 36 | return InternalList.GetEnumerator(); 37 | } 38 | 39 | public int IndexOf(T item) 40 | { 41 | return InternalList.IndexOf(item); 42 | } 43 | 44 | public void Insert(int index, T item) 45 | { 46 | InternalList.Insert(index, item); 47 | 48 | if (OnInset != null) 49 | OnInset(index, item); 50 | } 51 | 52 | public void RemoveAt(int index) 53 | { 54 | InternalList.RemoveAt(index); 55 | } 56 | 57 | public T this[int index] 58 | { 59 | get { return InternalList[index]; } 60 | set { InternalList[index] = value; } 61 | } 62 | 63 | public void Add(T item) 64 | { 65 | InternalList.Add(item); 66 | 67 | if (OnAdd != null) 68 | OnAdd(item); 69 | } 70 | 71 | public void Clear() 72 | { 73 | InternalList.Clear(); 74 | 75 | if (OnClear != null) 76 | OnClear(); 77 | } 78 | 79 | public bool Contains(T item) 80 | { 81 | return InternalList.Contains(item); 82 | } 83 | 84 | public void CopyTo(T[] array, int arrayIndex) 85 | { 86 | InternalList.CopyTo(array, arrayIndex); 87 | } 88 | 89 | public int Count 90 | { 91 | get { return InternalList.Count; } 92 | } 93 | 94 | public bool IsReadOnly 95 | { 96 | get { return false; } 97 | } 98 | 99 | public bool Remove(T item) 100 | { 101 | if (InternalList.Remove(item)) 102 | { 103 | if (OnRemove != null) 104 | OnRemove(item); 105 | 106 | return true; 107 | } 108 | 109 | return false; 110 | 111 | } 112 | } 113 | } -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/ObservableList.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5b8e55185932713459d2f883db6e14e3 3 | timeCreated: 1425665611 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/SpamCommand.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : Avariceonline.com 3 | // Author : Nicholas Ventimiglia 4 | // Product : Unity3d Foundation 5 | // Published : 2015 6 | // ------------------------------------- 7 | using System; 8 | using System.Collections; 9 | using UnityEngine; 10 | 11 | namespace Foundation.Console.Internal 12 | { 13 | /// 14 | /// Test script 15 | /// 16 | [AddComponentMenu("Foundation/Terminal/SpamCommand")] 17 | public class SpamCommand : MonoBehaviour 18 | { 19 | protected void Awake() 20 | { 21 | Terminal.Add(new TerminalCommand 22 | { 23 | Label = "Spam", 24 | Method = () => StartCoroutine(DoSpam()) 25 | }); 26 | } 27 | 28 | IEnumerator DoSpam() 29 | { 30 | for (int i = 0; i < 50; i++) 31 | { 32 | yield return new WaitForSeconds(.1f); 33 | 34 | Terminal.Log(DateTime.UtcNow.ToLongTimeString()); 35 | } 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/SpamCommand.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aa8dcb6c438cc504fa2b10a96d89e218 3 | timeCreated: 1425668501 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/TerminalCommandView.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : Avariceonline.com 3 | // Author : Nicholas Ventimiglia 4 | // Product : Unity3d Foundation 5 | // Published : 2015 6 | // ------------------------------------- 7 | using System; 8 | using UnityEngine; 9 | using UnityEngine.UI; 10 | 11 | namespace Foundation.Console.Internal 12 | { 13 | /// 14 | /// Presentation script for a Terminal Button Item 15 | /// 16 | public class TerminalCommandView : MonoBehaviour 17 | { 18 | public TerminalCommand Model { get; set; } 19 | 20 | public Text Label; 21 | 22 | public Action Handler; 23 | 24 | public void OnClick() 25 | { 26 | if (Handler != null) 27 | Handler(); 28 | } 29 | 30 | } 31 | } -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/TerminalCommandView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 01b397446a9cefe41bb9474a9aeb7fd3 3 | timeCreated: 1425665610 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/TerminalItemView.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : Avariceonline.com 3 | // Author : Nicholas Ventimiglia 4 | // Product : Unity3d Foundation 5 | // Published : 2015 6 | // ------------------------------------- 7 | using UnityEngine; 8 | using UnityEngine.UI; 9 | 10 | namespace Foundation.Console.Internal 11 | { 12 | /// 13 | /// Presentation script for a Terminal Text Item 14 | /// 15 | [AddComponentMenu("Foundation/Terminal/TerminalItemView")] 16 | public class TerminalItemView : MonoBehaviour 17 | { 18 | public TerminalItem Model { get; set; } 19 | 20 | public Text Label; 21 | } 22 | } -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/TerminalItemView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ee09d0e47d5738441bc2526d57b17a09 3 | timeCreated: 1425665612 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/TerminalView.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : Avariceonline.com 3 | // Author : Nicholas Ventimiglia 4 | // Product : Unity3d Foundation 5 | // Published : 2015 6 | // ------------------------------------- 7 | using System; 8 | using System.Collections; 9 | using System.Collections.Generic; 10 | using System.Linq; 11 | using UnityEngine; 12 | using UnityEngine.UI; 13 | 14 | namespace Foundation.Console.Internal 15 | { 16 | /// 17 | /// renders the Terminal using new 4.6 uGUI 18 | /// 19 | [AddComponentMenu("Foundation/Terminal/TerminalView")] 20 | public class TerminalView : MonoBehaviour 21 | { 22 | /// 23 | /// Option 24 | /// 25 | public bool DoDontDestoryOnLoad = true; 26 | 27 | /// 28 | /// For Hide / show 29 | /// 30 | public GameObject DisplayRoot; 31 | 32 | /// 33 | /// For Input 34 | /// 35 | public InputField TextInput; 36 | 37 | /// 38 | /// Button View Template 39 | /// 40 | public TerminalCommandView CommandPrototype; 41 | 42 | /// 43 | /// Log View Template 44 | /// 45 | public TerminalItemView ItemPrototype; 46 | 47 | /// 48 | /// Parent for Command Views 49 | /// 50 | public Transform CommandLayout; 51 | /// 52 | /// Parent for Log Views 53 | /// 54 | public Transform ItemLayout; 55 | 56 | /// 57 | /// Snap to bottom 58 | /// 59 | public Scrollbar ItemScrollBar; 60 | [HideInInspector] 61 | public List CommandItems = new List(); 62 | [HideInInspector] 63 | public List TextItems = new List(); 64 | 65 | public bool IsVisible 66 | { 67 | get 68 | { 69 | return DisplayRoot.activeSelf; 70 | 71 | } 72 | set 73 | { 74 | DisplayRoot.SetActive(value); 75 | } 76 | } 77 | 78 | public KeyCode VisiblityKey = KeyCode.BackQuote; 79 | 80 | public Color LogColor = Color.white; 81 | public Color WarningColor = Color.yellow; 82 | public Color ErrorColor = Color.red; 83 | 84 | public Color SuccessColor = Color.green; 85 | public Color InputColor = Color.cyan; 86 | public Color ImportantColor = Color.yellow; 87 | 88 | protected void Awake() 89 | { 90 | // Display 91 | Terminal.Instance.LogColor = LogColor; 92 | Terminal.Instance.WarningColor = WarningColor; 93 | Terminal.Instance.ErrorColor = ErrorColor; 94 | Terminal.Instance.SuccessColor = SuccessColor; 95 | Terminal.Instance.InputColor = InputColor; 96 | Terminal.Instance.ImportantColor = ImportantColor; 97 | 98 | //Hide prototypes 99 | CommandPrototype.gameObject.SetActive(false); 100 | ItemPrototype.gameObject.SetActive(false); 101 | 102 | //wire 103 | Terminal.Instance.Items.OnAdd += Items_OnAdd; 104 | Terminal.Instance.Items.OnClear += Items_OnClear; 105 | Terminal.Instance.Items.OnRemove += Items_OnRemove; 106 | 107 | Terminal.Instance.Commands.OnAdd += Commands_OnAdd; 108 | Terminal.Instance.Commands.OnClear += Commands_OnClear; 109 | Terminal.Instance.Commands.OnRemove += Commands_OnRemove; 110 | 111 | //add items preadded 112 | foreach (var item in Terminal.Instance.Items) 113 | { 114 | Items_OnAdd(item); 115 | } 116 | 117 | foreach (var item in Terminal.Instance.Commands) 118 | { 119 | Commands_OnAdd(item); 120 | } 121 | 122 | Application.logMessageReceived += HandlerLog; 123 | 124 | if (DoDontDestoryOnLoad) 125 | DontDestroyOnLoad(gameObject); 126 | 127 | Debug.Log("Console Ready"); 128 | } 129 | 130 | 131 | protected void OnDestroy() 132 | { 133 | //remove handlers 134 | Terminal.Instance.Items.OnAdd -= Items_OnAdd; 135 | Terminal.Instance.Items.OnClear -= Items_OnClear; 136 | Terminal.Instance.Items.OnRemove -= Items_OnRemove; 137 | 138 | Terminal.Instance.Commands.OnAdd -= Commands_OnAdd; 139 | Terminal.Instance.Commands.OnClear -= Commands_OnClear; 140 | Terminal.Instance.Commands.OnRemove -= Commands_OnRemove; 141 | 142 | Application.logMessageReceived -= HandlerLog; 143 | } 144 | 145 | private void HandlerLog(string condition, string stackTrace, LogType type) 146 | { 147 | switch (type) 148 | { 149 | case LogType.Error: 150 | case LogType.Exception: 151 | Terminal.LogError(condition); 152 | break; 153 | case LogType.Warning: 154 | Terminal.LogWarning(condition); 155 | break; 156 | case LogType.Log: 157 | case LogType.Assert: 158 | Terminal.Log(condition); 159 | break; 160 | } 161 | } 162 | 163 | void Commands_OnRemove(TerminalCommand obj) 164 | { 165 | var item = CommandItems.FirstOrDefault(o => o.Model.Equals(obj)); 166 | if (item != null) 167 | { 168 | CommandItems.Remove(item); 169 | Destroy(item.gameObject); 170 | } 171 | } 172 | 173 | void Commands_OnClear() 174 | { 175 | foreach (var item in CommandItems) 176 | { 177 | Destroy(item.gameObject); 178 | } 179 | CommandItems.Clear(); 180 | } 181 | 182 | void Commands_OnAdd(TerminalCommand obj) 183 | { 184 | //inst 185 | var instance = Instantiate(CommandPrototype.gameObject); 186 | var script = instance.GetComponent(); 187 | script.Label.text = obj.Label; 188 | script.Handler = obj.Method; 189 | script.Model = obj; 190 | 191 | //parent 192 | instance.transform.SetParent(CommandLayout); 193 | //wtf 194 | instance.transform.localScale = new Vector3(1, 1, 1); 195 | instance.SetActive(true); 196 | 197 | CommandItems.Add(script); 198 | } 199 | 200 | void Items_OnRemove(TerminalItem obj) 201 | { 202 | var item = TextItems.FirstOrDefault(o => o.Model.Equals(obj)); 203 | if (item != null) 204 | { 205 | TextItems.Remove(item); 206 | Destroy(item.gameObject); 207 | } 208 | } 209 | 210 | void Items_OnClear() 211 | { 212 | foreach (var item in TextItems) 213 | { 214 | Destroy(item.gameObject); 215 | } 216 | TextItems.Clear(); 217 | } 218 | 219 | void Items_OnAdd(TerminalItem obj) 220 | { 221 | StartCoroutine(AddItemAsync(obj)); 222 | } 223 | 224 | IEnumerator AddItemAsync(TerminalItem obj) 225 | { 226 | 227 | //inst 228 | var instance = Instantiate(ItemPrototype.gameObject); 229 | var script = instance.GetComponent(); 230 | script.Label.text = obj.Text; 231 | script.Label.color = obj.Color; 232 | script.Model = obj; 233 | 234 | //parent 235 | instance.transform.SetParent(ItemLayout); 236 | instance.SetActive(true); 237 | //wtf 238 | instance.transform.localScale = new Vector3(1, 1, 1); 239 | 240 | TextItems.Add(script); 241 | 242 | yield return 1; 243 | 244 | if (ItemScrollBar) 245 | ItemScrollBar.value = 0; 246 | } 247 | 248 | 249 | protected void Update() 250 | { 251 | if (Input.GetKeyUp(VisiblityKey)) 252 | { 253 | IsVisible = !IsVisible; 254 | } 255 | 256 | } 257 | 258 | public void DoSend() 259 | { 260 | var text = TextInput.text.Replace(Environment.NewLine, ""); 261 | 262 | if (string.IsNullOrEmpty(text)) 263 | return; 264 | 265 | Terminal.Submit(text); 266 | 267 | TextInput.text = string.Empty; 268 | } 269 | 270 | public void DoClear() 271 | { 272 | Terminal.Clear(); 273 | } 274 | } 275 | } -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Internal/TerminalView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bcaf0e3760f100140a82131e9631882f 3 | timeCreated: 1425665611 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/NVentimiglia_Unity3d-uGUI-Terminal.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Assets/Foundation/Terminal/NVentimiglia_Unity3d-uGUI-Terminal.pdf -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/NVentimiglia_Unity3d-uGUI-Terminal.pdf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9a029371c983b8642bdab28fa2de47e1 3 | timeCreated: 1438275121 4 | licenseType: Free 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Terminal.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : Avariceonline.com 3 | // Author : Nicholas Ventimiglia 4 | // Product : Unity3d Foundation 5 | // Published : 2015 6 | // ------------------------------------- 7 | using System; 8 | using Foundation.Console.Internal; 9 | using UnityEngine; 10 | 11 | namespace Foundation.Console 12 | { 13 | #region sub objects 14 | 15 | /// 16 | /// Message Formatting 17 | /// 18 | public enum TerminalType 19 | { 20 | Log, 21 | Warning, 22 | Error, 23 | Exception, 24 | Success, 25 | Important, 26 | Input, 27 | } 28 | 29 | /// 30 | /// A Terminal line item 31 | /// 32 | public struct TerminalItem 33 | { 34 | readonly string _text; 35 | public string Text 36 | { 37 | get { return _text; } 38 | } 39 | 40 | readonly string _formatted; 41 | public string Formatted 42 | { 43 | get { return _formatted; } 44 | } 45 | 46 | readonly TerminalType _type; 47 | public TerminalType Type 48 | { 49 | get { return _type; } 50 | } 51 | 52 | readonly Color _color; 53 | public Color Color 54 | { 55 | get { return _color; } 56 | } 57 | 58 | public TerminalItem(TerminalType type, string text) 59 | { 60 | _text = text; 61 | _type = type; 62 | switch (_type) 63 | { 64 | case TerminalType.Warning: 65 | _formatted = string.Format("<< {0}", text); 66 | _color = Terminal.Instance.WarningColor; 67 | break; 68 | case TerminalType.Error: 69 | _formatted = string.Format("<< {0}", text); 70 | _color = Terminal.Instance.ErrorColor; 71 | break; 72 | case TerminalType.Success: 73 | _formatted = string.Format("<< {0}", text); 74 | _color = Terminal.Instance.SuccessColor; 75 | break; 76 | case TerminalType.Important: 77 | _formatted = string.Format("<< {0}", text); 78 | _color = Terminal.Instance.ImportantColor; 79 | break; 80 | case TerminalType.Input: 81 | _formatted = string.Format(">> {0}", text); 82 | _color = Terminal.Instance.InputColor; 83 | break; 84 | default: 85 | _formatted = text; 86 | _color = Terminal.Instance.LogColor; 87 | break; 88 | } 89 | } 90 | } 91 | 92 | /// 93 | /// For processing Text input 94 | /// 95 | public class TerminalInterpreter 96 | { 97 | public string Label; 98 | public Action Method; 99 | } 100 | 101 | /// 102 | /// Button to add to the menu 103 | /// 104 | public class TerminalCommand 105 | { 106 | public string Label; 107 | public Action Method; 108 | } 109 | #endregion 110 | 111 | /// 112 | /// The Terminal Model. 113 | /// 114 | public class Terminal 115 | { 116 | #region static 117 | public static readonly Terminal Instance = new Terminal(); 118 | #endregion 119 | 120 | #region props / fields 121 | 122 | // Default color of the standard display text. 123 | 124 | public Color LogColor = Color.white; 125 | public Color WarningColor = Color.yellow; 126 | public Color ErrorColor = Color.red; 127 | public Color SuccessColor = Color.green; 128 | public Color InputColor = Color.green; 129 | public Color ImportantColor = Color.cyan; 130 | 131 | public readonly ObservableList Items = new ObservableList(); 132 | public readonly ObservableList Commands = new ObservableList(); 133 | public readonly ObservableList Interpreters = new ObservableList(); 134 | 135 | #endregion 136 | 137 | /// 138 | /// Add Command 139 | /// 140 | public static void Add(TerminalCommand arg) 141 | { 142 | Instance.Commands.Add(arg); 143 | } 144 | 145 | /// 146 | /// Add Interpreter 147 | /// 148 | public static void Add(TerminalInterpreter arg) 149 | { 150 | Instance.Interpreters.Add(arg); 151 | } 152 | 153 | 154 | /// 155 | /// write only 156 | /// 157 | public static void Add(TerminalItem message) 158 | { 159 | Instance.Items.Add(message); 160 | } 161 | 162 | /// 163 | /// write only 164 | /// 165 | public static void Add(object message, TerminalType type) 166 | { 167 | Add(new TerminalItem(type, message.ToString())); 168 | } 169 | 170 | /// 171 | /// write only 172 | /// 173 | public static void Log(object message) 174 | { 175 | Add(new TerminalItem(TerminalType.Log, message.ToString())); 176 | } 177 | 178 | /// 179 | /// write only 180 | /// 181 | public static void LogError(object message) 182 | { 183 | Add(new TerminalItem(TerminalType.Error, message.ToString())); 184 | } 185 | 186 | /// 187 | /// write only 188 | /// 189 | public static void LogWarning(object message) 190 | { 191 | Add(new TerminalItem(TerminalType.Warning, message.ToString())); 192 | } 193 | 194 | /// 195 | /// write only 196 | /// 197 | public static void LogSuccess(object message) 198 | { 199 | Add(new TerminalItem(TerminalType.Success, message.ToString())); 200 | } 201 | 202 | /// 203 | /// write only 204 | /// 205 | public static void LogImportant(object message) 206 | { 207 | Add(new TerminalItem(TerminalType.Important, message.ToString())); 208 | } 209 | 210 | /// 211 | /// write only 212 | /// 213 | public static void LogInput(object message) 214 | { 215 | Add(new TerminalItem(TerminalType.Input, message.ToString())); 216 | } 217 | 218 | 219 | /// 220 | /// Input for a command 221 | /// 222 | /// 223 | public static void Submit(string message) 224 | { 225 | if (string.IsNullOrEmpty(message)) 226 | { 227 | LogInput(string.Empty); 228 | return; 229 | } 230 | 231 | message = message.Trim(); 232 | 233 | Add(new TerminalItem(TerminalType.Input, message)); 234 | 235 | foreach (var interpreter in Instance.Interpreters) 236 | { 237 | interpreter.Method.Invoke(message); 238 | } 239 | } 240 | 241 | /// 242 | /// clear writes 243 | /// 244 | public static void Clear() 245 | { 246 | Instance.Items.Clear(); 247 | } 248 | } 249 | } -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Terminal.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0585a6c49ee9bfc488f3656df23018f2 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Terminal.prefab: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Assets/Foundation/Terminal/Terminal.prefab -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/Terminal.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f2bf694ca907014bbed527957d67e3f 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/TerminalExample.unity: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Assets/Foundation/Terminal/TerminalExample.unity -------------------------------------------------------------------------------- /Foundation Terminal/Assets/Foundation/Terminal/TerminalExample.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a5396dae58f76584da07a1df929928b2 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c1a6427821d90af47a3059f20289ef53 3 | folderAsset: yes 4 | timeCreated: 1425664940 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e71a3e2fb5854e43823a9da25b68e21 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Assets/UnityVS/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38d405c119fcc7c4e83d4a478a40ff2f 3 | PluginImporter: 4 | serializedVersion: 1 5 | iconMap: {} 6 | executionOrder: {} 7 | isPreloaded: 0 8 | platformData: 9 | Any: 10 | enabled: 0 11 | settings: {} 12 | Editor: 13 | enabled: 1 14 | settings: 15 | DefaultValueInitialized: true 16 | userData: 17 | assetBundleName: 18 | assetBundleVariant: 19 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS/Editor/SyntaxTree.VisualStudio.Unity.Messaging.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Assets/UnityVS/Editor/SyntaxTree.VisualStudio.Unity.Messaging.dll -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS/Editor/SyntaxTree.VisualStudio.Unity.Messaging.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4ad02dc83da735c4e8d945332b9202f6 3 | PluginImporter: 4 | serializedVersion: 1 5 | iconMap: {} 6 | executionOrder: {} 7 | isPreloaded: 0 8 | platformData: 9 | Any: 10 | enabled: 0 11 | settings: {} 12 | Editor: 13 | enabled: 1 14 | settings: 15 | DefaultValueInitialized: true 16 | userData: 17 | assetBundleName: 18 | assetBundleVariant: 19 | -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS/Editor/UnityVS.VersionSpecific.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Assets/UnityVS/Editor/UnityVS.VersionSpecific.dll -------------------------------------------------------------------------------- /Foundation Terminal/Assets/UnityVS/Editor/UnityVS.VersionSpecific.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8b9e715ee2c325d4d8b9463cffd11c82 3 | timeCreated: 1438275134 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 1 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | platformData: 11 | Any: 12 | enabled: 0 13 | settings: {} 14 | Editor: 15 | enabled: 1 16 | settings: 17 | DefaultValueInitialized: true 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b5e9048b2d2e117498b3759bee9aabab 3 | folderAsset: yes 4 | timeCreated: 1425664880 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/ClearCommand.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : IBT / Realtime.co 3 | // Author : Nicholas Ventimiglia 4 | // Product : Messaging and Storage 5 | // Published : 2014 6 | // ------------------------------------- 7 | 8 | using UnityEngine; 9 | 10 | namespace Realtime.Demos.TerminalConsole.Commands 11 | { 12 | /// 13 | /// Extends the console with 'about me' command 14 | /// 15 | [AddComponentMenu("Realtime/Demos/Terminal/Clear")] 16 | public class ClearCommand : MonoBehaviour 17 | { 18 | protected void Awake() 19 | { 20 | Terminal.Add(new TerminalCommand 21 | { 22 | Label = "Clear", 23 | Method = () => Terminal.Clear() 24 | }); 25 | } 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/ClearCommand.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e2e4db7721a4094fbfa5bfeeac12b4e 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/ObservableList.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | 5 | namespace Realtime.Demos.TerminalConsole 6 | { 7 | /// 8 | /// A List with on change delegates 9 | /// 10 | /// 11 | public class ObservableList : IList 12 | { 13 | protected List InternalList = new List(); 14 | 15 | public event Action OnAdd; 16 | public event Action OnInset; 17 | public event Action OnRemove; 18 | #pragma warning disable 0067 19 | public event Action OnClear; 20 | #pragma warning restore 0067 21 | 22 | 23 | public IEnumerator GetEnumerator() 24 | { 25 | return InternalList.GetEnumerator(); 26 | } 27 | 28 | IEnumerator IEnumerable.GetEnumerator() 29 | { 30 | return InternalList.GetEnumerator(); 31 | } 32 | 33 | public int IndexOf(T item) 34 | { 35 | return InternalList.IndexOf(item); 36 | } 37 | 38 | public void Insert(int index, T item) 39 | { 40 | InternalList.Insert(index, item); 41 | 42 | if (OnInset != null) 43 | OnInset(index, item); 44 | } 45 | 46 | public void RemoveAt(int index) 47 | { 48 | InternalList.RemoveAt(index); 49 | } 50 | 51 | public T this[int index] 52 | { 53 | get { return InternalList[index]; } 54 | set { InternalList[index] = value; } 55 | } 56 | 57 | public void Add(T item) 58 | { 59 | InternalList.Add(item); 60 | 61 | if (OnAdd != null) 62 | OnAdd(item); 63 | } 64 | 65 | public void Clear() 66 | { 67 | InternalList.Clear(); 68 | 69 | if (OnClear != null) 70 | OnClear(); 71 | } 72 | 73 | public bool Contains(T item) 74 | { 75 | return InternalList.Contains(item); 76 | } 77 | 78 | public void CopyTo(T[] array, int arrayIndex) 79 | { 80 | InternalList.CopyTo(array, arrayIndex); 81 | } 82 | 83 | public int Count 84 | { 85 | get { return InternalList.Count; } 86 | } 87 | 88 | public bool IsReadOnly 89 | { 90 | get { return false; } 91 | } 92 | 93 | public bool Remove(T item) 94 | { 95 | if (InternalList.Remove(item)) 96 | { 97 | if (OnRemove != null) 98 | OnRemove(item); 99 | 100 | return true; 101 | } 102 | 103 | return false; 104 | 105 | } 106 | } 107 | } -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/ObservableList.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3cdc4222dc796ed4cbcfae6834677a0a 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/QuitCommand.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : IBT / Realtime.co 3 | // Author : Nicholas Ventimiglia 4 | // Product : Messaging and Storage 5 | // Published : 2014 6 | // ------------------------------------- 7 | 8 | using UnityEngine; 9 | 10 | namespace Realtime.Demos.TerminalConsole.Commands 11 | { 12 | /// 13 | /// exit app command 14 | /// 15 | [AddComponentMenu("Realtime/Demos/Terminal/Quit")] 16 | public class QuitCommand : MonoBehaviour 17 | { 18 | protected void Awake() 19 | { 20 | 21 | 22 | #if UNITY_EDITOR 23 | Terminal.Add(new TerminalCommand 24 | { 25 | Label = "Quit", 26 | Method = () => 27 | { 28 | UnityEditor.EditorApplication.isPlaying = false; 29 | } 30 | }); 31 | #elif UNITY_STANDALONE || UNITY_ANDROID 32 | Terminal.Add(new TerminalCommand 33 | { 34 | Label = "Quit", 35 | Method = () => Application.Quit() 36 | }); 37 | #endif 38 | 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/QuitCommand.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0f4a3b476ead56b4cab6dfed968fce3d 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/README.txt: -------------------------------------------------------------------------------- 1 | # Foundation Terminal (v4.0) 2 | 3 | Nicholas Ventimiglia | AvariceOnline.com 4 | 5 | ## Terminal for in game debugging 6 | 7 | The goal of this library to provide a UI for testing low level libraries and debugging in game. Built using uGUI. Is Unity3d 5 ready ! 8 | 9 | - Log many message types with color coding 10 | - Hooks into Debug.Log 11 | - A command button bar for testing methods 12 | - A text input with optional input handling (text processors) 13 | - Hide and close with the ` key 14 | 15 | ![alt tag](https://github.com/NVentimiglia/Unity3d-uGUI-Terminal/blob/master/Terminal.gif) 16 | 17 | ## Setup 18 | 19 | Drop the Terminal Prefab into your scene. 20 | 21 | ## Example Usage 22 | 23 | ```c# 24 | 25 | // Write 26 | Terminal.Log("blag blah"); 27 | Terminal.LogError("blag blah"); 28 | Terminal.LogSuccess("blag blah"); 29 | Terminal.LogWarning("blag blah"); 30 | Terminal.LogImportant("blag blah"); 31 | // Wired to Application Log 32 | Debug.Log("blah"); 33 | 34 | // Register button commands. (Do this in Awake) 35 | Terminal.Add(new TerminalCommand 36 | { 37 | Label = "Main", 38 | Method = MainTest 39 | }); 40 | 41 | void MainTest() 42 | { 43 | // Run When Clicked 44 | } 45 | 46 | // Register new Text Processors (invoked when text is submitted) 47 | Terminal.Add(new TerminalInterpreter 48 | { 49 | Label = "Chat", 50 | Method = ChatExample 51 | }); 52 | 53 | void ChatExample(string text) 54 | { 55 | // Run When inputted 56 | } 57 | ``` 58 | 59 | ## More 60 | 61 | Part of the Unity3d Foundation toolkit. A collection of utilities for making high quality data driven games. http://unity3dFoundation.com 62 | 63 | - **Console** : A in game terminal for debugging ! 64 | 65 | - **Tasks** : An async task library for doing background work or extending coroutines with return results. 66 | 67 | - **Localization** : Supports in editor translation, multiple files and automatic translation of scripts using the [Localized] annotation. 68 | 69 | - **Messenger** : Listener pattern. A message broker for relaying events in a loose way. Supports auto subscription via the [Subscribe] annotation. 70 | 71 | - **Injector** : Service Injector for resolving services and other components. Supports auto injection using the [Inject] annotation 72 | 73 | - **DataBinding** : For MVVM / MVC style databinding. Supports the new uGUI ui library. 74 | 75 | - **Cloud** : Parse-like storage and account services using a ASP.NET MVC back end. Need to authenticate your users? Reset passwords with branded emails? Save high scores or character data in a database? Maybe write your own authoritative back end? This is it. 76 | 77 | - **Lobby** : The ultimate example scene. Everything you need to deploy for a game, minus the actual game play. 78 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/README.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 44f8610f89142034b90a221d6aed5d03 3 | TextScriptImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/Terminal.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : IBT / Realtime.co 3 | // Author : Nicholas Ventimiglia 4 | // Product : Messaging and Storage 5 | // Published : 2014 6 | // ------------------------------------- 7 | 8 | using System; 9 | using UnityEngine; 10 | 11 | namespace Realtime.Demos.TerminalConsole 12 | { 13 | #region sub objects 14 | 15 | /// 16 | /// Message Formatting 17 | /// 18 | public enum TerminalType 19 | { 20 | Log, 21 | Warning, 22 | Error, 23 | Exception, 24 | Success, 25 | Important, 26 | Input, 27 | } 28 | 29 | /// 30 | /// A Terminal line item 31 | /// 32 | public struct TerminalItem 33 | { 34 | readonly string _text; 35 | public string Text 36 | { 37 | get { return _text; } 38 | } 39 | 40 | readonly string _formatted; 41 | public string Formatted 42 | { 43 | get { return _formatted; } 44 | } 45 | 46 | readonly TerminalType _type; 47 | public TerminalType Type 48 | { 49 | get { return _type; } 50 | } 51 | 52 | readonly Color _color; 53 | public Color Color 54 | { 55 | get { return _color; } 56 | } 57 | 58 | public TerminalItem(TerminalType type, string text) 59 | { 60 | _text = text; 61 | _type = type; 62 | switch (_type) 63 | { 64 | case TerminalType.Warning: 65 | _formatted = string.Format("<< {0}", text); 66 | _color = Terminal.Instance.WarningColor; 67 | break; 68 | case TerminalType.Error: 69 | _formatted = string.Format("<< {0}", text); 70 | _color = Terminal.Instance.ErrorColor; 71 | break; 72 | case TerminalType.Success: 73 | _formatted = string.Format("<< {0}", text); 74 | _color = Terminal.Instance.SuccessColor; 75 | break; 76 | case TerminalType.Important: 77 | _formatted = string.Format("<< {0}", text); 78 | _color = Terminal.Instance.ImportantColor; 79 | break; 80 | case TerminalType.Input: 81 | _formatted = string.Format(">> {0}", text); 82 | _color = Terminal.Instance.InputColor; 83 | break; 84 | default: 85 | _formatted = text; 86 | _color = Terminal.Instance.LogColor; 87 | break; 88 | } 89 | } 90 | } 91 | 92 | /// 93 | /// For processing Text input 94 | /// 95 | public class TerminalInterpreter 96 | { 97 | public string Label; 98 | public Action Method; 99 | } 100 | 101 | /// 102 | /// Button to add to the menu 103 | /// 104 | public class TerminalCommand 105 | { 106 | public string Label; 107 | public Action Method; 108 | } 109 | #endregion 110 | 111 | /// 112 | /// The Terminal Model. 113 | /// 114 | public class Terminal 115 | { 116 | #region static 117 | public static readonly Terminal Instance = new Terminal(); 118 | #endregion 119 | 120 | #region props / fields 121 | 122 | // Default color of the standard display text. 123 | 124 | public Color LogColor = Color.white; 125 | public Color WarningColor = Color.yellow; 126 | public Color ErrorColor = Color.red; 127 | public Color SuccessColor = Color.green; 128 | public Color InputColor = Color.green; 129 | public Color ImportantColor = Color.cyan; 130 | 131 | public readonly ObservableList Items = new ObservableList(); 132 | public readonly ObservableList Commands = new ObservableList(); 133 | public readonly ObservableList Interpreters = new ObservableList(); 134 | 135 | #endregion 136 | 137 | /// 138 | /// Add Command 139 | /// 140 | public static void Add(TerminalCommand arg) 141 | { 142 | Instance.Commands.Add(arg); 143 | } 144 | 145 | /// 146 | /// Add Interpreter 147 | /// 148 | public static void Add(TerminalInterpreter arg) 149 | { 150 | Instance.Interpreters.Add(arg); 151 | } 152 | 153 | 154 | /// 155 | /// write only 156 | /// 157 | public static void Add(TerminalItem message) 158 | { 159 | Instance.Items.Add(message); 160 | } 161 | 162 | /// 163 | /// write only 164 | /// 165 | public static void Add(object message, TerminalType type) 166 | { 167 | Add(new TerminalItem(type, message.ToString())); 168 | } 169 | 170 | /// 171 | /// write only 172 | /// 173 | public static void Log(object message) 174 | { 175 | Add(new TerminalItem(TerminalType.Log, message.ToString())); 176 | } 177 | 178 | /// 179 | /// write only 180 | /// 181 | public static void LogError(object message) 182 | { 183 | Add(new TerminalItem(TerminalType.Error, message.ToString())); 184 | } 185 | 186 | /// 187 | /// write only 188 | /// 189 | public static void LogWarning(object message) 190 | { 191 | Add(new TerminalItem(TerminalType.Warning, message.ToString())); 192 | } 193 | 194 | /// 195 | /// write only 196 | /// 197 | public static void LogSuccess(object message) 198 | { 199 | Add(new TerminalItem(TerminalType.Success, message.ToString())); 200 | } 201 | 202 | /// 203 | /// write only 204 | /// 205 | public static void LogImportant(object message) 206 | { 207 | Add(new TerminalItem(TerminalType.Important, message.ToString())); 208 | } 209 | 210 | /// 211 | /// write only 212 | /// 213 | public static void LogInput(object message) 214 | { 215 | Add(new TerminalItem(TerminalType.Input, message.ToString())); 216 | } 217 | 218 | 219 | /// 220 | /// Input for a command 221 | /// 222 | /// 223 | public static void Submit(string message) 224 | { 225 | if (string.IsNullOrEmpty(message)) 226 | { 227 | LogInput(string.Empty); 228 | return; 229 | } 230 | 231 | message = message.Trim(); 232 | 233 | Add(new TerminalItem(TerminalType.Input, message)); 234 | 235 | foreach (var interpreter in Instance.Interpreters) 236 | { 237 | interpreter.Method.Invoke(message); 238 | } 239 | } 240 | 241 | /// 242 | /// clear writes 243 | /// 244 | public static void Clear() 245 | { 246 | Instance.Items.Clear(); 247 | } 248 | } 249 | } -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/Terminal.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0585a6c49ee9bfc488f3656df23018f2 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/Terminal.prefab: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Foundation/Console/Terminal.prefab -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/Terminal.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f2bf694ca907014bbed527957d67e3f 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/Terminal.unity: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/Foundation/Console/Terminal.unity -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/Terminal.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a5396dae58f76584da07a1df929928b2 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/TerminalView.cs: -------------------------------------------------------------------------------- 1 | // ------------------------------------- 2 | // Domain : IBT / Realtime.co 3 | // Author : Nicholas Ventimiglia 4 | // Product : Messaging and Storage 5 | // Published : 2014 6 | // ------------------------------------- 7 | 8 | using System; 9 | using System.Collections; 10 | using System.Collections.Generic; 11 | using System.Linq; 12 | using Realtime.Tasks; 13 | using UnityEngine; 14 | using UnityEngine.UI; 15 | 16 | namespace Realtime.Demos.TerminalConsole.Views 17 | { 18 | /// 19 | /// renders the Terminal using new 4.6 uGUI 20 | /// 21 | [AddComponentMenu("Realtime/Demos/Terminal/TerminalView")] 22 | public class TerminalView : MonoBehaviour 23 | { 24 | /// 25 | /// Option 26 | /// 27 | public bool DoDontDestoryOnLoad = true; 28 | 29 | public GameObject DisplayRoot; 30 | public InputField TextInput; 31 | 32 | public TerminalViewCommand CommandPrototype; 33 | public TerminalViewItem ItemPrototype; 34 | 35 | public Transform CommandLayout; 36 | public Transform ItemLayout; 37 | public Scrollbar CommandScrollBar; 38 | public Scrollbar ItemScrollBar; 39 | [HideInInspector] 40 | public List CommandItems = new List(); 41 | [HideInInspector] 42 | public List TextItems = new List(); 43 | 44 | public bool IsVisible 45 | { 46 | get 47 | { 48 | return DisplayRoot.activeSelf; 49 | 50 | } 51 | set 52 | { 53 | DisplayRoot.SetActive(value); 54 | } 55 | } 56 | 57 | public KeyCode VisiblityKey = KeyCode.BackQuote; 58 | 59 | public Color LogColor = Color.white; 60 | public Color WarningColor = Color.yellow; 61 | public Color ErrorColor = Color.red; 62 | 63 | public Color SuccessColor = Color.green; 64 | public Color InputColor = Color.cyan; 65 | public Color ImportantColor = Color.yellow; 66 | 67 | void Awake() 68 | { 69 | // Display 70 | Terminal.Instance.LogColor = LogColor; 71 | Terminal.Instance.WarningColor = WarningColor; 72 | Terminal.Instance.ErrorColor = ErrorColor; 73 | Terminal.Instance.SuccessColor = SuccessColor; 74 | Terminal.Instance.InputColor = InputColor; 75 | Terminal.Instance.ImportantColor = ImportantColor; 76 | 77 | //Hide prototypes 78 | CommandPrototype.gameObject.SetActive(false); 79 | ItemPrototype.gameObject.SetActive(false); 80 | 81 | //wire 82 | Terminal.Instance.Items.OnAdd += Items_OnAdd; 83 | Terminal.Instance.Items.OnClear += Items_OnClear; 84 | Terminal.Instance.Items.OnRemove += Items_OnRemove; 85 | 86 | Terminal.Instance.Commands.OnAdd += Commands_OnAdd; 87 | Terminal.Instance.Commands.OnClear += Commands_OnClear; 88 | Terminal.Instance.Commands.OnRemove += Commands_OnRemove; 89 | 90 | //add items preadded 91 | foreach (var item in Terminal.Instance.Items) 92 | { 93 | Items_OnAdd(item); 94 | } 95 | 96 | foreach (var item in Terminal.Instance.Commands) 97 | { 98 | Commands_OnAdd(item); 99 | } 100 | 101 | Application.RegisterLogCallback(HandlerLog); 102 | 103 | if (DoDontDestoryOnLoad) 104 | DontDestroyOnLoad(gameObject); 105 | 106 | Debug.Log("Console Ready"); 107 | } 108 | 109 | void OnDestroy() 110 | { 111 | //remove handlers 112 | Terminal.Instance.Items.OnAdd -= Items_OnAdd; 113 | Terminal.Instance.Items.OnClear -= Items_OnClear; 114 | Terminal.Instance.Items.OnRemove -= Items_OnRemove; 115 | 116 | Terminal.Instance.Commands.OnAdd -= Commands_OnAdd; 117 | Terminal.Instance.Commands.OnClear -= Commands_OnClear; 118 | Terminal.Instance.Commands.OnRemove -= Commands_OnRemove; 119 | } 120 | 121 | private void HandlerLog(string condition, string stackTrace, LogType type) 122 | { 123 | switch (type) 124 | { 125 | case LogType.Error: 126 | case LogType.Exception: 127 | Terminal.LogError(condition); 128 | break; 129 | case LogType.Warning: 130 | Terminal.LogWarning(condition); 131 | break; 132 | case LogType.Log: 133 | case LogType.Assert: 134 | Terminal.Log(condition); 135 | break; 136 | } 137 | } 138 | 139 | void Commands_OnRemove(TerminalCommand obj) 140 | { 141 | var item = CommandItems.FirstOrDefault(o => o.Model.Equals(obj)); 142 | if (item != null) 143 | { 144 | CommandItems.Remove(item); 145 | Destroy(item.gameObject); 146 | } 147 | } 148 | 149 | void Commands_OnClear() 150 | { 151 | foreach (var item in CommandItems) 152 | { 153 | Destroy(item.gameObject); 154 | } 155 | CommandItems.Clear(); 156 | } 157 | 158 | void Commands_OnAdd(TerminalCommand obj) 159 | { 160 | //inst 161 | var instance = (GameObject)Instantiate(CommandPrototype.gameObject); 162 | var script = instance.GetComponent(); 163 | script.Label.text = obj.Label; 164 | script.Handler = obj.Method; 165 | script.Model = obj; 166 | 167 | //parent 168 | instance.transform.SetParent(CommandLayout.transform); 169 | instance.SetActive(true); 170 | 171 | CommandItems.Add(script); 172 | 173 | Invoke("ResetCommandScroll", .01f); 174 | } 175 | 176 | void ResetCommandScroll() 177 | { 178 | CommandScrollBar.value = 1; 179 | } 180 | 181 | void Items_OnRemove(TerminalItem obj) 182 | { 183 | var item = TextItems.FirstOrDefault(o => o.Model.Equals(obj)); 184 | if (item != null) 185 | { 186 | TextItems.Remove(item); 187 | Destroy(item.gameObject); 188 | } 189 | } 190 | 191 | void Items_OnClear() 192 | { 193 | foreach (var item in TextItems) 194 | { 195 | Destroy(item.gameObject); 196 | } 197 | TextItems.Clear(); 198 | } 199 | 200 | void Items_OnAdd(TerminalItem obj) 201 | { 202 | StartCoroutine(AddItemAsync(obj)); 203 | } 204 | 205 | IEnumerator AddItemAsync(TerminalItem obj) 206 | { 207 | 208 | //inst 209 | var instance = (GameObject)Instantiate(ItemPrototype.gameObject); 210 | var script = instance.GetComponent(); 211 | script.Label.text = obj.Text; 212 | script.Label.color = obj.Color; 213 | script.Model = obj; 214 | 215 | //parent 216 | instance.transform.SetParent(ItemLayout.transform); 217 | instance.SetActive(true); 218 | 219 | TextItems.Add(script); 220 | 221 | yield return 1; 222 | 223 | ItemScrollBar.value = 0; 224 | 225 | yield return 1; 226 | 227 | ItemScrollBar.value = 0; 228 | } 229 | 230 | 231 | void Update() 232 | { 233 | if (Input.GetKeyUp(VisiblityKey)) 234 | { 235 | IsVisible = !IsVisible; 236 | } 237 | 238 | } 239 | 240 | public void DoSend() 241 | { 242 | var text = TextInput.text.Replace(Environment.NewLine, ""); 243 | 244 | if (string.IsNullOrEmpty(text)) 245 | return; 246 | 247 | Terminal.Submit(text); 248 | 249 | TextInput.text = string.Empty; 250 | } 251 | 252 | public void DoClear() 253 | { 254 | Terminal.Clear(); 255 | } 256 | } 257 | } -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/TerminalView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c14d55c8e178fa4dba0ec728416acbd 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/TerminalViewCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using UnityEngine.UI; 4 | 5 | namespace Realtime.Demos.TerminalConsole.Views 6 | { 7 | /// 8 | /// Command View Controller 9 | /// 10 | [AddComponentMenu("Realtime/Demos/Terminal/TerminalViewCommand")] 11 | public class TerminalViewCommand : MonoBehaviour 12 | { 13 | public TerminalCommand Model { get; set; } 14 | 15 | public Text Label; 16 | 17 | public Action Handler; 18 | 19 | public void OnClick() 20 | { 21 | if (Handler != null) 22 | Handler(); 23 | } 24 | 25 | } 26 | } -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/TerminalViewCommand.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0aec2c1c384994741842833157c9d287 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/TerminalViewItem.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | 4 | namespace Realtime.Demos.TerminalConsole.Views 5 | { 6 | /// 7 | /// Item View Controller 8 | /// 9 | [AddComponentMenu("Realtime/Demos/Terminal/TerminalViewItem")] 10 | public class TerminalViewItem : MonoBehaviour 11 | { 12 | public TerminalItem Model { get; set; } 13 | 14 | public Text Label; 15 | } 16 | } -------------------------------------------------------------------------------- /Foundation Terminal/Foundation/Console/TerminalViewItem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f0420699e292ffc4c95b26553e032592 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/AudioManager.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/DynamicsManager.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/EditorBuildSettings.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/EditorSettings.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/GraphicsSettings.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/InputManager.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/NavMeshAreas.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/NetworkManager.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/Physics2DSettings.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/ProjectSettings.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 5.1.2f1 2 | m_StandardAssetsVersion: 0 3 | -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/QualitySettings.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/TagManager.asset -------------------------------------------------------------------------------- /Foundation Terminal/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/ProjectSettings/TimeManager.asset -------------------------------------------------------------------------------- /Foundation Terminal/UnityVS.Foundation Console.CSharp.Editor.csproj.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | True -------------------------------------------------------------------------------- /Foundation Terminal/UnityVS.Foundation Console.v12.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation Terminal/UnityVS.Foundation Console.v12.suo -------------------------------------------------------------------------------- /Foundation.Terminal 2015.7.30.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Foundation.Terminal 2015.7.30.unitypackage -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Foundation Terminal (v4.0) 2 | 3 | Nicholas Ventimiglia | AvariceOnline.com 4 | 5 | ## Terminal for in game debugging 6 | 7 | The goal of this library to provide a UI for testing low level libraries and debugging in game. Built using uGUI. Is Unity3d 5 ready ! 8 | 9 | - Log many message types with color coding 10 | - Hooks into Debug.Log 11 | - A command button bar for testing methods 12 | - A text input with optional input handling (text processors) 13 | - Hide and close with the ` key 14 | 15 | ![alt tag](https://github.com/NVentimiglia/Unity3d-uGUI-Terminal/blob/master/Terminal.gif) 16 | 17 | ## Setup 18 | 19 | Drop the Terminal Prefab into your scene. 20 | 21 | ## Example Usage 22 | 23 | ```` 24 | 25 | // Write 26 | Terminal.Log("blag blah"); 27 | Terminal.LogError("blag blah"); 28 | Terminal.LogSuccess("blag blah"); 29 | Terminal.LogWarning("blag blah"); 30 | Terminal.LogImportant("blag blah"); 31 | // Wired to Application Log 32 | Debug.Log("blah"); 33 | 34 | // Register button commands. (Do this in Awake) 35 | Terminal.Add(new TerminalCommand 36 | { 37 | Label = "Main", 38 | Method = MainTest 39 | }); 40 | 41 | void MainTest() 42 | { 43 | // Run When Clicked 44 | } 45 | 46 | // Register new Text Processors (invoked when text is submitted) 47 | Terminal.Add(new TerminalInterpreter 48 | { 49 | Label = "Chat", 50 | Method = ChatExample 51 | }); 52 | 53 | void ChatExample(string text) 54 | { 55 | // Run When inputted 56 | } 57 | ```` 58 | 59 | ## More 60 | 61 | Part of the Unity3d Foundation toolkit. A collection of utilities for making high quality data driven games. http://unity3dFoundation.com 62 | 63 | - [**Tasks**](https://github.com/NVentimiglia/Unity3d-Async-Task) : An async task library for doing background work or extending coroutines with return results. 64 | - [**Messenger**](https://github.com/NVentimiglia/Unity3d-Event-Messenger) : Listener pattern. A message broker for relaying events in a loosely coupled way. Supports auto subscription via the [Subscribe] annotation. 65 | - [**Terminal**](https://github.com/NVentimiglia/Unity3d-uGUI-Terminal): A in game terminal for debugging ! 66 | - [**Injector**](https://github.com/NVentimiglia/Unity3d-Service-Injector): Service Injector for resolving services and other components. Supports auto injection using the [Inject] annotation 67 | - [**DataBinding**](https://github.com/NVentimiglia/Unity3d-Databinding-Mvvm-Mvc) : For MVVM / MVC style databinding. Supports the new uGUI ui library. 68 | - [**Localization**](https://github.com/NVentimiglia/Unity3d-Localization) : Supports in editor translation, multiple files and automatic translation of scripts using the [Localized] annotation. 69 | - **Cloud** : Parse-like storage and account services using a ASP.NET MVC back end. Need to authenticate your users? Reset passwords with branded emails? Save high scores or character data in a database? Maybe write your own authoritative back end? This is it. 70 | - **Lobby** : The ultimate example scene. Everything you need to deploy for a game, minus the actual game play. 71 | 72 | ## Donations 73 | [I accept donations via papal. Your money is an objective measure of my self esteem.](https://www.paypal.com/us/cgi-bin/webscr?cmd=_send-money&nav=1&email=nick@simplesys.us) 74 | -------------------------------------------------------------------------------- /Terminal.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NVentimiglia/Unity3d-uGUI-Terminal/3bfb830d6e5da7b90f74e64ed3645b0d6abaf3ee/Terminal.gif --------------------------------------------------------------------------------