From c8db03b2096be899ed912d91f8f7bb9b2632e544 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 4 Nov 2016 19:29:17 -0400 Subject: format & document command class --- src/StardewModdingAPI/Command.cs | 229 +++++++++++++++++++++------------------ 1 file changed, 121 insertions(+), 108 deletions(-) (limited to 'src') diff --git a/src/StardewModdingAPI/Command.cs b/src/StardewModdingAPI/Command.cs index 4214b1a7..4a5a2074 100644 --- a/src/StardewModdingAPI/Command.cs +++ b/src/StardewModdingAPI/Command.cs @@ -1,109 +1,122 @@ -using System; -using System.Collections.Generic; -using StardewModdingAPI.Events; - -namespace StardewModdingAPI -{ - public class Command - { - internal static List RegisteredCommands = new List(); - public string[] CalledArgs; - public string[] CommandArgs; - public string CommandDesc; - - public string CommandName; - - /// - /// Creates a Command from a Name, Description, and Arguments - /// - /// Name - /// Description - /// Arguments - public Command(string cname, string cdesc, string[] args = null) - { - CommandName = cname; - CommandDesc = cdesc; - if (args == null) - args = new string[0]; - CommandArgs = args; - } - - public event EventHandler CommandFired; - - /// - /// Calls the specified command. (It runs the command) - /// - /// The command to run - public static void CallCommand(string input) - { - input = input.TrimEnd(' '); - var args = new string[0]; - Command fnd; - if (input.Contains(" ")) - { - args = input.Split(new[] {" "}, 2, StringSplitOptions.RemoveEmptyEntries); - fnd = FindCommand(args[0]); - args = args[1].Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries); - } - else - { - fnd = FindCommand(input); - } - - if (fnd != null) - { - fnd.CalledArgs = args; - fnd.Fire(); - } - else - { - Log.AsyncR("Unknown Command"); - } - } - - /// - /// Registers a command to the list of commands properly - /// - /// Name of the command to register - /// Description - /// Arguments (these are purely for viewing so that a user can see what an argument needs to be) - /// - public static Command RegisterCommand(string command, string cdesc, string[] args = null) - { - var c = new Command(command, cdesc, args); - if (RegisteredCommands.Contains(c)) - { - Log.AsyncR($"Command already registered! [{c.CommandName}]"); - return RegisteredCommands.Find(x => x.Equals(c)); - } - - RegisteredCommands.Add(c); - Log.Async("Registered command: " + command); - - return c; - } - - /// - /// Looks up a command in the list of registered commands. Returns null if it doesn't exist (I think) - /// - /// Name of command to find - /// - public static Command FindCommand(string name) - { - return RegisteredCommands.Find(x => x.CommandName.Equals(name)); - } - - /// - /// Runs a command. Fires it. Calls it. Any of those. - /// - public void Fire() - { - if (CommandFired == null) - { - Log.AsyncR("Command failed to fire because it's fire event is null: " + CommandName); - return; - } - CommandFired.Invoke(this, new EventArgsCommand(this)); - } - } +using System; +using System.Collections.Generic; +using StardewModdingAPI.Events; + +namespace StardewModdingAPI +{ + /// A command that can be submitted through the SMAPI console to interact with SMAPI. + public class Command + { + /********* + ** Properties + *********/ + /**** + ** SMAPI + ****/ + /// The commands registered with SMAPI. + internal static List RegisteredCommands = new List(); + + /// The event raised when this command is submitted through the console. + public event EventHandler CommandFired; + + /**** + ** Command + ****/ + /// The name of the command. + public string CommandName; + + /// A human-readable description of what the command does. + public string CommandDesc; + + /// A human-readable list of accepted arguments. + public string[] CommandArgs; + + /// The actual submitted argument values. + public string[] CalledArgs; + + + /********* + ** Public methods + *********/ + /**** + ** Command + ****/ + /// Construct an instance. + /// The name of the command. + /// A human-readable description of what the command does. + /// A human-readable list of accepted arguments. + public Command(string name, string description, string[] args = null) + { + this.CommandName = name; + this.CommandDesc = description; + if (args == null) + args = new string[0]; + this.CommandArgs = args; + } + + /// Trigger this command. + public void Fire() + { + if (this.CommandFired == null) + { + Log.AsyncR("Command failed to fire because it's fire event is null: " + this.CommandName); + return; + } + this.CommandFired.Invoke(this, new EventArgsCommand(this)); + } + + /**** + ** SMAPI + ****/ + /// Invoke the specified command. + /// The command to run, including the command name and any arguments. + public static void CallCommand(string input) + { + input = input.TrimEnd(' '); + string[] args = new string[0]; + Command command; + if (input.Contains(" ")) + { + args = input.Split(new[] { " " }, 2, StringSplitOptions.RemoveEmptyEntries); + command = Command.FindCommand(args[0]); + args = args[1].Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); + } + else + command = Command.FindCommand(input); + + if (command != null) + { + command.CalledArgs = args; + command.Fire(); + } + else + Log.AsyncR("Unknown command"); + } + + /// Register a command with SMAPI. + /// The name of the command. + /// A human-readable description of what the command does. + /// A human-readable list of accepted arguments. + public static Command RegisterCommand(string name, string description, string[] args = null) + { + var command = new Command(name, description, args); + if (Command.RegisteredCommands.Contains(command)) + { + Log.AsyncR($"Command already registered! [{command.CommandName}]"); + return Command.RegisteredCommands.Find(x => x.Equals(command)); + } + + Command.RegisteredCommands.Add(command); + Log.Async("Registered command: " + name); + + return command; + } + + /// Find a command with the given name. + /// The command name to find. + public static Command FindCommand(string name) + { + return Command.RegisteredCommands.Find(x => x.CommandName.Equals(name)); + } + } } \ No newline at end of file -- cgit