lib/gamefic/world/scenes.rb in gamefic-2.3.0 vs lib/gamefic/world/scenes.rb in gamefic-2.4.0

- old
+ new

@@ -1,8 +1,11 @@ module Gamefic module World module Scenes + include Commands + include Players + # @return [Class<Gamefic::Scene::Activity>] def default_scene @default_scene ||= Scene::Activity end @@ -27,17 +30,16 @@ # Introduce a player to the game. # This method is typically called by the Engine that manages game execution. # # @param [Gamefic::Actor] + # @return [void] def introduce(player) player.playbooks.push playbook unless player.playbooks.include?(playbook) player.cue default_scene players.push player - @introduction.call(player) unless @introduction.nil? - # @todo Find a better way to persist player characters - # Gamefic::Index.stick + @introduction&.call(player) end # Create a multiple-choice scene. # The user will be required to make a valid choice to continue. # @@ -51,11 +53,11 @@ # # @yieldparam [Gamefic::Actor] # @yieldparam [Gamefic::Scene::MultipleChoice] # @return [Class<Gamefic::Scene::MultipleChoice>] def multiple_choice *choices, &block - s = Scene::MultipleChoice.subclass do |actor, scene| + s = Scene::MultipleChoice.subclass do |_actor, scene| scene.options.concat choices scene.on_finish &block end scene_classes.push s s @@ -71,16 +73,16 @@ # else # actor.tell "You said no." # end # end # - # @param prompt [String] + # @param prompt [String, nil] # @yieldparam [Gamefic::Actor] # @yieldparam [Gamefic::Scene::YesOrNo] # @return [Class<Gamefic::Scene::YesOrNo>] def yes_or_no prompt = nil, &block - s = Scene::YesOrNo.subclass do |actor, scene| + s = Scene::YesOrNo.subclass do |_actor, scene| scene.prompt = prompt scene.on_finish &block end scene_classes.push s s @@ -96,11 +98,11 @@ # @param prompt [String] # @yieldparam [Gamefic::Actor] # @yieldparam [Gamefic::Scene::Base] # @return [Class<Gamefic::Scene::Base>] def question prompt = 'What is your answer?', &block - s = Scene::Base.subclass do |actor, scene| + s = Scene::Base.subclass do |_actor, scene| scene.prompt = prompt scene.on_finish &block end scene_classes.push s s @@ -114,17 +116,17 @@ # @scene = pause 'Continue' do |actor| # actor.tell "After you continue, you will be prompted for a command." # actor.prepare default_scene # end # - # @param prompt [String] The text to display when prompting the user to continue. + # @param prompt [String, nil] The text to display when prompting the user to continue # @yieldparam [Gamefic::Actor] # @return [Class<Gamefic::Scene::Pause>] def pause prompt = nil, &block s = Scene::Pause.subclass do |actor, scene| scene.prompt = prompt unless prompt.nil? - block.call(actor, scene) unless block.nil? + block&.call(actor, scene) end scene_classes.push s s end @@ -161,11 +163,11 @@ # actor.tell "Hello, #{actor.name}!" # actor.cue default_scene # end # end # - # @param cls [Class] The class of scene to be instantiated. + # @param cls [Class<Scene::Base>] The class of scene to be instantiated. # @yieldparam [Gamefic::Actor] # @return [Class<Gamefic::Scene::Base>] def custom cls = Scene::Base, &block s = cls.subclass &block scene_classes.push s @@ -206,13 +208,13 @@ # @yieldparam [Gamefic::Actor] # @yieldparam [Gamefic::Scene::MultipleScene] # @return [Class<Gamefic::Scene::MultipleScene>] def multiple_scene map = {}, &block s = Scene::MultipleScene.subclass do |actor, scene| - map.each_pair { |k, v| + map.each_pair do |k, v| scene.map k, v - } - block.call actor, scene unless block.nil? + end + block&.call actor, scene end scene_classes.push s s end