using System; using System.Collections.Generic; public class RobotStats { private const float BaseMinimumEfficiency = 0.35f; private float speedBonus = 0f; private float energyUseReduction = 0f; private float heatGainReduction = 0f; private float coolingBonus = 0f; private float maintenanceLossReduction = 0f; private float minimumEfficiencyBonus = 0f; public float GetMovementSpeed(float baseSpeed) { return baseSpeed * (1f + speedBonus); } public float GetEnergyUse(float baseEnergyUse) { return baseEnergyUse * (1f - Math.Clamp(energyUseReduction, 0f, 0.8f)); } public float GetHeatGain(float baseHeatGain) { return baseHeatGain * (1f - Math.Clamp(heatGainReduction, 0f, 0.8f)); } public float GetCoolingRate(float baseCoolingRate) { return baseCoolingRate * (1f + coolingBonus); } public float GetMaintenanceLoss(float baseMaintenanceLoss) { return baseMaintenanceLoss * (1f - Math.Clamp(maintenanceLossReduction, 0f, 0.8f)); } public float GetMinimumEfficiency() { return Math.Clamp(BaseMinimumEfficiency + minimumEfficiencyBonus, BaseMinimumEfficiency, 0.85f); } public void Apply(List effects) { if (effects == null) return; foreach (ResearchEffect effect in effects) { Apply(effect); } } private void Apply(ResearchEffect effect) { if (effect == null) return; switch (effect.Stat) { case "robot_speed_bonus": speedBonus += effect.Value; break; case "robot_energy_use_reduction": energyUseReduction += effect.Value; break; case "robot_heat_gain_reduction": heatGainReduction += effect.Value; break; case "robot_cooling_bonus": coolingBonus += effect.Value; break; case "robot_maintenance_loss_reduction": maintenanceLossReduction += effect.Value; break; case "robot_minimum_efficiency_bonus": minimumEfficiencyBonus += effect.Value; break; } } }