From d2868db28210b8c4debab2b70dca2833d582fdfd Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Fri, 23 Mar 2018 15:20:30 -0400 Subject: Refactored the inventory system Inventory system now uses flyweight pattern with metatables. --- gamemode/core/inventory/item.lua | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'gamemode/core/inventory/item.lua') diff --git a/gamemode/core/inventory/item.lua b/gamemode/core/inventory/item.lua index 79f9ad5..16b30dd 100644 --- a/gamemode/core/inventory/item.lua +++ b/gamemode/core/inventory/item.lua @@ -41,7 +41,7 @@ function itm.RegisterItem(tbl) if items[tbl.Name] ~= nil then log.warn(string.format("Attempted to register 2 items with the same name: %q, overwriteing previous",tbl.Name)) else - log.info(string.format("Registered item %s",tbl.Name)) + --log.info(string.format("Registered item %s",tbl.Name)) end items[tbl.Name] = tbl --print("Registered item: " .. tbl.Name) @@ -54,11 +54,13 @@ end function itm.GetItemByName(name) assert(type(name) == "string",string.format("Attempted to get an item by name with a %s.",type(name))) assert(items[name] ~= nil,string.format("Attempted to get item with invalid name %q Valid item names are:\n\t%s",name,table.concat(table.GetKeys(items),"\n\t"))) - local item - if items[name].init then - item = items[name]:init() - else - item = table.Copy(items[name]) + local item_m = { + __index = items[name] + } + local item = {} + setmetatable(item,item_m) + if item.init then + item:init() end return item end @@ -70,7 +72,13 @@ end --@treturn itemtbl The item that was deserialized function itm.GetItemFromData(name,data) assert(items[name] ~= nil,string.format("Attempted to get item with invalid name %q",name)) - return items[name]:DeSerialize(data) + local ret_m = { + __index = items[name] + } + local ret = {} + setmetatable(ret,ret_m) + ret:DeSerialize(data) + return ret end local function printitems() -- cgit v1.2.3-70-g09d2