public void Toggle() { while (true) { isToggle = !isToggle; if (isToggle) { if (energyMixin != null && energyMixin.charge > 0f || powerRelay != null && powerRelay.GetPower() > 0f || energyInterface != null && energyInterface.TotalCanProvide(out _) > 0f) { ErrorMessage.AddMessage($"BuilderModule Enabled"); Player.main.GetPDA().Close(); uGUI_BuilderMenu.Show(); handleInputFrame = Time.frameCount; return; } else { ErrorMessage.AddMessage($"Insufficient Power"); continue; } } ErrorMessage.AddMessage($"BuilderModule Disabled"); OnDisable(); break; } }
public override void Process(PowerLevelChanged packet) { GameObject gameObject = GuidHelper.RequireObjectFrom(packet.Guid); if (packet.PowerType == PowerType.ENERGY_INTERFACE) { EnergyInterface energyInterface = gameObject.RequireComponent <EnergyInterface>(); float amount = packet.Amount; float num = 0f; if (GameModeUtils.RequiresPower()) { int num2 = 0; if (packet.Amount > 0f) { float num3 = energyInterface.TotalCanConsume(out num2); if (num3 > 0f) { float amount2 = amount / (float)num2; for (int i = 0; i < energyInterface.sources.Length; i++) { EnergyMixin energyMixin = energyInterface.sources[i]; if (energyMixin != null && energyMixin.charge < energyMixin.capacity) { num += energyMixin.ModifyCharge(amount2); } } } } else { float num4 = energyInterface.TotalCanProvide(out num2); if (num2 > 0) { amount = ((-amount <= num4) ? amount : (-num4)); for (int j = 0; j < energyInterface.sources.Length; j++) { EnergyMixin energyMixin2 = energyInterface.sources[j]; if (energyMixin2 != null && energyMixin2.charge > 0f) { float num5 = energyMixin2.charge / num4; num += energyMixin2.ModifyCharge(amount * num5); } } } } } } else { Log.Error("Unsupported packet power type: " + packet.PowerType); } }
[HarmonyPrefix] // Harmony prefix public static bool Prefix(Vehicle __instance, ref float energyCost, ref bool __result) { float enginePowerRating = Traverse.Create(__instance).Field("enginePowerRating").GetValue <float>(); EnergyInterface thisEnergyInterface = __instance.GetComponent <EnergyInterface>(); EnergyMixin thisEnergyMixing = __instance.GetComponent <EnergyMixin>(); float realEnergyCost = energyCost / enginePowerRating; if (Player.main.currentMountedVehicle != null && Player.main.currentMountedVehicle == __instance) { if (SeamothInfo.ModeGreenOn) // Only gears 1 to 5 are provided (note that the first number in the division bracket is the desired energy consumption) { if (Config.SeamothGearValue == 1f) { realEnergyCost = energyCost * (10f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 2f) { realEnergyCost = energyCost * (20f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 3f) { realEnergyCost = energyCost * (40f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 4f) { realEnergyCost = energyCost / enginePowerRating; // Energy consumption is 80 (80f / 80f) } else if (Config.SeamothGearValue == 5f) { realEnergyCost = energyCost * (120f / 80f) / enginePowerRating; } } else { // note that the first number in the division bracket is the desired energy consumption if (Config.SeamothGearValue == 1f) { realEnergyCost = energyCost * (10f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 2f) { realEnergyCost = energyCost * (30f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 3f) { realEnergyCost = energyCost * (60f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 4f) { realEnergyCost = energyCost * (100f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 5f) { realEnergyCost = energyCost * (150f / 80f) / enginePowerRating; } else if (Config.SeamothGearValue == 6f) { realEnergyCost = energyCost * (300f / 80f) / enginePowerRating; } } // end else int num; float energyCanProvide = thisEnergyInterface.TotalCanProvide(out num); __result = thisEnergyMixing.ConsumeEnergy(Mathf.Min(realEnergyCost, energyCanProvide)); return(false); } // end if (Player.main.currentMountedVehicle != null) return(true); } // end public static bool Prefix(Vehicle __instance, ref float energyCost, ref bool __result)