class Gamefic::Rulebook::Scenes

The scene manager for rulebooks.

Attributes

introductions[R]

Public Class Methods

new() click to toggle source
# File lib/gamefic/rulebook/scenes.rb, line 10
def initialize
  @scene_map = {}
  @introductions = []
end

Public Instance Methods

[](name) click to toggle source

@return [Scene, nil]

# File lib/gamefic/rulebook/scenes.rb, line 36
def [](name)
  @scene_map[name]
end
add(scene) click to toggle source

Add a scene to the scenebook.

@param [Scene]

# File lib/gamefic/rulebook/scenes.rb, line 25
def add scene
  raise ArgumentError, "A scene named `#{scene.name} already exists" if @scene_map.key?(scene.name)

  @scene_map[scene.name] = scene
end
all() click to toggle source

@return [Array<Scene>]

# File lib/gamefic/rulebook/scenes.rb, line 46
def all
  @scene_map.values
end
empty?() click to toggle source
# File lib/gamefic/rulebook/scenes.rb, line 63
def empty?
  @scene_map.empty? && introductions.empty?
end
freeze() click to toggle source
Calls superclass method
# File lib/gamefic/rulebook/scenes.rb, line 15
def freeze
  super
  @scene_map.freeze
  @introductions.freeze
  self
end
introduction(scene) click to toggle source
# File lib/gamefic/rulebook/scenes.rb, line 50
def introduction scene
  introductions.push scene
end
maybe_add(name, klass, narrative) click to toggle source
# File lib/gamefic/rulebook/scenes.rb, line 59
def maybe_add name, klass, narrative
  add klass.new(name, narrative) unless names.include?(name)
end
names() click to toggle source

@return [Array<Symbol>]

# File lib/gamefic/rulebook/scenes.rb, line 41
def names
  @scene_map.keys
end
scene?(name) click to toggle source
# File lib/gamefic/rulebook/scenes.rb, line 31
def scene? name
  @scene_map.key? name
end
with_defaults(narrative) click to toggle source
# File lib/gamefic/rulebook/scenes.rb, line 54
def with_defaults narrative
  maybe_add :default_scene, Scene::Activity, narrative
  maybe_add :default_conclusion, Scene::Conclusion, narrative
end