Add help, and add client to netchaperone

This commit is contained in:
Sofia 2020-08-07 02:27:08 +03:00
parent f2e872e7aa
commit 6756bf7d26
4 changed files with 172 additions and 27 deletions

File diff suppressed because one or more lines are too long

View File

@ -21,6 +21,7 @@ namespace NeonTea.Quakeball.Interface {
private bool IsOpen = false; private bool IsOpen = false;
private Dictionary<string, Func<string[], bool>> Commands = new Dictionary<string, Func<string[], bool>>(); private Dictionary<string, Func<string[], bool>> Commands = new Dictionary<string, Func<string[], bool>>();
private Dictionary<string, string> Helps = new Dictionary<string, string>();
private List<string> Messages = new List<string>(); private List<string> Messages = new List<string>();
private string Text = ""; private string Text = "";
@ -58,7 +59,22 @@ namespace NeonTea.Quakeball.Interface {
CurrentScroll = -1; CurrentScroll = -1;
}); });
AddMessage($"<color={INFO_COLOR}>Welcome to Quakeball!</color>"); RegisterCommand("help", args => {
if (args.Length == 0) {
Println($"<color={ERROR_COLOR}>Need at least 1 command to give help for</color>");
return false;
}
foreach (string command in args) {
if (Helps.ContainsKey(command)) {
Println($"help {command}: {Helps[command]}");
} else {
Println($"<color={ERROR_COLOR}>command {command} not found.</color>");
}
}
return true;
});
Println($"<color={INFO_COLOR}>Welcome to Quakeball!</color>");
} }
public void ToggleTerminal(InputAction.CallbackContext context) { public void ToggleTerminal(InputAction.CallbackContext context) {
@ -92,6 +108,14 @@ namespace NeonTea.Quakeball.Interface {
return true; return true;
} }
public bool RegisterCommand(string name, Func<string[], bool> command, string help) {
if (RegisterCommand(name, command)) {
Helps.Add(name, help);
return true;
}
return false;
}
public void Run(string command) { public void Run(string command) {
string[] parts = command.Split(new char[] { ' ' }); string[] parts = command.Split(new char[] { ' ' });
string name = parts[0]; string name = parts[0];
@ -99,22 +123,31 @@ namespace NeonTea.Quakeball.Interface {
Func<string[], bool> func = Commands[name]; Func<string[], bool> func = Commands[name];
string[] args = new string[parts.Length - 1]; string[] args = new string[parts.Length - 1];
Array.Copy(parts, 1, args, 0, parts.Length - 1); Array.Copy(parts, 1, args, 0, parts.Length - 1);
if (func(args)) { int message = Println($"> {command}");
AddMessage(command); if (!func(args)) {
} else { EditPrintln(message, $"<color={ERROR_COLOR}>> {command}</color>");
AddMessage($"<color={ERROR_COLOR}>{command}</color>");
} }
} else { } else {
AddMessage($"<color={ERROR_COLOR}>{command}</color>"); Println($"<color={ERROR_COLOR}>> {command}</color>");
AddMessage("No such command exists!"); Println("No such command exists!");
} }
PreviousRuns.Insert(0, command); PreviousRuns.Insert(0, command);
} }
public void AddMessage(string message) { public int Println(string message) {
Messages.Add(message); Messages.Add(message);
Text = String.Join("\n", Messages.ToArray()); Text = String.Join("\n", Messages.ToArray());
TextField.text = Text; TextField.text = Text;
return Messages.Count - 1;
}
public void EditPrintln(int idx, string message) {
if (0 > idx || idx >= Messages.Count) {
return;
}
Messages[idx] = message;
Text = String.Join("\n", Messages.ToArray());
TextField.text = Text;
} }
private void Scroll(int amount) { private void Scroll(int amount) {

View File

@ -1,5 +1,6 @@
using UnityEngine; using System.Collections.Generic;
using System; using System;
using UnityEngine;
using NeonTea.Quakeball.Interface; using NeonTea.Quakeball.Interface;
using NeonTea.Quakeball.TeaNet.Peers; using NeonTea.Quakeball.TeaNet.Peers;
@ -8,25 +9,36 @@ namespace NeonTea.Quakeball.Net {
private Terminal Terminal; private Terminal Terminal;
private Queue<string> MessageQueue = new Queue<string>();
private void Start() { private void Start() {
if (Terminal.Singleton != null) { if (Terminal.Singleton != null) {
Terminal = Terminal.Singleton; Terminal = Terminal.Singleton;
Terminal.RegisterCommand("host", Host); Terminal.RegisterCommand("host", Host, "host [<port>] [<address>] - Hosts server at given address and port.");
Terminal.RegisterCommand("join", Join, "join [<address>] [<port>] - Tries to join a server at given address and port.");
}
}
private void Update() {
if (Terminal != null && Terminal.isActiveAndEnabled) {
while (MessageQueue.Count > 0) {
Terminal.Println(MessageQueue.Dequeue());
}
} }
} }
private bool Host(string[] args) { private bool Host(string[] args) {
if (args.Length > 2) { if (args.Length > 2) {
Terminal.AddMessage($"<color={Terminal.ERROR_COLOR}>Can't accept more than 2 arguments.</color>"); Terminal.Println($"<color={Terminal.ERROR_COLOR}>Can't accept more than 2 arguments.</color>");
return false; return false;
} }
string addr = "0.0.0.0"; string addr = "0.0.0.0";
string portstr = "8080"; string portstr = "8080";
if (args.Length == 1) { if (args.Length > 0) {
portstr = args[0]; portstr = args[0];
} else if (args.Length == 2) { }
addr = args[0]; if (args.Length > 1) {
portstr = args[1]; addr = args[1];
} }
int port; int port;
if (!Int32.TryParse(portstr, out port)) { if (!Int32.TryParse(portstr, out port)) {
@ -36,8 +48,29 @@ namespace NeonTea.Quakeball.Net {
return true; return true;
} }
private bool Join(string[] args) {
if (args.Length > 2) {
Terminal.Println($"<color={Terminal.ERROR_COLOR}>Can't accept more than 2 arguments.</color>");
return false;
}
string addr = "127.0.0.1";
string portstr = "8080";
if (args.Length > 0) {
addr = args[0];
}
if (args.Length > 1) {
portstr = args[1];
}
int port;
if (!Int32.TryParse(portstr, out port)) {
return false;
}
Net.Singleton.StartClient(addr, port, this);
return true;
}
public void Message(string msg) { public void Message(string msg) {
Terminal.AddMessage(msg); MessageQueue.Enqueue(msg);
} }
public void Err(string err) { } public void Err(string err) { }

View File

@ -130,6 +130,7 @@ PlayerSettings:
- {fileID: 0} - {fileID: 0}
- {fileID: 0} - {fileID: 0}
- {fileID: 0} - {fileID: 0}
- {fileID: 11400000, guid: 93ab183751ff48144819df32f8ac6a93, type: 2}
metroInputSource: 0 metroInputSource: 0
wsaTransparentSwapchain: 0 wsaTransparentSwapchain: 0
m_HolographicPauseOnTrackingLoss: 1 m_HolographicPauseOnTrackingLoss: 1