Sha256: 1ac9570a721f4570d016aa170aa466daaa63e490b46db82d4f137eb788adf13e

Contents?: true

Size: 1.87 KB

Versions: 6

Compression:

Stored size: 1.87 KB

Contents

require 'inflector'
require 'mode'
class ModeManager

  constructor :resource_manager, :actor_factory, :input_manager,
    :sound_manager, :config_manager

  def setup
    @modes = {}
    @actor_factory.mode_manager = self
    modes = @resource_manager.load_config('mode_level_config')[:modes]

    @mode_names = []
    for mode_hash in modes
      for mode, levels in mode_hash
        @mode_names << mode
        mode_klass_name = "Mode"
        unless mode == :default
          mode_klass_name = Inflector.camelize mode.to_s+"Mode"
        end
        begin
          require mode.to_s+"_mode"
        rescue LoadError
          # hope it's defined somewhere else
        end
        mode_klass = ObjectSpace.const_get mode_klass_name
        mode_instance = mode_klass.new(@input_manager, @actor_factory, @resource_manager, @sound_manager, @config_manager, levels)
        mode_instance.when :next_mode do
          next_mode
        end
        mode_instance.when :prev_mode do
          prev_mode
        end
        add_mode mode, mode_instance
      end
    end
  end

  def next_mode
    index = @mode_names.index @mode
    if index == @mode_names.size-1
      puts "last mode, exiting"
      exit
    end
    change_mode_to @mode_names[index+1]
  end

  def prev_mode
    index = @mode_names.index @mode
    if index == 0
      puts "first mode, exiting"
      exit
    end
    change_mode_to @mode_names[index-1]
  end

  def add_mode(mode_sym, mode_instance)
    @modes[mode_sym] = mode_instance
    @mode = mode_sym unless @mode
    mode_instance
  end

  def change_mode_to(mode, *args)
    @modes[@mode].stop unless @modes[@mode].nil?
    @mode = mode
    @modes[@mode].start *args
  end

  def current_mode
    @modes[@mode]
  end

  def update(time)
    @modes[@mode].update time unless @modes[@mode].nil?
  end

  def draw(target)
    @modes[@mode].draw target unless @modes[@mode].nil?
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gamebox-0.0.1 lib/gamebox/mode_manager.rb
gamebox-0.0.2 lib/gamebox/mode_manager.rb
gamebox-0.0.3 lib/gamebox/mode_manager.rb
gamebox-0.0.4 lib/gamebox/mode_manager.rb
gamebox-0.0.5 lib/gamebox/mode_manager.rb
gamebox-0.0.6 lib/gamebox/mode_manager.rb