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