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