class Gamefic::Active::Cue
The object that actors use to perform a scene.
Attributes
@return [Actor]
@return [Hash]
@return [Class<Scene::Base>, Symbol]
@return [Narrative]
@return [Props::Default, nil]
Public Class Methods
Source
# File lib/gamefic/active/cue.rb, line 26 def initialize actor, key, narrative, **context @actor = actor @key = key @narrative = narrative @context = context end
@param actor [Actor] @param key [Class<Scene::Base>, Symbol] @param narrative [Narrative]
Public Instance Methods
Source
# File lib/gamefic/active/cue.rb, line 41 def finish props&.enter(actor.queue.shift&.strip) scene.finish end
@return [void]
Source
# File lib/gamefic/active/cue.rb, line 47 def output props&.output.clone.freeze || Props::Output::EMPTY end
@return [Props::Output]
Source
# File lib/gamefic/active/cue.rb, line 65 def prepare props.output.merge!({ scene: scene.to_hash, prompt: props.prompt, messages: actor.flush, queue: actor.queue }) actor.narratives.player_output_blocks.each { |block| block.call actor, props.output } end
@return [void]
Source
# File lib/gamefic/active/cue.rb, line 52 def restart Cue.new(actor, key, narrative, **context) end
@return [Cue]
Source
# File lib/gamefic/active/cue.rb, line 76 def scene # @note This method always returns a new instance. Scenes identified # by symbolic keys can be instances of anonymous classes that cannot # be serialized, so memoizing them breaks snapshots. narrative&.prepare(key, actor, props, **context) || try_unblocked_class || raise("Failed to cue #{key.inspect} in #{narrative.inspect}") end
@return [Scene::Base]
Source
# File lib/gamefic/active/cue.rb, line 34 def start @props = scene.start prepare_output actor.rotate_cue end
@return [void]
Private Instance Methods
Source
# File lib/gamefic/active/cue.rb, line 96 def prepare_output props.output.last_input = actor.last_cue&.props&.input props.output.last_prompt = actor.last_cue&.props&.prompt end
@return [void]
Source
# File lib/gamefic/active/cue.rb, line 88 def try_unblocked_class return unless key.is_a?(Class) && key <= Scene::Base Gamefic.logger.warn "Cueing scene #{key} without narrative" unless narrative key.new(actor, narrative, props, **context) end
@return [Scene::Base]