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"); } } }
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) })); } } } }
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()))); } } } }