Module: AdventureRL::Modifiers::Inventory
- Included in:
- Layer
- Defined in:
- lib/AdventureRL/Modifiers/Inventory.rb
Constant Summary collapse
- DEFAULT_INVENTORY_ID =
:NO_NAME
Instance Method Summary collapse
-
#add_object(object, id = DEFAULT_INVENTORY_ID) ⇒ Object
(also: #add_item, #add, #<<)
Add any object to this Inventory.
-
#added_object?(id) ⇒ Boolean
(also: #added_item?, #added?, #has?)
Returns true, if object with
idhas been added to this Inventory. -
#get_object(id = DEFAULT_INVENTORY_ID) ⇒ Object
(also: #get)
Returns the last object with the given
id. -
#get_objects(id = nil) ⇒ Object
Returns all its objects.
- #initialize(*args) ⇒ Object
-
#remove_object(id = DEFAULT_INVENTORY_ID, call_removed_method = true) ⇒ Object
(also: #remove)
Removes the last object with the given
id. -
#remove_objects(id = nil) ⇒ Object
Removes all objects with the given
id. -
#removed ⇒ Object
When removed is called on an object that has an Inventory, then also call #remove_objects on that object.
Instance Method Details
#add_object(object, id = DEFAULT_INVENTORY_ID) ⇒ Object Also known as: add_item, add, <<
Add any object to this Inventory. Pass an optional id, which can be used to access or remove the object afterwards.
14 15 16 17 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 14 def add_object object, id = DEFAULT_INVENTORY_ID @inventory[id] = [] unless (@inventory[id]) @inventory[id] << object end |
#added_object?(id) ⇒ Boolean Also known as: added_item?, added?, has?
Returns true, if object with id has been added to this Inventory. id can also be the object itself.
24 25 26 27 28 29 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 24 def added_object? id return ( @inventory.key?(id) || get_objects.include?(id) ) end |
#get_object(id = DEFAULT_INVENTORY_ID) ⇒ Object Also known as: get
Returns the last object with the given id. If no id is passed, return the last object with the unnamed id.
44 45 46 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 44 def get_object id = DEFAULT_INVENTORY_ID return @inventory[id].last end |
#get_objects(id = nil) ⇒ Object
Returns all its objects. If optional argument id is passed, then return all objects with that id.
37 38 39 40 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 37 def get_objects id = nil return @inventory.values.flatten unless (id) return @inventory[id] end |
#initialize(*args) ⇒ Object
6 7 8 9 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 6 def initialize *args @inventory = {} super end |
#remove_object(id = DEFAULT_INVENTORY_ID, call_removed_method = true) ⇒ Object Also known as: remove
Removes the last object with the given id. id can also be the object to be removed itself. If no id is given, remove the last object with the unnamed id.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 81 def remove_object id = DEFAULT_INVENTORY_ID, call_removed_method = true if (@inventory.key? id) object = @inventory[id].delete_at(-1) object.removed if (call_removed_method && object.methods.include?(:removed)) return object end key = (@inventory.detect do |k, val| next val.include?(id) end || []) .first return nil unless (@inventory.key? key) object = @inventory[key].delete id object.removed if (call_removed_method && object.methods.include?(:removed)) return object end |
#remove_objects(id = nil) ⇒ Object
Removes all objects with the given id. id can also be an added object itself; all objects with the same id will be removed. If no id is given, remove all objects.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 53 def remove_objects id = nil unless (id) get_objects.each do |object| object.removed if (object.methods.include? :removed) end return @inventory.clear end if (@inventory.key? id) objects = @inventory.delete(id) objects.each do |object| object.removed if (object.methods.include? :removed) end return objects end return @inventory.delete((@inventory.detect do |key, val| if (id == val) @inventory[key].each do |object| object.removed if (object.methods.include? :removed) end next true end next false end || []).first) end |
#removed ⇒ Object
When removed is called on an object that has an Inventory, then also call #remove_objects on that object.
99 100 101 |
# File 'lib/AdventureRL/Modifiers/Inventory.rb', line 99 def removed remove_objects end |