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

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.

Returns:

  • (Boolean)


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

#removedObject

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