public static void AddInventory(Colony colony, ushort type, int amount) { ColonyStatistics stats = Statistics.GetColonyStats(colony); TimedItemStatistics itemStats = stats.GetTimedItemStats(type); itemStats.AddInventory(amount); RemoveConsumerAddProducer(itemStats, ScientistJobSettingsHookOnNPCAtJob.npc, amount); RemoveConsumerAddProducer(itemStats, GuardJobSettingsHookShootAtTarget.npc, amount); RemoveConsumerAddProducer(itemStats, BlockFarmAreaJobHookOnNPCAtJob.npc, amount); RemoveConsumerAddProducer(itemStats, FarmAreaJobHookOnNPCAtJob.npc, amount); RemoveConsumerAddProducer(itemStats, BuilderBasicHookDoJob.npc, amount); RemoveConsumerAddProducer(itemStats, ColonyShopVisitTrackerHookOnVisit.npc, amount); RemoveConsumerAddProducer(itemStats, AbstractAreaJobHookOnNPCAtStockpile.npc, amount); if (ColonyShopVisitTrackerHookOnVisit.isFood) { // wonder if this gets ever called ? It shouldn't though itemStats.UseAsFood(-amount); } if (RuleHookTryExecute.trading) { itemStats.TradeIn(amount); } }
public static void RemoveInventory(Colony colony, ushort type, int amount) { ColonyStatistics stats = Statistics.GetColonyStats(colony); TimedItemStatistics itemStats = stats.GetTimedItemStats(type); itemStats.RemoveInventory(amount); AddConsumerRemoveProducer(itemStats, ScientistJobSettingsHookOnNPCAtJob.npc, amount); AddConsumerRemoveProducer(itemStats, GuardJobSettingsHookShootAtTarget.npc, amount); AddConsumerRemoveProducer(itemStats, BlockFarmAreaJobHookOnNPCAtJob.npc, amount); AddConsumerRemoveProducer(itemStats, FarmAreaJobHookOnNPCAtJob.npc, amount); AddConsumerRemoveProducer(itemStats, BuilderBasicHookDoJob.npc, amount); AddConsumerRemoveProducer(itemStats, ColonyShopVisitTrackerHookOnVisit.npc, amount); AddConsumerRemoveProducer(itemStats, AbstractAreaJobHookOnNPCAtStockpile.npc, amount); if (ColonyShopVisitTrackerHookOnVisit.isFood) { itemStats.UseAsFood(amount); } if (RuleHookTryExecute.trading) { itemStats.TradeOut(amount); } }
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)); } }
public static void RemoveInventory(Colony colony, ushort type, int amount) { DebugLog.Write(MethodBase.GetCurrentMethod().DeclaringType + "::" + MethodBase.GetCurrentMethod().Name, "Type: " + type.ToString() + ", Amount: " + amount.ToString()); ColonyStatistics stats = Statistics.GetColonyStats(colony); TimedItemStatistics itemStats = stats.GetTimedItemStats(type); itemStats.RemoveInventory(amount); AddConsumerRemoveProducer(itemStats, ScientistJobSettingsHookOnNPCAtJob.npc, amount); AddConsumerRemoveProducer(itemStats, GuardJobSettingsHookShootAtTarget.npc, amount); AddConsumerRemoveProducer(itemStats, BlockFarmAreaJobHookOnNPCAtJob.npc, amount); AddConsumerRemoveProducer(itemStats, FarmAreaJobHookOnNPCAtJob.npc, amount); AddConsumerRemoveProducer(itemStats, BuilderBasicHookDoJob.npc, amount); AddConsumerRemoveProducer(itemStats, ColonyShopVisitTrackerHookOnVisit.npc, amount); AddConsumerRemoveProducer(itemStats, AbstractAreaJobHookOnNPCAtStockpile.npc, amount); if (ItemTypes.GetType(type).ColonyPointsMeal > 0) { itemStats.UseAsFood(amount); } if (RuleHookTryExecute.trading) { itemStats.TradeOut(amount); } }
static void RemoveConsumerAddProducer(TimedItemStatistics stats, NPCBase npc, int amount) { if (stats == null || npc == null || amount == 0) { return; } stats.RemoveConsumer(npc.ID); stats.AddProducer(npc.ID); }
public TimedItemStatistics GetTimedItemStats(ushort item) { TimedItemStatistics stats; if (!itemStatistics.TryGetValue(item, out stats)) { stats = new TimedItemStatistics(); itemStatistics.Add(item, stats); } return(stats); }
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); }
public ColonyStatistics() { itemStatistics = new Dictionary <ushort, TimedItemStatistics>(); npcStatistics = new TimedItemStatistics(); }