public void SetConnector(IWirelessConnecter connecter) => this.connecter = connecter;
Esempio n. 2
0
        private static void AddStrings()
        {
            Strings.Add(SideScreenKey + ".TITLE", SideScreenTitleText);
            Strings.Add(ChannelTitleKey + ".NAME", ChannelTitleName);
            Strings.Add(ChannelTitleKey + ".TOOLTIP", ChannelTitleTooltip);
            Strings.Add(JoulesToTransferTitleKey + ".NAME", JoulesToTransferTitleName);
            Strings.Add(JoulesToTransferTitleKey + ".TOOLTIP", JoulesToTransferTitleTooltip);
            Strings.Add(WirelessBatteryThresholdTitleKey + ".NAME", WirelessBatteryThresholdTitleName);
            Strings.Add(WirelessBatteryThresholdTitleKey + ".TOOLTIP", WirelessBatteryThresholdTitleTooltip);
            Strings.Add(InternalBatteryThresholdTitleKey + ".NAME", InternalBatteryThresholdTitleName);
            Strings.Add(InternalBatteryThresholdTitleKey + ".TOOLTIP", InternalBatteryThresholdTitleTooltip);


            Strings.Add(ConnectionStatusKey + ".NAME", ConnectionStatusName);
            Strings.Add(ConnectionStatusKey + ".TOOLTIP", ConnectionStatusTooltip);

            WirelessPowerStrings.ConnectionStatus = (StatusItem)Traverse.Create(Db.Get().BuildingStatusItems).Method("CreateStatusItem", new object[] {
                "WirelessPower.Connection",
                "BUILDING",
                string.Empty,
                StatusItem.IconType.Info,
                NotificationType.Neutral,
                false,
                OverlayModes.Power.ID,
                true,
                129022
            }).GetValue();

            WirelessPowerStrings.ConnectionStatus.resolveStringCallback = (Func <string, object, string>)((str, data) =>
            {
                if ((UnityEngine.Object)data == null || (IWirelessConnecter)data == null)
                {
                    return(str);
                }

                IWirelessConnecter wirelessConnector = (IWirelessConnecter)data;
                bool isConnected = wirelessConnector.IsConnectedToGrid;

                if (str.Contains("{Status}"))
                {
                    str = !isConnected ? str.Replace("{Status}", FormatColour("Offline", StringColour.Red)) : str.Replace("{Status}", FormatColour("Online", StringColour.Green));
                }
                else if (str.Contains("{Explanation}"))
                {
                    if (data is WirelessPowerSender && isConnected)
                    {
                        str = str.Replace("{Explanation}", "Sender is connected to the " + FormatColour("Wireless Power Grid") + ".");
                    }
                    else if (data is WirelessPowerSender)
                    {
                        str = str.Replace("{Explanation}", "Sender is disconnected and non-operational.\n\nBuild a <b>" + FormatColour(WirelessPowerStrings.WirelessPowerBatteryName) + "</b> to make this sender operational.");
                    }
                    else if (data is WirelessPowerReceiver && isConnected)
                    {
                        str = str.Replace("{Explanation}", "Receiver is connected to the " + FormatColour("Wireless Power Grid") + ".");
                    }
                    else if (data is WirelessPowerReceiver)
                    {
                        str = str.Replace("{Explanation}", "Receiver is disconnected and non-operational.\n\nBuild a <b>" + FormatColour(WirelessPowerStrings.WirelessPowerBatteryName) + "</b> to make this receiver operational.");
                    }
                    else if (data is WirelessPowerBattery && isConnected)
                    {
                        str = str.Replace("{Explanation}", "Battery is connected to the " + FormatColour("Wireless Power Grid") + ".");
                    }
                    else if (data is WirelessPowerBattery)
                    {
                        str = str.Replace("{Explanation}", "Battery is disconnected and non-operational.\n\nBuild either a <b>" + FormatColour(WirelessPowerStrings.WirelessPowerReceiverName) + "</b> or <b>" + FormatColour(WirelessPowerStrings.WirelessPowerSenderName) + "</b> to make this battery operational.");
                    }
                }

                return(str);
            });


            Strings.Add(ChannelStatusKey + ".NAME", ChannelStatusName);
            Strings.Add(ChannelStatusKey + ".TOOLTIP", ChannelStatusTooltip);

            WirelessPowerStrings.ChannelStatus = (StatusItem)Traverse.Create(Db.Get().BuildingStatusItems).Method("CreateStatusItem", new object[] {
                "WirelessPower.Channel",
                "BUILDING",
                string.Empty,
                StatusItem.IconType.Info,
                NotificationType.Neutral,
                false,
                OverlayModes.Power.ID,
                true,
                129022
            }).GetValue();

            WirelessPowerStrings.ChannelStatus.resolveStringCallback = (Func <string, object, string>)((str, data) =>
            {
                if ((UnityEngine.Object)data == null || (IWirelessConnecter)data == null)
                {
                    return(str);
                }

                IWirelessConnecter wirelessConnector = (IWirelessConnecter)data;
                int channel = wirelessConnector.Channel;

                if (str.Contains("{Channel}"))
                {
                    str = str.Replace("{Channel}", FormatColour(channel.ToString()));
                }
                else if (str.Contains("{Explanation}"))
                {
                    str = str.Replace("{Explanation}", "This building is currently connected to channel " + FormatColour(channel.ToString()) + " on the " + FormatColour("Wireless Power Grid") + ".");
                }

                return(str);
            });


            Strings.Add(TransferStatusKey + ".NAME", TransferStatusName);
            Strings.Add(TransferStatusKey + ".TOOLTIP", TransferStatusTooltip);

            WirelessPowerStrings.TransferStatus = (StatusItem)Traverse.Create(Db.Get().BuildingStatusItems).Method("CreateStatusItem", new object[] {
                "WirelessPower.Transfer",
                "BUILDING",
                string.Empty,
                StatusItem.IconType.Info,
                NotificationType.Neutral,
                false,
                OverlayModes.Power.ID,
                true,
                129022
            }).GetValue();

            WirelessPowerStrings.TransferStatus.resolveStringCallback = (Func <string, object, string>)((str, data) =>
            {
                if ((UnityEngine.Object)data == null || (IWirelessTransferer)data == null)
                {
                    return(str);
                }

                IWirelessTransferer trans = (IWirelessTransferer)data;

                string setJoules          = GameUtil.GetFormattedWattage(trans.JoulesToTransfer);
                string falloffJoules      = GameUtil.GetFormattedWattage(trans.FalloffJoulesToTransfer);
                string falloffAmount      = !WirelessPowerConfigChecker.UseEnergyFalloff ? FormatColour(falloffJoules, StringColour.Blue) : FormatColour(falloffJoules, StringColour.Blue) + " (" + setJoules + ")";
                string falloffExplanation = !WirelessPowerConfigChecker.UseEnergyFalloff ? "" : ", due to wireless energy falloff,";

                string actualPowerTransfer = trans.IsConnectedToGrid
                                            ? (trans.IsOperational ? FormatColour(falloffJoules, StringColour.Green) : FormatColour("Standby"))
                                            : FormatColour("N/A", StringColour.Red);


                if (data is WirelessPowerSender)
                {
                    if (str.Contains("{Status}"))
                    {
                        str = str.Replace("{Status}", "Sending Power: " + actualPowerTransfer);
                    }
                    else if (str.Contains("{Explanation}") && trans.IsOperational)
                    {
                        str = str.Replace("{Explanation}", "Sender is beaming " + falloffAmount + " of " + FormatColour("Power") + falloffExplanation + " to the " + FormatColour("Wireless Power Grid") + ".");
                    }
                    else if (str.Contains("{Explanation}"))
                    {
                        str = str.Replace("{Explanation}", "Sender is non-operational.\n\nOnce operational: it will send " + falloffAmount + " of " + FormatColour("Power") + falloffExplanation + " from the " + FormatColour("Wireless Power Grid") + ".");
                    }
                }
                else if (data is WirelessPowerReceiver)
                {
                    if (str.Contains("{Status}"))
                    {
                        str = str.Replace("{Status}", "Receiving Power: " + actualPowerTransfer);
                    }
                    else if (data is WirelessPowerReceiver && str.Contains("{Explanation}") && trans.IsOperational)
                    {
                        str = str.Replace("{Explanation}", "Receiver is drawing " + falloffAmount + " of " + FormatColour("Power") + falloffExplanation + " from the " + FormatColour("Wireless Power Grid") + ".");
                    }
                    else if (data is WirelessPowerReceiver && str.Contains("{Explanation}"))
                    {
                        str = str.Replace("{Explanation}", "Receiver is non-operational.\n\nOnce operational: it will draw " + falloffAmount + " of " + FormatColour("Power") + falloffExplanation + " from the " + FormatColour("Wireless Power Grid") + ".");
                    }
                }
                return(str);
            });


            Strings.Add(BatteryCapacityStatusKey + ".NAME", BatteryCapacityStatusName);
            Strings.Add(BatteryCapacityStatusKey + ".TOOLTIP", BatteryCapacityStatusTooltip);

            WirelessPowerStrings.BatteryCapacityStatus = (StatusItem)Traverse.Create(Db.Get().BuildingStatusItems).Method("CreateStatusItem", new object[] {
                "WirelessPower.BatteryCapacity",
                "BUILDING",
                string.Empty,
                StatusItem.IconType.Info,
                NotificationType.Neutral,
                false,
                OverlayModes.Power.ID,
                true,
                129022
            }).GetValue();

            WirelessPowerStrings.BatteryCapacityStatus.resolveStringCallback = (Func <string, object, string>)((str, data) =>
            {
                if ((UnityEngine.Object)data == null || (WirelessPowerBattery)data == null)
                {
                    return(str);
                }

                WirelessPowerBattery bat = (WirelessPowerBattery)data;

                str = str.Replace("{Available}", GameUtil.GetFormattedJoules(bat.JoulesAvailable));
                if (str.Contains("{Percentage}"))
                {
                    str = str.Replace("{Capacity}", GameUtil.GetFormattedJoules(bat.Capacity)).Replace("{Percentage}", "(" + Util.FormatWholeNumber(bat.PercentFull * 100) + "%)");
                    str = str.Split(':')[0] + ":" + FormatColour(str.Split(':')[1]);
                }

                return(str);
            });


            Strings.Add(BatteryNetStatusKey + ".NAME", BatteryNetStatusName);
            Strings.Add(BatteryNetStatusKey + ".TOOLTIP", BatteryNetStatusTooltip);

            WirelessPowerStrings.BatteryNetStatus = (StatusItem)Traverse.Create(Db.Get().BuildingStatusItems).Method("CreateStatusItem", new object[] {
                "WirelessPower.BatteryNet",
                "BUILDING",
                string.Empty,
                StatusItem.IconType.Info,
                NotificationType.Neutral,
                false,
                OverlayModes.Power.ID,
                true,
                129022
            }).GetValue();

            WirelessPowerStrings.BatteryNetStatus.resolveStringCallback = (Func <string, object, string>)((str, data) =>
            {
                if ((UnityEngine.Object)data == null || (WirelessPowerBattery)data == null)
                {
                    return(str);
                }

                WirelessPowerBattery bat = (WirelessPowerBattery)data;
                float net = bat.CalculateNetTotal();
                if (str.Contains("{Last}"))
                {
                    str = str.Replace("{Last}", net >= 0f
                        ? FormatColour(" + " + GameUtil.GetFormattedJoules(net), StringColour.Green)
                        : FormatColour(" - " + GameUtil.GetFormattedJoules(Math.Abs(net)), StringColour.Red));
                }
                return(str);
            });


            Strings.Add(GridStatusKey + ".NAME", GridStatusName);
            Strings.Add(GridStatusKey + ".TOOLTIP", GridStatusTooltip);

            WirelessPowerStrings.GridStatus = (StatusItem)Traverse.Create(Db.Get().BuildingStatusItems).Method("CreateStatusItem", new object[] {
                "WirelessPower.GridStatus",
                "BUILDING",
                string.Empty,
                StatusItem.IconType.Info,
                NotificationType.Neutral,
                false,
                OverlayModes.Power.ID,
                true,
                129022
            }).GetValue();

            WirelessPowerStrings.GridStatus.resolveStringCallback = (Func <string, object, string>)((str, data) =>
            {
                if ((UnityEngine.Object)data == null || (WirelessPowerBattery)data == null)
                {
                    return(str);
                }

                WirelessPowerBattery bat = (WirelessPowerBattery)data;

                if (!bat.IsConnectedToGrid)
                {
                    if (str.Contains("{Status}"))
                    {
                        str = str.Replace("{Status}", FormatColour("Offline", StringColour.Red));
                    }
                    else if (str.Contains("{Explanation}"))
                    {
                        str = str.Replace("{Explanation}", FormatColour("Offline", StringColour.Red)).Replace("{End}", "for this battery");
                    }
                }
                else if (bat.LastSent > 0f && bat.LastReceived > 0f)
                {
                    if (str.Contains("{Status}"))
                    {
                        str = str.Replace("{Status}", FormatColour("Sending & Receiving", StringColour.Green));
                    }
                    else if (str.Contains("{Explanation}"))
                    {
                        str = str.Replace("{Explanation}", "both " + FormatColour("Sending & Receiving", StringColour.Green)).Replace("{End}", "energy to/from this battery");
                    }
                }
                else if (bat.LastSent > 0f)
                {
                    if (str.Contains("{Status}"))
                    {
                        str = str.Replace("{Status}", FormatColour("Sending", StringColour.Green));
                    }
                    else if (str.Contains("{Explanation}"))
                    {
                        str = str.Replace("{Explanation}", FormatColour("Sending", StringColour.Green)).Replace("{End}", "energy to this battery");
                    }
                }
                else if (bat.LastReceived > 0f)
                {
                    if (str.Contains("{Status}"))
                    {
                        str = str.Replace("{Status}", FormatColour("Receiving", StringColour.Green));
                    }
                    else if (str.Contains("{Explanation}"))
                    {
                        str = str.Replace("{Explanation}", FormatColour("Receiving", StringColour.Green)).Replace("{End}", "energy from this battery");
                    }
                }
                else
                {
                    if (str.Contains("{Status}"))
                    {
                        str = str.Replace("{Status}", FormatColour("Standby"));
                    }
                    else if (str.Contains("{Explanation}"))
                    {
                        str = str.Replace("{Explanation}", FormatColour("Standby")).Replace("{End}", "for this battery to be needed");
                    }
                }

                return(str);
            });


            Strings.Add(GridCapacityStatusKey + ".NAME", GridCapacityStatusName);
            Strings.Add(GridCapacityStatusKey + ".TOOLTIP", GridCapacityStatusTooltip);

            WirelessPowerStrings.GridCapacityStatus = (StatusItem)Traverse.Create(Db.Get().BuildingStatusItems).Method("CreateStatusItem", new object[] {
                "WirelessPower.GridCapacity",
                "BUILDING",
                string.Empty,
                StatusItem.IconType.Info,
                NotificationType.Neutral,
                false,
                OverlayModes.Power.ID,
                true,
                129022
            }).GetValue();

            WirelessPowerStrings.GridCapacityStatus.resolveStringCallback = (Func <string, object, string>)((str, data) =>
            {
                if ((UnityEngine.Object)data == null || (IWirelessConnecter)data == null || WirelessPowerGrid.Instance == null)
                {
                    return(str);
                }

                IWirelessConnecter wireless = (IWirelessConnecter)data;

                float channelAvailable = WirelessPowerGrid.Instance.GetChannelJoulesAvailable(wireless.Channel);
                float channelCapacity  = WirelessPowerGrid.Instance.GetChannelCapacity(wireless.Channel);

                str = str.Replace("{Available}", GameUtil.GetFormattedJoules(channelAvailable));
                str = str.Replace("{Capacity}", GameUtil.GetFormattedJoules(channelCapacity));
                if (str.Contains("{Percentage}"))
                {
                    str = str.Replace("{Percentage}", "(" + Util.FormatWholeNumber((channelAvailable / channelCapacity) * 100) + "%)");
                    str = str.Split(':')[0] + ":" + FormatColour(str.Split(':')[1]);
                }

                return(str);
            });
        }