MetalAdventures/src/metal_adventures/scene.rb

44 lines
1.1 KiB
Ruby

require "yaml"
require "active_support/core_ext/module/delegation"
module MetalAdventures
# A scene contains a dsl_instance (kind of the blueprint that describe the scene)
# and the state associated to one specific use of it, so it can remember which
# round it is, etc.
class Scene
def initialize(dsl_instance)
@dsl_instance = dsl_instance
@action_id = 0
end
delegate :name, to: :@dsl_instance
def current_action
@dsl_instance.actions.values[@action_id]
end
def next!
@action_id = (@action_id + 1) % @dsl_instance.actions.size
end
def self.load!(name)
filename = "#{name}.yaml".underscore.tr(" ", "_")
data = YAML.load_file("scenes/#{filename}")
dsl_instance = DSL::Scene.new data["name"] do
data["actions"].each do |action_name, action_data|
action action_name do
action_data["options"].each do |option_data|
option option_data["name"], duration: option_data["duration"], skill: option_data["skill"]
end
end
end
end
new dsl_instance
end
end
end
require_relative "./scene/dsl"