From 0dac4520add96af6e7eab9a900b0750f817a0d63 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Tue, 8 Sep 2020 19:49:54 +0200 Subject: [PATCH] Add a 'refundableValue' parameter to 'Produce' --- OpenRA.Mods.Cnc/Traits/Buildings/ClonesProducedUnits.cs | 2 +- .../Scripting/Properties/ProductionProperties.cs | 2 +- OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs | 2 +- .../Traits/Player/ClassicParallelProductionQueue.cs | 5 +++-- OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs | 5 +++-- OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs | 6 +++--- OpenRA.Mods.Common/Traits/Production.cs | 6 ++---- OpenRA.Mods.Common/Traits/ProductionFromMapEdge.cs | 2 +- OpenRA.Mods.Common/Traits/ProductionParadrop.cs | 4 ++-- .../Traits/SupportPowers/ProduceActorPower.cs | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/OpenRA.Mods.Cnc/Traits/Buildings/ClonesProducedUnits.cs b/OpenRA.Mods.Cnc/Traits/Buildings/ClonesProducedUnits.cs index da07574a22..22a71e1811 100644 --- a/OpenRA.Mods.Cnc/Traits/Buildings/ClonesProducedUnits.cs +++ b/OpenRA.Mods.Cnc/Traits/Buildings/ClonesProducedUnits.cs @@ -68,7 +68,7 @@ namespace OpenRA.Mods.Cnc.Traits factionInit ?? new FactionInit(BuildableInfo.GetInitialFaction(produced.Info, p.Faction)) }; - if (p.Produce(self, produced.Info, Info.ProductionType, inits)) + if (p.Produce(self, produced.Info, Info.ProductionType, inits, 0)) return; } } diff --git a/OpenRA.Mods.Common/Scripting/Properties/ProductionProperties.cs b/OpenRA.Mods.Common/Scripting/Properties/ProductionProperties.cs index 0577e731af..84fd89bed6 100644 --- a/OpenRA.Mods.Common/Scripting/Properties/ProductionProperties.cs +++ b/OpenRA.Mods.Common/Scripting/Properties/ProductionProperties.cs @@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Scripting new FactionInit(factionVariant ?? BuildableInfo.GetInitialFaction(actorInfo, p.Faction)) }; - if (p.Produce(Self, actorInfo, type, inits)) + if (p.Produce(Self, actorInfo, type, inits, 0)) return true; } diff --git a/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs b/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs index e03af94131..82409c46f8 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs @@ -42,7 +42,7 @@ namespace OpenRA.Mods.Common.Traits public ProductionAirdrop(ActorInitializer init, ProductionAirdropInfo info) : base(init, info) { } - public override bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits) + public override bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits, int refundableValue) { if (IsTraitDisabled || IsTraitPaused) return false; diff --git a/OpenRA.Mods.Common/Traits/Player/ClassicParallelProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ClassicParallelProductionQueue.cs index 04a36854fb..3dd1eff09a 100644 --- a/OpenRA.Mods.Common/Traits/Player/ClassicParallelProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ClassicParallelProductionQueue.cs @@ -175,9 +175,10 @@ namespace OpenRA.Mods.Common.Traits new FactionInit(BuildableInfo.GetInitialFaction(unit, p.Trait.Faction)) }; - if (p.Trait.Produce(p.Actor, unit, type, inits)) + var item = Queue.First(i => i.Done && i.Item == unit.Name); + if (p.Trait.Produce(p.Actor, unit, type, inits, item.TotalCost)) { - EndProduction(Queue.FirstOrDefault(i => i.Done && i.Item == unit.Name)); + EndProduction(item); return true; } } diff --git a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs index 0b24889b5c..b8e1ebf1e3 100644 --- a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs @@ -124,9 +124,10 @@ namespace OpenRA.Mods.Common.Traits new FactionInit(BuildableInfo.GetInitialFaction(unit, p.Trait.Faction)) }; - if (p.Trait.Produce(p.Actor, unit, type, inits)) + var item = Queue.First(i => i.Done && i.Item == unit.Name); + if (p.Trait.Produce(p.Actor, unit, type, inits, item.TotalCost)) { - EndProduction(Queue.FirstOrDefault(i => i.Done && i.Item == unit.Name)); + EndProduction(item); return true; } } diff --git a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs index ea9b19a7b3..2f0766f941 100644 --- a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs @@ -570,10 +570,10 @@ namespace OpenRA.Mods.Common.Traits var bi = unit.TraitInfo(); var type = developerMode.AllTech ? Info.Type : (bi.BuildAtProductionType ?? Info.Type); - - if (!mostLikelyProducerTrait.IsTraitPaused && mostLikelyProducerTrait.Produce(self, unit, type, inits)) + var item = Queue.First(i => i.Done && i.Item == unit.Name); + if (!mostLikelyProducerTrait.IsTraitPaused && mostLikelyProducerTrait.Produce(self, unit, type, inits, item.TotalCost)) { - EndProduction(Queue.FirstOrDefault(i => i.Done && i.Item == unit.Name)); + EndProduction(item); return true; } diff --git a/OpenRA.Mods.Common/Traits/Production.cs b/OpenRA.Mods.Common/Traits/Production.cs index 83c1f5d17c..5521704858 100644 --- a/OpenRA.Mods.Common/Traits/Production.cs +++ b/OpenRA.Mods.Common/Traits/Production.cs @@ -109,18 +109,16 @@ namespace OpenRA.Mods.Common.Traits return SelectExit(self, producee, productionType, e => CanUseExit(self, producee, e.Info)); } - public virtual bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits) + public virtual bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits, int refundableValue) { if (IsTraitDisabled || IsTraitPaused || Reservable.IsReserved(self)) return false; // Pick a spawn/exit point pair var exit = SelectExit(self, producee, productionType); - if (exit != null || self.OccupiesSpace == null || !producee.HasTraitInfo()) { - DoProduction(self, producee, exit == null ? null : exit.Info, productionType, inits); - + DoProduction(self, producee, exit?.Info, productionType, inits); return true; } diff --git a/OpenRA.Mods.Common/Traits/ProductionFromMapEdge.cs b/OpenRA.Mods.Common/Traits/ProductionFromMapEdge.cs index 57139b30df..011d79d5be 100644 --- a/OpenRA.Mods.Common/Traits/ProductionFromMapEdge.cs +++ b/OpenRA.Mods.Common/Traits/ProductionFromMapEdge.cs @@ -44,7 +44,7 @@ namespace OpenRA.Mods.Common.Traits rp = self.TraitOrDefault(); } - public override bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits) + public override bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits, int refundableValue) { if (IsTraitDisabled || IsTraitPaused) return false; diff --git a/OpenRA.Mods.Common/Traits/ProductionParadrop.cs b/OpenRA.Mods.Common/Traits/ProductionParadrop.cs index 27f87a96f5..a5b3edbba2 100644 --- a/OpenRA.Mods.Common/Traits/ProductionParadrop.cs +++ b/OpenRA.Mods.Common/Traits/ProductionParadrop.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits rp = Exts.Lazy(() => init.Self.IsDead ? null : init.Self.TraitOrDefault()); } - public override bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits) + public override bool Produce(Actor self, ActorInfo producee, string productionType, TypeDictionary inits, int refundableValue) { if (IsTraitDisabled || IsTraitPaused) return false; @@ -88,7 +88,7 @@ namespace OpenRA.Mods.Common.Traits foreach (var cargo in self.TraitsImplementing()) cargo.Delivered(self); - self.World.AddFrameEndTask(ww => DoProduction(self, producee, exit == null ? null : exit.Info, productionType, inits)); + self.World.AddFrameEndTask(ww => DoProduction(self, producee, exit?.Info, productionType, inits)); Game.Sound.Play(SoundType.World, info.ChuteSound, self.CenterPosition); Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.ReadyAudio, self.Owner.Faction.InternalName); })); diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/ProduceActorPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/ProduceActorPower.cs index 7747909d36..c7836b2abc 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/ProduceActorPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/ProduceActorPower.cs @@ -83,7 +83,7 @@ namespace OpenRA.Mods.Common.Traits new FactionInit(BuildableInfo.GetInitialFaction(ai, faction)) }; - activated |= p.Trait.Produce(p.Actor, ai, info.Type, inits); + activated |= p.Trait.Produce(p.Actor, ai, info.Type, inits, 0); } if (activated)