public static SeaglideOverchargeInfo GetOrCreateInfo(this Seaglide seaglide) { if (!info.TryGetValue(seaglide, out var result)) { result = info[seaglide] = new SeaglideOverchargeInfo(seaglide); } return(result); }
static void TryActivatingOvercharge(SeaglideOverchargeInfo info) { // Only activate if none is activated if (info.overchargeTime > 0) { ErrorMessage.AddError("Seaglide is still in Overcharged mode"); return; } // Check battery var c = C; var batteryConsumption = c.OverchargeBatteryCost; var energyConsumption = c.OverchargeEnergyConsumption; var eMixin = (EnergyMixin)energyMixin.GetValue(info.seaglide); var battery = eMixin.GetBattery() as Battery; if (battery == null || battery.capacity <= batteryConsumption || battery.charge <= energyConsumption) { ErrorMessage.AddError("Not enough battery charge"); return; } var player = Player.main; if (player == null) { ModUtils.LogDebug("Player null"); return; } // Boost info.overchargeTime = c.OverchargeDuration; info.overchargeMul = c.OverchargeBoost; eMixin.ConsumeEnergy(energyConsumption); battery._capacity -= batteryConsumption; recentOvercharge = info; // Set new Motor Mode to player to update speed ResetMotorMode(player); ErrorMessage.AddError($"Seaglide Overcharged for {(int)info.overchargeTime} seconds."); }