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()
{
}
}
}