class Kugutsu::Script
Attributes
event_bus[R]
Public Class Methods
new()
click to toggle source
# File lib/kugutsu/script.rb, line 5 def initialize @action_index = {} @enabled_actions = Set.new @completed_actions = {} @event_bus = EventBus.new end
Public Instance Methods
enable_actions()
click to toggle source
# File lib/kugutsu/script.rb, line 21 def enable_actions @action_index.values.each do |action| enable_action(action) if is_enabled?(action) end end
load_scene_file(scene_file)
click to toggle source
# File lib/kugutsu/script.rb, line 13 def load_scene_file(scene_file) scene = SceneParser.new.parse(scene_file, @event_bus) scene.actions.each do |action| add_action!(action) end end
Private Instance Methods
add_action!(action)
click to toggle source
# File lib/kugutsu/script.rb, line 29 def add_action!(action) action.add_event_listener(:complete, method(:on_action_complete)) action.conditions.each do |parent_id| @action_index[parent_id].children << action.id end @action_index[action.id] = action end
enable_action(action)
click to toggle source
# File lib/kugutsu/script.rb, line 44 def enable_action(action) if @enabled_actions.include?(action) raise StandardError.new("Action #{action.id} already enabled.") end @enabled_actions << action action.enable end
is_enabled?(action)
click to toggle source
# File lib/kugutsu/script.rb, line 39 def is_enabled?(action) !@completed_actions[action.id] && action.conditions.map { |condition| @completed_actions[condition] }.all? end
on_action_complete(action)
click to toggle source
# File lib/kugutsu/script.rb, line 53 def on_action_complete(action) @completed_actions[action.id] = true action.children.each do |child_id| child_action = @action_index[child_id] enable_action(child_action) if is_enabled?(child_action) end end