diff --git a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs index 876e238474..3e8d2c4aef 100644 --- a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs @@ -125,14 +125,19 @@ namespace OpenRA.Mods.Common.Traits if (bi == null) return 0; + return GetBuildTime(ai); + } + + public override int GetBuildTime(ActorInfo unit) + { if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().FastBuild) return 0; - var time = (int)(ai.GetBuildTime() * Info.BuildSpeed); + var time = (int)(unit.GetBuildTime() * Info.BuildSpeed); if (info.SpeedUp) { - var type = bi.BuildAtProductionType ?? info.Type; + var type = unit.TraitInfo().BuildAtProductionType ?? info.Type; var selfsameProductionsCount = self.World.ActorsWithTrait() .Count(p => p.Actor.Owner == self.Owner && p.Trait.Info.Produces.Contains(type)); diff --git a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs index c0c720bf43..7c4a6678f6 100644 --- a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs @@ -256,9 +256,6 @@ namespace OpenRA.Mods.Common.Traits if (!bi.Queue.Contains(Info.Type)) return; - var cost = unit.HasTraitInfo() ? unit.TraitInfo().Cost : 0; - var time = GetBuildTime(order.TargetString); - // You can't build that if (BuildableItems().All(b => b.Name != order.TargetString)) return; @@ -275,6 +272,9 @@ namespace OpenRA.Mods.Common.Traits return; } + var valued = unit.TraitInfoOrDefault(); + var cost = valued != null ? valued.Cost : 0; + var time = GetBuildTime(unit); var amountToBuild = Math.Min(fromLimit, order.ExtraData); for (var n = 0; n < amountToBuild; n++) { @@ -313,11 +313,15 @@ namespace OpenRA.Mods.Common.Traits if (unit == null || !unit.HasTraitInfo()) return 0; + return GetBuildTime(unit); + } + + public virtual int GetBuildTime(ActorInfo unit) + { if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().FastBuild) return 0; var time = unit.GetBuildTime() * Info.BuildSpeed; - return (int)time; } diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/ProductionTooltipLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/ProductionTooltipLogic.cs index a9afe10719..545c63ea14 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/ProductionTooltipLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/ProductionTooltipLogic.cs @@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic powerIcon.IsVisible = () => power != 0; var lowpower = pm.PowerState != PowerState.Normal; - var time = palette.CurrentQueue == null ? 0 : palette.CurrentQueue.GetBuildTime(actor.Name) + var time = palette.CurrentQueue == null ? 0 : palette.CurrentQueue.GetBuildTime(actor) * (lowpower ? palette.CurrentQueue.Info.LowPowerSlowdown : 1); var timeString = WidgetUtils.FormatTime(time, world.Timestep); timeLabel.GetText = () => timeString;