RitnIngredient¶
Normalise une entrée de recette (ingrédient ou produit, item ou fluide) en une forme uniforme {name, type, amount, amount_min, amount_max, independent_probability}, et fournit des opérations de liste (:add, :addNew, :set, :remove, :combine). C'est le moteur utilisé en interne par RitnProtoRecipe pour ses méthodes d'ingrédients et de résultats, utilisable aussi directement.
| Source | classes/RitnClass/RitnIngredient.lua |
| Stage | data |
| Accès | require(ritnlib.defines.class.ritnClass.ingredient) |
| Hérite de | — (classe de base) |
object_name |
"RitnIngredient" |
Constructeur¶
RitnIngredient(ingredient) → RitnIngredient¶
Normalise l'entrée. Le type est auto-détecté ("fluid" si data.raw.fluid[name] existe, sinon "item"). Pour les items, un amount dans (0, 1) est ramené à 1, sinon flooré.
Paramètres
- ingredient :: table|string — accepte trois formes :
- array : { "iron-plate", 2 } (legacy 1.x)
- table : { name = "iron-plate", amount = 2, type = "item" } (canonique 2.0)
- string : "iron-plate" (sucre pour { name = "iron-plate" })
Attributs¶
name :: string [Read]¶
Nom résolu de l'entrée.
type :: "item"|"fluid"|nil [Read]¶
Type résolu (auto-détecté si absent).
amount · amount_min · amount_max :: number? [Read]¶
Quantité (floorée pour les items) et bornes de plage.
independent_probability :: number? [Read]¶
Facteur de probabilité (Factorio 2.1+, renommé depuis probability). Lu depuis independent_probability, ou depuis l'ancienne clé probability si seule celle-ci est présente.
item :: table [Read]¶
Payload normalisé {name, type, amount, amount_min, amount_max, independent_probability} plus tous les autres champs de l'entrée d'origine (temperature, ignored_by_productivity, extra_count_fraction, percent_spoiled…). C'est lui qui est inséré dans les listes. La forme array ([1], [2]) et la clé probability n'y sont jamais recopiées.
object_name :: "RitnIngredient" [Read]¶
Sentinelle de type.
Méthodes¶
Les opérations de liste prennent
listIngredients :: table[](la listeingredientsouresultsd'une recette) et la modifient sur place.
:add(listIngredients)¶
Insère self ; combine (somme des quantités, moyenne des independent_probability) si une entrée du même nom existe déjà.
:addNew(listIngredients)¶
Insère self seulement si aucune entrée du même nom n'existe déjà.
:set(listIngredients)¶
Remplace sur place chaque entrée du même nom par self.item (écrase, sans combine).
:remove(listIngredients)¶
Supprime chaque entrée du même nom (via [1] ou .name).
:combine(ingredient) → table¶
Combine self avec ingredient (même nom) : somme les quantités, moyenne les independent_probability. Les champs annexes (temperature…) viennent de ingredient, c'est-à-dire de l'entrée déjà présente dans la recette. Met à jour self.item et renvoie le payload combiné.
Paramètres : ingredient :: table.
Exemple d'usage¶
Directement sur une liste d'ingrédients :
local RitnIngredient = require(ritnlib.defines.class.ritnClass.ingredient)
RitnIngredient({ "iron-plate", 2 }):add(recipe.ingredients) -- ajoute ou combine
RitnIngredient("copper-plate"):remove(recipe.ingredients) -- retire par nom
Un produit avec probabilité et température :
RitnIngredient({ type = "fluid", name = "steam", amount = 10, temperature = 165,
independent_probability = 0.5 }):add(recipe.results)
En pratique, on passe le plus souvent par RitnProtoRecipe (:addIngredient, :addResult…) qui délègue à RitnIngredient.
Remarques¶
- Data stage — opère sur des tables d'ingrédients / produits de
data.raw. probability→independent_probability— Factorio 2.1 a retiréprobabilitydes produits ; la clé legacy est encore acceptée en entrée mais seuleindependent_probabilityest écrite. Voir Migration Factorio 2.1.- Formes d'entrée — array (1.x) et table (2.0) sont toutes deux acceptées. Une entrée item définie uniquement par
amount_min/amount_maxest gérée.