private void UpdatePower(IItem item, ItemStorageFridgePublicState publicState, ItemStorageFridgePrivateState privateState, bool isOn) { if (item.Container is null) { return; } var character = item.Container.OwnerAsCharacter; if (isOn) { publicState.IsOn = true; //force the client to refresh if isOn = false and stays false (double energyBefore, double totalEnergyMaxBefore) = this.SharedCalculateTotalEnergyCharge(item); publicState.LastPowerPourcent = (double)energyBefore / totalEnergyMaxBefore; publicState.IsOn = ServerDeductEnergyCharge( character, requiredEnergyAmount: this.EnergyConsumptionPerSecond * ServerUpdateIntervalSeconds, publicState, privateState); (double energyAfter, double totalEnergyMaxAfter) = this.SharedCalculateTotalEnergyCharge(item); publicState.PowerPourcent = (double)energyAfter / totalEnergyMaxAfter; } else { publicState.IsOn = false; } }
public virtual double GetCurrentFreshnessDurationMultiplier(ItemStorageFridgePublicState publicState) { if (!publicState.IsOn) { // no power supplied so no freshness increase return(1); } return(this.FreshnessDurationMultiplier); }
private bool ServerDeductEnergyCharge(ICharacter character, double requiredEnergyAmount, ItemStorageFridgePublicState publicState, ItemStorageFridgePrivateState privateState) { if (requiredEnergyAmount <= 0) { return(true); } List <IItem> list = privateState.ItemsEnergyContainer.GetItemsOfProto <IProtoItemPowerBank>().ToList(); if (list.Count == 0) { // there are no battery packs equipped return(false); } // deduct energy in reverse order for (var index = list.Count - 1; index >= 0; index--) { var item = list[index]; var powerBankPrivateState = list[index].GetPrivateState <ItemPowerBankPrivateState>(); var charge = powerBankPrivateState.EnergyCharge; if (charge <= 0) { // no charge there continue; } if (charge >= requiredEnergyAmount) { // there are more than enough charge available powerBankPrivateState.EnergyCharge -= requiredEnergyAmount; ServerOnEnergyUsed(item, requiredEnergyAmount); return(true); } // use all the remaining charge in this item requiredEnergyAmount -= charge; powerBankPrivateState.EnergyCharge = 0; ServerOnEnergyUsed(item, charge); } return(false); }