Exemplo n.º 1
0
        public static SeaglideOverchargeInfo GetOrCreateInfo(this Seaglide seaglide)
        {
            if (!info.TryGetValue(seaglide, out var result))
            {
                result = info[seaglide] = new SeaglideOverchargeInfo(seaglide);
            }

            return(result);
        }
Exemplo n.º 2
0
        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.");
        }