#pragma once #include #include #include #include "RecipesConfig.h" // A single stat modifier contributed by a module instance. // REQ-MOD-STAT-CALC: final = base * (1 + sum(m_i - 1)) + sum(additives). struct ModuleStatModifier { std::string stat; // e.g. "hp", "speed", "sensor_range" std::string modifierType; // "additive" or "multiplicative" double value; }; // Capability sections — present when the module grants that capability. struct ModuleWeaponCapability { float damage; float attackRange_m; float attackRate_hz; }; struct ModuleSalvageCapability { float collectionRange_m; float cargoCapacity; float collectionRate_hz; }; struct ModuleRepairCapability { float repairRate_hz; // repair cycles per second float repairAmountHp; // HP restored per cycle float repairRange_m; }; struct ModuleDef { std::string id; std::vector surfaceMask; std::vector materials; double productionTimeSeconds; std::string fillColor; std::string glyph; std::vector statModifiers; std::optional weaponCapability; std::optional salvageCapability; std::optional repairCapability; // Optional hover-tooltip text for the module selection button // (REQ-MOD-UI-MODULE-TOOLTIP). std::optional tooltip; }; struct ModulesConfig { std::vector modules; // Returns the definition for the given module id, or nullptr if the id has // no entry in modules.toml. const ModuleDef* findModuleDef(const std::string& id) const { for (const ModuleDef& def : modules) { if (def.id == id) { return &def; } } return nullptr; } };