tmud-3.0.0/benchmark/
tmud-3.0.0/cmd/
tmud-3.0.0/cmd/objects/
tmud-3.0.0/cmd/tiny/
tmud-3.0.0/doc/SQLite/
tmud-3.0.0/doc/SQLite3/
tmud-3.0.0/doc/TernaryTrie/
tmud-3.0.0/farts/
tmud-3.0.0/lib/
tmud-3.0.0/lib/engine/
tmud-3.0.0/lib/farts/
tmud-3.0.0/logs/
#
# file::    command.rb
# author::  Jon A. Lambert
# version:: 2.8.0
# date::    01/19/2006
#
# This source code copyright (C) 2005, 2006 by Jon A. Lambert
# All rights reserved.
#
# Released under the terms of the TeensyMUD Public License
# See LICENSE file for additional information.
#
$:.unshift "lib" if !$:.include? "lib"
$:.unshift "vendor" if !$:.include? "vendor"

require 'yaml'
require 'utility/ternarytrie'
require 'utility/configuration'
require 'utility/log'


# The Command class encapsulates a TeensyMud command
class Command
  attr_reader :cmd, :name, :help
  logger
  configuration

  # Create a command
  def initialize(cmd, name, help)
    @cmd,@name,@help=cmd,name,help
  end

  # load builds a command lookup trie from the commands listed in a yaml
  # config file and in the and then defines/redefines them on the GameObject
  # classes.
  # [+return+] A trie of commands (see TernaryTrie class)
  def self.load
    @log.info "Loading commands..."

    # first load the commands for objects
    ocmdtable = TernaryTrie.new
    if options['object_interface'] && !options['object_interface'].empty?
      options['object_interface'].each do |i|
        cmds = YAML::load_file("cmd/#{i}.yaml")
        cmds.each do |c|
          Kernel::load("cmd/#{i}/#{c.cmd}.rb")
          ocmdtable.insert(c.name, c)
        end
        GameObject.send(:include,ObjCmd)
      end
    else
      @log.warn "No command interfaces for GameObject"
    end

    # now load the commands for characters
    cmdtable = TernaryTrie.new
    if options['character_interface'] && !options['character_interface'].empty?
      options['character_interface'].each do |i|
        cmds = YAML::load_file("cmd/#{i}.yaml")
        cmds.each do |c|
          Kernel::load("cmd/#{i}/#{c.cmd}.rb")
          cmdtable.insert(c.name, c)
        end
        Character.send(:include,Cmd)
      end
    else
      @log.error "No command interfaces for Character"
    end

    @log.info "Done."
    return cmdtable, ocmdtable
  rescue Exception
    @log.error $!
  end

  # We need options at class level
  def self.options
    Configuration.instance.options
  end

end