Sha256: f4fb4055a950a5ddce191a7bfa4cbfd685ca592e4f1a41eb5816d7e02a31759c

Contents?: true

Size: 1.72 KB

Versions: 6

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

module Gamefic
  module Active
    # The combination of an actor and a scene to be performed in a plot turn.
    #
    class Take
      # @return [Active]
      attr_reader :actor

      # @return [Active::Cue]
      attr_reader :cue

      # @return [Scene::Default]
      attr_reader :scene

      # @param actor [Active]
      # @param cue [Active::Cue]
      # @param props [Props::Default, nil]
      def initialize actor, cue, props = nil
        @actor = actor
        @cue = cue
        @scene = actor.epic.select_scene(cue.scene)
        @props = props
      end

      # @return [Props::Default]
      def props
        @props ||= @scene.new_props(**cue.context)
      end

      # @return [Props::Default]
      def start
        scene.run_start_blocks actor, props
        scene.start actor, props
        # @todo See if this can be handled better
        actor.epic.rulebooks.each { |rlbk| rlbk.run_player_output_blocks actor, props.output }
        props.output.merge!({
                              messages: actor.messages,
                              queue: actor.queue
                            })
        props
      end

      # @return [void]
      def finish
        actor.flush
        scene.finish(actor, props)
        scene.run_finish_blocks actor, props
      end

      # @param actor [Active]
      # @param cue [Active::Cue]
      # @return [Props::Default]
      def self.start actor, cue
        Take.new(actor, cue).start
      end

      # @param actor [Active]
      # @param cue [Active::Cue]
      # @return [void]
      def self.finish actor, cue, props
        Take.new(actor, cue, props).finish
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gamefic-3.6.0 lib/gamefic/active/take.rb
gamefic-3.5.0 lib/gamefic/active/take.rb
gamefic-3.4.0 lib/gamefic/active/take.rb
gamefic-3.3.0 lib/gamefic/active/take.rb
gamefic-3.2.1 lib/gamefic/active/take.rb
gamefic-3.2.0 lib/gamefic/active/take.rb