class Delve

Public Class Methods

new(name) click to toggle source
# File lib/delve.rb, line 6
def initialize(name)
  raise 'Cannot create a new roguelike without a name' unless name
  @name = name

  @renderers = [:curses]
  @generators = [:noise, :rogue, :cellular]
  @renderer = :curses
  @generator = :rogue

  @statements = {
    :curses => {
      :renderer       => 'delve/display/curses_renderer',
      :input          => 'delve/input/curses_input',
      :new_renderer   => 'CursesRenderer.new',
      :new_input      => 'CursesInput.new'
    },
    :noise => {
      :generator      => 'delve/generator/noise',
      :new_generator  => 'NoiseGenerator.new(128, 64, :fine)'
    },
    :rogue => {
      :generator      => 'delve/generator/rogue',
      :new_generator  => 'RogueGenerator.new(128, 64)'
    }
  }
end
version() click to toggle source
# File lib/delve/version.rb, line 2
def self.version
  '0.0.8'
end

Public Instance Methods

create_game(path) click to toggle source
# File lib/delve.rb, line 51
def create_game path
  raise "Cannot create roguelike when path already exists: #{path}/#{@name}" if Dir.exist?("#{path}/#{@name}")

  @base_path = File.join(path, @name).to_s
  create_directories
  create_gem_files
  create_bin_file
  create_screens
  create_game_classes
end
generator() click to toggle source
# File lib/delve.rb, line 47
def generator
  @generator
end
renderer() click to toggle source
# File lib/delve.rb, line 43
def renderer
  @renderer
end
use_generator(generator) click to toggle source
# File lib/delve.rb, line 38
def use_generator(generator)
  raise "Cannot use unknown generator: #{generator}" unless @generators.include? generator
  @generator = generator
end
use_renderer(renderer) click to toggle source
# File lib/delve.rb, line 33
def use_renderer(renderer)
  raise "Cannot use unknown renderer: #{renderer}" unless @renderers.include? renderer
  @renderer = renderer
end

Private Instance Methods

create_bin_file() click to toggle source
# File lib/delve.rb, line 76
def create_bin_file
  @renderer_import        = @statements[@renderer][:renderer]
  @input_import           = @statements[@renderer][:input]
  @new_renderer_statement = @statements[@renderer][:new_renderer]
  @new_input_statement    = @statements[@renderer][:new_input]

  create_file_from_template 'binfile.erb', "bin/#{@name}"
end
create_directories() click to toggle source
# File lib/delve.rb, line 100
def create_directories
  FileUtils.mkdir(@base_path)
  FileUtils.mkdir(@base_path + '/bin')
  FileUtils.mkdir(@base_path + '/lib')
  FileUtils.mkdir(@base_path + '/lib/' + @name)
  FileUtils.mkdir(@base_path + '/lib/' + @name + '/screens')
  FileUtils.mkdir(@base_path + '/lib/' + @name + '/factory')
end
create_file_from_template(template_name, target) click to toggle source
# File lib/delve.rb, line 91
def create_file_from_template(template_name, target)
  dir = File.expand_path(File.dirname(__FILE__))
  content = File.read(File.join(dir, "../templates/#{template_name}"))
  erb = ERB.new content
  File.open(File.join(@base_path, target), 'w') do |file|
    file.write erb.result(binding)
  end
end
create_game_classes() click to toggle source
# File lib/delve.rb, line 63
def create_game_classes
  create_file_from_template 'world.rb.erb', "lib/#{@name}/world.rb"
  create_file_from_template 'player_factory.rb.erb', "lib/#{@name}/factory/player.rb"
end
create_gem_files() click to toggle source
# File lib/delve.rb, line 85
def create_gem_files
  create_file_from_template 'Gemfile.erb', 'Gemfile'
  create_file_from_template 'gemspec.erb', "#{@name}.gemspec"
  create_file_from_template 'README.md.erb', "README.md"
end
create_screens() click to toggle source
# File lib/delve.rb, line 68
def create_screens
  @generator_import       = @statements[@generator][:generator]
  @new_generator          = @statements[@generator][:new_generator]
  create_file_from_template 'title_screen.rb.erb', "lib/#{@name}/screens/title.rb"
  create_file_from_template 'loading_screen.rb.erb', "lib/#{@name}/screens/loading.rb"
  create_file_from_template 'game_screen.rb.erb', "lib/#{@name}/screens/game.rb"
end