-- Inventory System -- module (finished). local M = {} ------------------------------------------------------------------- -- Item class ------------------------------------------------------------------- local Item = {} Item.__index = Item function Item.new(name, weight, value) local self = setmetatable({}, Item) self.name = name self.weight = weight self.value = value return self end function Item:describe() return string.format("%s (%.1fkg, %dg)", self.name, self.weight, self.value) end ------------------------------------------------------------------- -- Inventory class ------------------------------------------------------------------- local Inventory = {} Inventory.__index = Inventory function Inventory.new() local self = setmetatable({}, Inventory) self.items = {} return self end function Inventory:add(item) table.insert(self.items, item) end function Inventory:remove(name) for i, item in ipairs(self.items) do if item.name == name then return table.remove(self.items, i) end end return nil end function Inventory:totalWeight() local total = 0 for _, item in ipairs(self.items) do total = total + item.weight end return total end function Inventory:totalValue() local total = 0 for _, item in ipairs(self.items) do total = total + item.value end return total end function Inventory:list() print(string.format("Inventory (%d items):", #self.items)) for _, item in ipairs(self.items) do print(" - " .. item:describe()) end print(string.format(" Totals: %.2fkg, %dg", self:totalWeight(), self:totalValue())) end M.Item = Item M.Inventory = Inventory return M