local R=(require(((game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")):WaitForChild("\083\099\114\105\112\116\115")):WaitForChild("\067\111\110\115\111\108\101"))).sourced("\067\111\109\109\097\110\100")R.log("\073\110\105\116\105\097\108\105\122\105\110\103 \118\097\114\105\097\098\108\101\115\046\046\046")local s={}R.log("\067\111\110\115\116\114\117\099\116\105\110\103 \111\098\106\101\099\116\115\046\046\046")s.__index=s function s.new()local R=setmetatable({},s)R.Name=""return R end function s.Update(s)R.warn("\085\112\100\097\116\101 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \097\110\100 \115\104\111\117\108\100 \110\111\116 \098\101 \099\097\108\108\101\100 \102\114\111\109 \067\111\109\109\097\110\100\046")return{}end function s.Listener(s)R.warn("\076\105\115\116\101\110\101\114 \109\117\115\116 \098\101 \111\118\101\114\114\105\100\100\101\110 \097\110\100 \115\104\111\117\108\100 \110\111\116 \098\101 \099\097\108\108\101\100 \102\114\111\109 \067\111\109\109\097\110\100\046")end R.log("\068\111\110\101\046")return s
--- An abstract Command to be issued through a Dispatcher.
-- The Command is updated by the Dispatcher and listens to the Dispatcher for
-- other commands to respond to. This is an abstract class and should be used
-- to inherit from in other commands. It should not be instantiated directly.
--
-- @author LastTalon
-- @version 0.1.1, 2020-10-01
-- @since 0.1
--
-- @module Command
-- @field Name the name of this Command
--
-- @see Dispatcher

local Console = require(game:GetService("ReplicatedStorage"):WaitForChild("Scripts"):WaitForChild("Console")).sourced("Command")

-- Variables --
Console.log("Initializing variables...")

local Command = {}

-- Local Objects --
Console.log("Constructing objects...")

Command.__index = Command

--- The default constructor.
-- Creates a new Command with a blank name.
--
-- @return the new Command
function Command.new()
	local self = setmetatable({}, Command)
	self.Name = ""
	return self
end

--- Updates the Command.
-- Performs all Command updates. Determines if the Command activates. The
-- command can activate multiple times with a single update. This should not be
-- called from the abstract class Command and should be overridden. This should
-- typically not be called directly and should be called by the associated
-- Dispatcher.
--
-- @param tick the current tick of the update
-- @return a table of all activations for this update
function Command:Update()
	Console.warn("Update must be overridden and should not be called from Command.")
	return {}
end

--- A listener for all Commands in the attached Dispatcher
-- Listens for incoming Commands and reacts accordingly. Often used to
-- determine whether or how to activate on the next update. This should
-- typically not be called directly and shoudl be called by the associated
-- Dispatcher.
--
-- @param ... all parameters passed by the activating command
function Command:Listener()
	Console.warn("Listener must be overridden and should not be called from Command.")
end

-- End --
Console.log("Done.")

return Command
