61 lines
2.1 KiB
C#
61 lines
2.1 KiB
C#
using System;
|
|
using System.Text;
|
|
using SlatedGameToolkit.Tools.CommandSystem;
|
|
using SlatedGameToolkit.Tools.CommandSystem.Interaction;
|
|
|
|
namespace SlatedGameToolkit.Tools.Commands
|
|
{
|
|
public class HelpCommand : IInvocable
|
|
{
|
|
private readonly string[] invokers = new string[] {"help"};
|
|
private CommandMap commandMap;
|
|
|
|
public HelpCommand(CommandMap commandMap) {
|
|
this.commandMap = commandMap;
|
|
}
|
|
|
|
public bool Execute(IInteractable interactable, string[] args)
|
|
{
|
|
if (args.Length > 0) {
|
|
IInvocable invocable = commandMap[args[0]];
|
|
if (invocable == null) interactable.Tell("Unable to find command {0}. Please type \"help\" for more a list of commands.");
|
|
StringBuilder builder = new StringBuilder();
|
|
builder.AppendJoin(", ", invocable.GetInvokers());
|
|
interactable.Tell("Possible aliases: " + builder.ToString());
|
|
interactable.Tell("Description: " + invocable.getDescription());
|
|
interactable.Tell("Usage: " + invocable.getUsage(args.Length > 0 ? args[0] : null));
|
|
} else {
|
|
interactable.Tell("--- Help ---");
|
|
foreach (IInvocable invocable in commandMap)
|
|
{
|
|
interactable.Separate();
|
|
StringBuilder builder = new StringBuilder();
|
|
builder.AppendJoin(", ", invocable.GetInvokers());
|
|
interactable.Tell(builder.ToString() + ": ");
|
|
interactable.Tell(invocable.getDescription());
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public string getDescription()
|
|
{
|
|
return "Displays the help message. You're looking at it.";
|
|
}
|
|
|
|
public string getUsage(string arg)
|
|
{
|
|
return "Usage: \"help [command]\" where [command] is a specific command you want to see usage for.";
|
|
}
|
|
|
|
public string[] GetInvokers()
|
|
{
|
|
return invokers;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
|
|
}
|
|
}
|
|
} |