gamefic-what 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f40f2ea9dca315b67d9a59a7daa003655694a8f2bb0a218fb0779952c2e5f302
4
- data.tar.gz: d5115b517c1f57c01b2c031f9f9e234814b376831bba9dd120ad585cb209957a
3
+ metadata.gz: f8f3c7e689ff251e6777f362bf424d493eb988cfccf47e95319fc0b216b2ddc5
4
+ data.tar.gz: 2cf0bfae41be0deb822d904f4745dd4270d4479fe782ee62052ae19e0c6d9fce
5
5
  SHA512:
6
- metadata.gz: 98cce3c727eb1e3fdc062894addd61b5e8e0df068b4182c1900bf3deb28747ded743258dde999ddc67b6b7e4905ad717afdb5f6cf370e4b47cae2361c353b46b
7
- data.tar.gz: a89ab4ed46ec39098d1ae0ea2263c6036c3ec99cfb6eafa55cce52fcb74677365bcfc31f548807a1a435c5c21ff65d60fc281fc90e9288717d0f2a548987ba1a
6
+ metadata.gz: 55f502bfbacb9b03c187b909f0197be357246810171fddc969499380c3c3472a7f9e68d27dd06c79476081723c841a59ddd2daa61379e3d9b57e590a88f320a2
7
+ data.tar.gz: 5cfa5f94b033640c715435fe39cbca5507e9bc656cf46a5656751c350a534ba254ccb654d40a32d552265a01094766eb698657fc9716fe8f62119da7aa0b72a6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 2.0.0
2
+ - Use AskForWhat scene to process answers
3
+
1
4
  ## 1.1.0 - October 15, 2024
2
5
  - Allow gamefic-4.0
3
6
 
data/README.md CHANGED
@@ -25,10 +25,6 @@ require 'gamefic-what'
25
25
  Example code:
26
26
 
27
27
  ```ruby
28
- class Gamefic::Actor
29
- include Gamefic::What::Askable
30
- end
31
-
32
28
  class MyPlot < Gamefic::Plot
33
29
  include Gamefic::What
34
30
 
@@ -47,7 +43,7 @@ class MyPlot < Gamefic::Plot
47
43
 
48
44
  respond :take do |actor|
49
45
  actor.tell 'What do you want to take?'
50
- actor.ask_for_what 'take', nil
46
+ actor.cue AskForWhat, template: 'take __what__'
51
47
  end
52
48
  end
53
49
  ```
@@ -57,7 +53,7 @@ Example gameplay:
57
53
  > take
58
54
  What do you want to take?
59
55
  > the thing
60
- You take a thing.
56
+ You take the thing.
61
57
 
62
58
  ## Development
63
59
 
data/Rakefile CHANGED
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
3
+ require 'bundler/setup'
4
+ require 'bundler/gem_tasks'
5
+ require 'rspec/core/rake_task'
5
6
  require 'opal/rspec/rake_task'
6
7
 
7
8
  RSpec::Core::RakeTask.new(:spec)
data/gamefic-what.gemspec CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
 
34
34
  # Uncomment to register a new dependency of your gem
35
35
  # spec.add_dependency "example-gem", "~> 1.0"
36
- spec.add_dependency 'gamefic', '>= 3.4'
36
+ spec.add_dependency 'gamefic', '~> 4.0'
37
37
 
38
38
  spec.add_development_dependency 'opal-rspec', '~> 1.0'
39
39
  spec.add_development_dependency 'opal-sprockets', '~> 1.0'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gamefic
4
4
  module What
5
- VERSION = '1.1.0'
5
+ VERSION = '2.0.0'
6
6
  end
7
7
  end
data/lib/gamefic/what.rb CHANGED
@@ -1,21 +1,59 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gamefic/what/askable'
4
3
  require 'gamefic/what/version'
5
4
 
6
5
  module Gamefic
7
6
  # A Gamefic extension for expanding commands with an additional argument.
8
7
  #
9
8
  module What
10
- extend Gamefic::Scriptable
9
+ # Perform a command based on the player's answer for what an object of the
10
+ # previous command should be.
11
+ #
12
+ # @example
13
+ # class MyPlot < Gamefic::Plot
14
+ # include Gamefic::What
15
+ #
16
+ # construct :room, Gamefic::Entity, name: 'room'
17
+ # construct :thing, Gamefic::Entity, name: 'thing', parent: room
18
+ #
19
+ # introduction do |actor|
20
+ # actor.parent = room
21
+ # end
22
+ #
23
+ # respond :take, Gamefic::Entity do |actor, thing|
24
+ # thing.parent = actor
25
+ # actor.tell "You take it."
26
+ # end
27
+ #
28
+ # respond :take do |actor|
29
+ # actor.tell 'What do you want to take?'
30
+ # actor.cue AskForWhat, template: 'take __what__'
31
+ # end
32
+ # end
33
+ #
34
+ class AskForWhat < Gamefic::Scene::Base
35
+ def finish
36
+ if command_with_answer_actions.empty? && actor.can?(props.input.keywords.first)
37
+ actor.perform(props.input)
38
+ else
39
+ actor.perform command_with_answer
40
+ end
41
+ super
42
+ end
43
+
44
+ private
11
45
 
12
- on_player_update(&:answer_for_what)
46
+ def command_with_answer
47
+ return nil unless props.input
48
+
49
+ @command_with_answer ||= context[:template].to_s
50
+ .gsub('__what__', props.input)
51
+ end
13
52
 
14
- respond nil, plaintext do |actor, text|
15
- if (command = actor.answer_for_what(text))
16
- actor.perform command
17
- else
18
- actor.proceed
53
+ def command_with_answer_actions
54
+ Gamefic::Request.new(actor, command_with_answer)
55
+ .to_actions
56
+ .select(&:verb)
19
57
  end
20
58
  end
21
59
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamefic-what
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-10-16 00:00:00.000000000 Z
11
+ date: 2025-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gamefic
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.4'
19
+ version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.4'
26
+ version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: opal-rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -108,7 +108,6 @@ files:
108
108
  - gamefic-what.gemspec
109
109
  - lib/gamefic-what.rb
110
110
  - lib/gamefic/what.rb
111
- - lib/gamefic/what/askable.rb
112
111
  - lib/gamefic/what/version.rb
113
112
  - sig/gamefic/what.rbs
114
113
  homepage: https://gamefic.com
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Gamefic
4
- module What
5
- # A mixin for Active entities that enables
6
- module Askable
7
- # Set a template to be populated with the player's answer.
8
- #
9
- # The template's placeholder for the answer can take two forms:
10
- # 1. An array with a nil element: `ask_for_what :use, nil`
11
- # 2. A `__what__` placeholder in a string: `ask_for_what "use __what__"`
12
- #
13
- # @example
14
- # class Example::Plot < Gamefic::Plot
15
- # respond :use, available do |actor, thing|
16
- # actor.tell "You use #{the thing}."
17
- # end
18
- #
19
- # respond :use do |actor|
20
- # actor.tell "What do you want to use?"
21
- # actor.ask_for_what :use, nil
22
- # end
23
- # end
24
- #
25
- # @param tokens [String, Array<String, nil>]
26
- def ask_for_what(*tokens)
27
- @asking_for_what = [tokens].flatten
28
- end
29
-
30
- attr_reader :asked_for_what
31
-
32
- def answer_for_what(text = nil)
33
- text = text&.gsub('__what__', 'what') # "Don't recurse" -- Heavy D.
34
- command = text && asked_for_what&.map { |token| token || text }
35
- &.join(' ')
36
- &.gsub('__what__', text)
37
- @asked_for_what = @asking_for_what
38
- @asking_for_what = nil
39
- command
40
- end
41
- alias set_asked_for_what answer_for_what
42
- end
43
- end
44
- end