Module: Gamefic::Scriptable::Entities
Overview
Note:
The public versions of the entity and player arrays are frozen. Authors need access to them but shouldn’t modify them directly. Use #make and #destroy instead.
Scriptable methods related to managing entities.
Instance Method Summary collapse
- #destroy(entity) ⇒ Object
- #entities ⇒ Array<Gamefic::Entity>
- #entity_vault ⇒ Object
- #find(*args) ⇒ Object
-
#make(klass, **opts) ⇒ Gamefic::Entity
Create an entity.
-
#pick(*args) ⇒ Gamefic::Entity?
Pick a unique entity based on the given arguments.
-
#pick!(*args) ⇒ Gamefic::Entity
Same as #pick, but raise an error if a unique match could not be found.
- #player_vault ⇒ Object
- #players ⇒ Array<Gamefic::Actor, Gamefic::Active>
Methods included from Proxies
Instance Method Details
#destroy(entity) ⇒ Object
46 47 48 49 50 |
# File 'lib/gamefic/scriptable/entities.rb', line 46 def destroy entity entity.children.each { |child| destroy child } entity.parent = nil entity_vault.delete entity end |
#entities ⇒ Array<Gamefic::Entity>
23 24 25 |
# File 'lib/gamefic/scriptable/entities.rb', line 23 def entities entity_vault.array end |
#entity_vault ⇒ Object
14 15 16 |
# File 'lib/gamefic/scriptable/entities.rb', line 14 def entity_vault @entity_vault ||= Vault.new end |
#find(*args) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/gamefic/scriptable/entities.rb', line 52 def find *args args.inject(entities) do |entities, arg| case arg when String result = Scanner.scan(entities, arg) result.remainder.empty? ? result.match : [] else entities.that_are(arg) end end end |
#make(klass, **opts) ⇒ Gamefic::Entity
Create an entity.
42 43 44 |
# File 'lib/gamefic/scriptable/entities.rb', line 42 def make klass, **opts entity_vault.add klass.new(**unproxy(opts)) end |
#pick(*args) ⇒ Gamefic::Entity?
Pick a unique entity based on the given arguments. String arguments are used to scan the entities for matching names and synonyms. Return nil if an entity could not be found or there is more than one possible match.
71 72 73 74 75 76 |
# File 'lib/gamefic/scriptable/entities.rb', line 71 def pick *args matches = find(*args) return nil unless matches.one? matches.first end |
#pick!(*args) ⇒ Gamefic::Entity
Same as #pick, but raise an error if a unique match could not be found.
85 86 87 88 89 90 91 |
# File 'lib/gamefic/scriptable/entities.rb', line 85 def pick! *args matches = find(*args) raise "no entity matching '#{args.inspect}'" if matches.empty? raise "multiple entities matching '#{args.inspect}': #{matches.join_and}" unless matches.one? matches.first end |
#player_vault ⇒ Object
18 19 20 |
# File 'lib/gamefic/scriptable/entities.rb', line 18 def player_vault @player_vault ||= Vault.new end |
#players ⇒ Array<Gamefic::Actor, Gamefic::Active>
28 29 30 |
# File 'lib/gamefic/scriptable/entities.rb', line 28 def players player_vault.array end |