Add class Item

This commit is contained in:
Simon Brodtmann 2025-05-23 21:03:59 +02:00
parent 3ce2d83c22
commit 8e637400a5
2 changed files with 62 additions and 10 deletions

52
cf-lib/data/Item.lua Normal file
View file

@ -0,0 +1,52 @@
--- Utility class for a single item
--- @class Item
local Item = {}
--- Pass an item name or an item table to get a Item object
--- @param value string|table The name of the item or the item table
function Item:new(value)
local name
local item
if type(value) == "string" then
name = value
item = data.raw.item[name]
if not item then
log("Item not found: " .. name)
return nil
end
elseif type(value) == "table" then
name = value.name
item = value
end
local obj = {
prototype = item
}
setmetatable(obj, self)
self.__index = self
return obj
end
--- Applies the item to the game
function Item:apply()
data:extend({ self.prototype })
end
--- Assigns data to the item
--- Shorthand for table.assign(item.prototype, data)
--- @param data table The data to assign
function Item:assign(data)
table.assign(self.prototype, data)
return self
end
--- Sets the weight of the item calculated from given count per rocket.
--- @param count number The amount of items that fit into a rocket
function Item:itemsPerRocket(count)
self.prototype.weight = (1000 / count) * kg
return self
end
return Item

View file

@ -1,9 +1,9 @@
---- Utility class for a single recipe
---- @class Recipe
--- Utility class for a single recipe
--- @class Recipe
local Recipe = {}
---- Pass a recipe name or a recipe table to get a Recipe object
---- @param value string|table The name of the recipe or the recipe table
--- Pass a recipe name or a recipe table to get a Recipe object
--- @param value string|table The name of the recipe or the recipe table
function Recipe:new(value)
local name
local recipe
@ -29,14 +29,14 @@ function Recipe:new(value)
return obj
end
---- Applies the recipe to the game
--- Applies the recipe to the game
function Recipe:apply()
data:extend({ self.prototype })
end
---- Assigns data to the recipe
---- Shorthand for table.assign(recipe.prototype, data)
---- @param data table The data to assign
--- Assigns data to the recipe
--- Shorthand for table.assign(recipe.prototype, data)
--- @param data table The data to assign
function Recipe:assign(data)
table.assign(self.prototype, data)
return self
@ -148,8 +148,8 @@ function Recipe:unlockedByTechnology(technology)
return self
end
---- Clones the recipe
---- @param name string The name of the new recipe
--- Clones the recipe
--- @param name string The name of the new recipe
function Recipe:clone(name)
local clone = table.deepcopy(self.prototype)
clone.name = name