From fd407dab7875cae2e63d14edfd06f9c49f1f1870 Mon Sep 17 00:00:00 2001 From: teascade Date: Fri, 7 Aug 2020 01:22:54 +0300 Subject: [PATCH] Make terminal great again --- Assets/Scripts/Interface/Terminal.cs | 57 ++++++++++++++++++- .../com.unity.probuilder/Settings.json | 5 ++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Interface/Terminal.cs b/Assets/Scripts/Interface/Terminal.cs index 544c251..0e012fa 100644 --- a/Assets/Scripts/Interface/Terminal.cs +++ b/Assets/Scripts/Interface/Terminal.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System; +using System.Collections; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.EventSystems; @@ -19,10 +20,16 @@ namespace NeonTea.Quakeball.Interface { private float DesiredTerminalPos; private bool IsOpen = false; + private Dictionary> Commands = new Dictionary>(); + private List Messages = new List(); private string Text = ""; + private List PreviousRuns = new List(); + private int CurrentScroll = -1; + private bool JustScrolled = false; public static string INFO_COLOR = "#FE8"; + public static string ERROR_COLOR = "#F33"; void Start() { ToggleTerminalAction = new InputAction("Toggle Terminal", binding: "/backquote"); @@ -31,10 +38,23 @@ namespace NeonTea.Quakeball.Interface { SubmitTerminal = new InputAction("Terminal Submit", binding: "/enter"); SubmitTerminal.Enable(); SubmitTerminal.performed += Submit; + SubmitTerminal = new InputAction("Terminal ScrollUp", binding: "/uparrow"); + SubmitTerminal.Enable(); + SubmitTerminal.performed += _ => { Scroll(1); }; + SubmitTerminal = new InputAction("Terminal ScrollDown", binding: "/downarrow"); + SubmitTerminal.Enable(); + SubmitTerminal.performed += _ => { Scroll(-1); }; DesiredTerminalPos = (TerminalPanel.rect.height / 2) * (IsOpen ? -1 : 1); InputField.restoreOriginalTextOnEscape = false; + InputField.onValueChanged.AddListener(_ => { + if (JustScrolled) { + JustScrolled = false; + return; + } + CurrentScroll = -1; + }); AddMessage($"Welcome to Quakeball!"); } @@ -62,15 +82,50 @@ namespace NeonTea.Quakeball.Interface { } } + public bool RegisterCommand(string name, Func command) { + if (Commands.ContainsKey(name)) { + return false; + } + Commands.Add(name, command); + return true; + } + + public void Run(string command) { + string[] parts = command.Split(new char[] { ' ' }); + string name = parts[0]; + if (Commands.ContainsKey(name)) { + Func func = Commands[name]; + string[] args = new string[parts.Length - 1]; + Array.Copy(parts, 1, args, 0, parts.Length - 1); + if (func(args)) { + AddMessage(command); + } else { + AddMessage($"{command}"); + } + } else { + AddMessage($"{command}"); + AddMessage("No such command exists!"); + } + PreviousRuns.Insert(0, command); + } + public void AddMessage(string message) { Messages.Add(message); Text = String.Join("\n", Messages.ToArray()); TextField.text = Text; } + private void Scroll(int amount) { + if (IsOpened() && PreviousRuns.Count > 0) { + JustScrolled = true; + CurrentScroll = Math.Min(Math.Max(0, CurrentScroll + amount), PreviousRuns.Count - 1); + InputField.text = PreviousRuns[CurrentScroll]; + } + } + private void Submit(InputAction.CallbackContext context) { if (IsOpened()) { - AddMessage(InputField.text); + Run(InputField.text); InputField.text = ""; } } diff --git a/ProjectSettings/Packages/com.unity.probuilder/Settings.json b/ProjectSettings/Packages/com.unity.probuilder/Settings.json index 6608479..9022745 100644 --- a/ProjectSettings/Packages/com.unity.probuilder/Settings.json +++ b/ProjectSettings/Packages/com.unity.probuilder/Settings.json @@ -78,6 +78,11 @@ "key": "mesh.meshColliderIsConvex", "value": "{\"m_Value\":false}" }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "editor.stripProBuilderScriptsOnBuild", + "value": "{\"m_Value\":true}" + }, { "type": "UnityEngine.ProBuilder.SelectionModifierBehavior, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "key": "editor.rectSelectModifier",