Functions are chainable

This commit is contained in:
Simon Brodtmann 2025-03-16 18:40:40 +01:00
parent 27d9dd6c68
commit ea7785c761
2 changed files with 24 additions and 6 deletions

View file

@ -39,6 +39,7 @@ end
---- @param data table The data to assign ---- @param data table The data to assign
function Recipe:assign(data) function Recipe:assign(data)
table.assign(self.prototype, data) table.assign(self.prototype, data)
return self
end end
--- Adds an ingredient to the recipe --- Adds an ingredient to the recipe
@ -65,6 +66,7 @@ function Recipe:addIngredient(ingredientName, amount)
end end
end end
table.insert(self.prototype.ingredients, { name = ingredientName, amount = amount, type = ingredientType }) table.insert(self.prototype.ingredients, { name = ingredientName, amount = amount, type = ingredientType })
return self
end end
--- Replaces an existing ingredient by name with a new ingredient or adjusts the amount --- Replaces an existing ingredient by name with a new ingredient or adjusts the amount
@ -81,10 +83,11 @@ function Recipe:replaceIngredient(old, new, amount)
if result.name == old then if result.name == old then
result.name = new result.name = new
result.amount = amount or result.amount result.amount = amount or result.amount
return return self
end end
end end
end end
return self
end end
--- Removes an existing ingredient by name --- Removes an existing ingredient by name
@ -94,10 +97,11 @@ function Recipe:removeIngredient(ingredientName)
for i, result in pairs(self.prototype.ingredients) do for i, result in pairs(self.prototype.ingredients) do
if result.name == ingredientName then if result.name == ingredientName then
self.prototype.ingredients[i] = nil self.prototype.ingredients[i] = nil
return return self
end end
end end
end end
return self
end end
--- Replaces an existing result by name with a new result --- Replaces an existing result by name with a new result
@ -122,6 +126,7 @@ function Recipe:replaceResult(old, new, amount, expensiveAmount)
table.main_product = new table.main_product = new
end end
end end
return self
end end
--- Adds the recipe to a technology --- Adds the recipe to a technology
@ -136,10 +141,11 @@ function Recipe:unlockedByTechnology(technology)
end end
for _, effect in pairs(technology.effects) do for _, effect in pairs(technology.effects) do
if effect.type == "unlock-recipe" and effect.recipe == self.prototype.name then if effect.type == "unlock-recipe" and effect.recipe == self.prototype.name then
return return self
end end
end end
table.insert(technology.effects, { type = "unlock-recipe", recipe = self.prototype.name }) table.insert(technology.effects, { type = "unlock-recipe", recipe = self.prototype.name })
return self
end end
---- Clones the recipe ---- Clones the recipe

View file

@ -47,12 +47,14 @@ end
--- @param data table The data to assign --- @param data table The data to assign
function Technology:assign(data) function Technology:assign(data)
table.assign(self.prototype, data) table.assign(self.prototype, data)
return self
end end
--- Sets the prerequisite for the technology --- Sets the prerequisite for the technology
--- @param prerequisites table The names of the prerequisites --- @param prerequisites table The names of the prerequisites
function Technology:setPrerequisites(prerequisites) function Technology:setPrerequisites(prerequisites)
self.prototype.prerequisites = prerequisites self.prototype.prerequisites = prerequisites
return self
end end
--- Adds a prerequisite to the technology --- Adds a prerequisite to the technology
@ -63,6 +65,7 @@ function Technology:addPrerequisite(prerequisite)
if (not table.contains(self.prototype.prerequisites, _prerequisite)) then if (not table.contains(self.prototype.prerequisites, _prerequisite)) then
table.insert(self.prototype.prerequisites, _prerequisite) table.insert(self.prototype.prerequisites, _prerequisite)
end end
return self
end end
--- Adds multiple prerequisites to the technology --- Adds multiple prerequisites to the technology
@ -75,6 +78,7 @@ function Technology:addPrerequisites(prerequisites)
table.insert(self.prototype.prerequisites, _prerequisite) table.insert(self.prototype.prerequisites, _prerequisite)
end end
end end
return self
end end
--- Replaces a prerequisite in a technology --- Replaces a prerequisite in a technology
@ -88,6 +92,7 @@ function Technology:replacePrerequisite(old, new)
self.prototype.prerequisites[i] = _new self.prototype.prerequisites[i] = _new
end end
end end
return self
end end
--- Removes a prerequisite from the technology --- Removes a prerequisite from the technology
@ -97,9 +102,10 @@ function Technology:removePrerequisite(prerequisite)
for i, techPrerequisite in pairs(self.prototype.prerequisites) do for i, techPrerequisite in pairs(self.prototype.prerequisites) do
if techPrerequisite == _prerequisite then if techPrerequisite == _prerequisite then
table.remove(self.prototype.prerequisites, i) table.remove(self.prototype.prerequisites, i)
return return self
end end
end end
return self
end end
--- Adds an ingredient to the technology --- Adds an ingredient to the technology
@ -109,6 +115,7 @@ function Technology:addIngredient(ingredientName, amount)
self.prototype.unit = self.prototype.unit or { ingredients = {} } self.prototype.unit = self.prototype.unit or { ingredients = {} }
self.prototype.unit.ingredients = self.prototype.unit.ingredients or {} self.prototype.unit.ingredients = self.prototype.unit.ingredients or {}
table.insert(self.prototype.unit.ingredients, { ingredientName, amount or 1 }) table.insert(self.prototype.unit.ingredients, { ingredientName, amount or 1 })
return self
end end
--- Adds a list of ingredients to the technology with the default amount of 1 --- Adds a list of ingredients to the technology with the default amount of 1
@ -117,6 +124,7 @@ function Technology:addIngredients(ingredientNames)
for _, ingredientName in pairs(ingredientNames) do for _, ingredientName in pairs(ingredientNames) do
self:addIngredient(ingredientName) self:addIngredient(ingredientName)
end end
return self
end end
--- Removes an existing ingredient by name --- Removes an existing ingredient by name
@ -129,6 +137,7 @@ function Technology:removeIngredient(ingredientName)
end end
end end
end end
return self
end end
--- Adds a recipe unlock to the technology --- Adds a recipe unlock to the technology
@ -136,16 +145,18 @@ end
function Technology:addRecipe(recipeName) function Technology:addRecipe(recipeName)
for _, effect in pairs(self.prototype.effects) do for _, effect in pairs(self.prototype.effects) do
if effect.type == "unlock-recipe" and effect.recipe == recipeName then if effect.type == "unlock-recipe" and effect.recipe == recipeName then
return return self
end end
end end
table.insert(self.prototype.effects, { type = "unlock-recipe", recipe = recipeName }) table.insert(self.prototype.effects, { type = "unlock-recipe", recipe = recipeName })
return self
end end
--- Adds an effect to the technology --- Adds an effect to the technology
--- @param effect table The effect to add --- @param effect table The effect to add
function Technology:addEffect(effect) function Technology:addEffect(effect)
table.insert(self.prototype.effects, effect) table.insert(self.prototype.effects, effect)
return self
end end
--- Removes a recipe unlock from the technology --- Removes a recipe unlock from the technology
@ -154,9 +165,10 @@ function Technology:removeRecipe(recipeName)
for i, effect in pairs(self.prototype.effects) do for i, effect in pairs(self.prototype.effects) do
if effect.type == "unlock-recipe" and effect.recipe == recipeName then if effect.type == "unlock-recipe" and effect.recipe == recipeName then
table.remove(self.prototype.effects, i) table.remove(self.prototype.effects, i)
return return self
end end
end end
return self
end end
--- Clones the technology --- Clones the technology