static void PrintStatistic(ConstructTooltipUIData data, ItemStatistics stat, bool allTime)
        {
            string span;

            if (!allTime)
            {
                span = "Last " + new TimeSpan(TimedItemStatistics.PeriodsToGameHours(stat.Periods), 0, 0).ToHumanReadableString() + " average:";
            }
            else
            {
                span = "Since world load:";
            }

            data.menu.Items.Add(new Line(Color.white, 2, -1, 10, 2));

            data.menu.Items.Add(new Label(new LabelData(span, TextAnchor.MiddleLeft, 17, LabelData.ELocalizationType.Sentence), -1));
            data.menu.Items.Add(new Label(new LabelData("Created " + PrintSingleStat(stat.AverageProduced) + ", Used " + PrintSingleStat(stat.AverageConsumed), TextAnchor.MiddleLeft, 13, LabelData.ELocalizationType.Sentence), -1));
            data.menu.Items.Add(new Label(new LabelData(PrintSingleStat(stat.AverageProducers) + " producers, " + PrintSingleStat(stat.AverageConsumers) + " consumers", TextAnchor.MiddleLeft, 13, LabelData.ELocalizationType.Sentence), -1));
            data.menu.Items.Add(new Label(new LabelData("Stock " + PrintSingleStat(stat.AverageInventoryAdded) + " added, " + PrintSingleStat(stat.AverageInventoryRemoved) + " removed", TextAnchor.MiddleLeft, 13, LabelData.ELocalizationType.Sentence), -1));

            if (stat.TradedIn != 0 || stat.TradedOut != 0)
            {
                data.menu.Items.Add(new Label(new LabelData("Trade +" + PrintSingleStat(stat.AverageTradedIn) + " / -" + PrintSingleStat(stat.AverageTradedOut), TextAnchor.MiddleLeft, 13, LabelData.ELocalizationType.Sentence), -1));
            }

            if (stat.UsedForFood != 0)
            {
                data.menu.Items.Add(new Label(new LabelData("Food Use: " + PrintSingleStat(stat.AverageUsedForFood), TextAnchor.MiddleLeft, 13, LabelData.ELocalizationType.Sentence), -1));
            }
        }
        private static void BuildPlaceableMenu(ConstructTooltipUIData data, ushort item, Dictionary <ushort, int> dict, string sentenceKey)
        {
            if (!dict.ContainsKey(item))
            {
                dict.Add(item, 0);
            }

            data.menu.Items.Add(new HorizontalSplit(new Label(new LabelData(GameInitializer.NAMESPACE + ".inventory." + sentenceKey, UnityEngine.TextAnchor.MiddleLeft, 18, LabelData.ELocalizationType.Sentence)),
                                                    new Label(new LabelData(dict[item].ToString())), 30, 0.75f));
        }
        public void OnConstructTooltipUI(Players.Player player, ConstructTooltipUIData data)
        {
            if (data.hoverType != ETooltipHoverType.Item)
            {
                return;
            }

            TimedItemStatistics stats = GetColonyStats(player.ActiveColony).GetTimedItemStats(data.hoverItem);

            var statlist = stats.Averages();

            foreach (var stat in statlist)
            {
                PrintStatistic(data, stat, false);
            }

            PrintStatistic(data, stats.AllTimeStatistics, true);
        }
        static void ConstructTooltip(ConstructTooltipUIData data)
        {
            if (data.hoverType != Shared.ETooltipHoverType.Item ||
                data.player.ID.type == NetworkID.IDType.Server ||
                data.player.ID.type == NetworkID.IDType.Invalid ||
                !ItemTypes.TryGetType(data.hoverItem, out var item))
            {
                return;
            }

            var ps = PlayerState.GetPlayerState(data.player);
            var cs = ColonyState.GetColonyState(ps.Player.ActiveColony);

            if (ps != null)
            {
                if (item.IsPlaceable)
                {
                    ushort itemId = GetParentId(data.hoverItem, item);

                    BuildPlaceableMenu(data, itemId, ps.ItemsPlaced, "PlayerNumberPlaced");
                    BuildPlaceableMenu(data, itemId, ps.ItemsRemoved, "PlayerNumberRemoved");
                    BuildPlaceableMenu(data, itemId, ps.ItemsInWorld, "PlayerNumberInWorld");
                }
            }

            if (cs != null)
            {
                if (item.IsPlaceable)
                {
                    ushort itemId = GetParentId(data.hoverItem, item);

                    BuildPlaceableMenu(data, itemId, cs.ItemsPlaced, "ColonyNumberPlaced");
                    BuildPlaceableMenu(data, itemId, cs.ItemsRemoved, "ColonyNumberRemoved");
                    BuildPlaceableMenu(data, itemId, cs.ItemsInWorld, "ColonyNumberInWorld");
                }
            }
        }
Exemple #5
0
        static void ConstructTooltip(Players.Player player, ConstructTooltipUIData data)
        {
            ItemTypes.ItemType item = BuiltinBlocks.Types.air;

            if (data.hoverType == Shared.ETooltipHoverType.Item && !ItemTypes.TryGetType(data.hoverItem, out item))
            {
                return;
            }
            else if (data.hoverType == Shared.ETooltipHoverType.PlayerRecipe && !ItemTypes.TryGetType(data.hoverItem, out item))
            {
                return;
            }
            else if (data.hoverType == Shared.ETooltipHoverType.NPCRecipe && !ItemTypes.TryGetType(data.hoverItem, out item))
            {
                return;
            }
            else if (data.hoverType == Shared.ETooltipHoverType.Science && !ItemTypes.TryGetType(data.hoverKey, out item))
            {
                return;
            }
            else if (data.hoverType == Shared.ETooltipHoverType.ScienceCondition && !ItemTypes.TryGetType(data.hoverKey, out item))
            {
                return;
            }
            else if (data.hoverType == Shared.ETooltipHoverType.ScienceUnlock && !ItemTypes.TryGetType(data.hoverKey, out item))
            {
                return;
            }

            if (item == BuiltinBlocks.Types.air)
            {
                return;
            }

            if (player.ActiveColony != null && StockpileMaxStackSize.TryGetValue(player.ActiveColony, out var itemDic) && itemDic.TryGetValue(item.ItemIndex, out var maxSize))
            {
                data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                {
                    (new Label(new LabelData(GameSetup.GetNamespace("Storage.MaxStackSize"))), 200),
                    (new Label(new LabelData(maxSize.ToString())), 60)
                }));
            }

            if (CrateTypes.TryGetValue(item.Name, out var crate))
            {
                data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                {
                    (new Label(new LabelData(GameSetup.GetNamespace("Storage.MaxCrateStackSize"))), 200),
                    (new Label(new LabelData(crate.MaxCrateStackSize.ToString())), 60)
                }));
                data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                {
                    (new Label(new LabelData(GameSetup.GetNamespace("Storage.MaxNumberOfStacks"))), 200),
                    (new Label(new LabelData(crate.MaxNumberOfStacks.ToString())), 60)
                }));
            }

            if (StorageBlockTypes.TryGetValue(item.Name, out var upgrade))
            {
                data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                {
                    (new Label(new LabelData(GameSetup.GetNamespace("Storage.GlobalStorageUpgrade"))), 200),
                    (new Label(new LabelData(upgrade.GlobalStorageUpgrade.ToString())), 60)
                }));


                if (upgrade.CategoryStorageUpgrades.Count > 0)
                {
                    data.menu.Items.Add(new EmptySpace(5));
                    data.menu.Items.Add(new Label(new LabelData(GameSetup.GetNamespace("Storage.CategoryStoreUpgrades"), ELabelAlignment.MiddleCenter, 18)));
                    data.menu.Items.Add(new Line(UnityEngine.Color.white, 3));
                    foreach (var csu in upgrade.CategoryStorageUpgrades)
                    {
                        data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                        {
                            (new Label(new LabelData(csu.Key)), 200),
                            (new Label(new LabelData(csu.Value.ToString())), 60)
                        }));
                    }
                }

                if (upgrade.ItemStorageUpgrades.Count > 0)
                {
                    data.menu.Items.Add(new EmptySpace(5));
                    data.menu.Items.Add(new Label(new LabelData(GameSetup.GetNamespace("Storage.ItemStoreUpgrades"), ELabelAlignment.MiddleCenter, 18)));
                    data.menu.Items.Add(new Line(UnityEngine.Color.white, 3));
                    foreach (var csu in upgrade.ItemStorageUpgrades)
                    {
                        data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                        {
                            (new Label(new LabelData(csu.Key, ELabelAlignment.Default, 16, LabelData.ELocalizationType.Type)), 200),
                            (new Label(new LabelData(csu.Value.ToString())), 60)
                        }));
                    }
                }
            }
        }
Exemple #6
0
        public void OnConstructTooltipUI(Players.Player player, ConstructTooltipUIData data)
        {
            if (data.hoverType == ETooltipHoverType.NetworkUiButton &&
                CommandToolManager.AreaDescriptions.TryGetValue(data.hoverKey, out var toolDescription))
            {
                if (PandaJobFactory.GuardJobsSettings.TryGetValue(toolDescription.NPCTypeKey, out var guardJobSettings))
                {
                    if (NPCType.NPCTypes.TryGetValue(guardJobSettings.NPCType, out var nPCTypeSettings) && nPCTypeSettings is NPCTypeStandardSettings standardSettings)
                    {
                        data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                        {
                            (new Label(new LabelData(GameSetup.GetNamespace("InventorySize"))), 125),
                            (new Label(new LabelData(standardSettings.inventoryCapacity.ToString())), 125)
                        }));
                    }

                    data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                    {
                        (new Label(new LabelData(GameSetup.GetNamespace("Damage"))), 125),
                        (new Label(new LabelData(guardJobSettings.Damage.ToString())), 125)
                    }));
                    data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                    {
                        (new Label(new LabelData(GameSetup.GetNamespace("Range"))), 125),
                        (new Label(new LabelData(guardJobSettings.Range.ToString() + Localization.GetSentence(player.LastKnownLocale, GameSetup.GetNamespace("Blocks")))), 125)
                    }));
                    data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                    {
                        (new Label(new LabelData(GameSetup.GetNamespace("ReloadSpeed"))), 125),
                        (new Label(new LabelData(guardJobSettings.CooldownShot.ToString() + Localization.GetSentence(player.LastKnownLocale, GameSetup.GetNamespace("Seconds")))), 125)
                    }));
                    data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                    {
                        (new Label(new LabelData(GameSetup.GetNamespace("RecruitmentItem"))), 125),
                        (new Label(new LabelData(ItemId.GetItemId(guardJobSettings.RecruitmentItem.Type), ELabelAlignment.Default, 16, LabelData.ELocalizationType.Type)), 125)
                    }));
                }


                if (PandaJobFactory.MineJobsSettings.TryGetValue(toolDescription.NPCTypeKey, out var miningJobSettings))
                {
                    if (miningJobSettings.RecruitmentItem != null && miningJobSettings.RecruitmentItem.Type != ColonyBuiltIn.ItemTypes.AIR)
                    {
                        data.menu.Items.Add(new HorizontalRow(new List <(IItem, int)>()
                        {
                            (new Label(new LabelData(GameSetup.GetNamespace("RecruitmentItem"))), 125),
                            (new Label(new LabelData(ItemId.GetItemId(miningJobSettings.RecruitmentItem.Type), ELabelAlignment.Default, 16, LabelData.ELocalizationType.Type)), 125)
                        }));
                    }

                    if (miningJobSettings.MinableTypes != null && miningJobSettings.MinableTypes.Count != 0)
                    {
                        data.menu.Items.Add(new Label(new LabelData(GameSetup.GetNamespace("MinableTypes"))));

                        StringBuilder buildableTypes = new StringBuilder();
                        var           i = 0;

                        foreach (var item in miningJobSettings.MinableTypes)
                        {
                            i++;
                            buildableTypes.Append(Localization.GetType(player.LastKnownLocale, ItemId.GetItemId(item)));

                            if (i != miningJobSettings.MinableTypes.Count)
                            {
                                buildableTypes.Append(", ");
                            }
                        }

                        data.menu.Items.Add(new Label(new LabelData(buildableTypes.ToString())));
                    }
                }
            }
        }