Skip to content

Commit 4d5475a

Browse files
committed
Merge remote-tracking branch 'darkademic/dev'
2 parents fd6f668 + bdf4787 commit 4d5475a

107 files changed

Lines changed: 1164 additions & 231 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

OpenRA.Mods.CA/Traits/HarvesterBalancer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public HarvesterBalancer(HarvesterBalancerInfo info)
4949

5050
protected override void Created(Actor self)
5151
{
52+
base.Created(self);
5253
movingToResources = true;
5354
unlinkedBuffTicks = Info.UnlinkedDuration;
5455
}

OpenRA.Mods.CA/Traits/Infiltration/InfiltrateToCreateProxyActor.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ void INotifyInfiltrated.Infiltrated(Actor self, Actor infiltrator, BitSet<Target
100100

101101
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self)
102102
{
103+
if (!info.LinkedToParent)
104+
return;
105+
103106
foreach (var a in spawnedActors)
104107
{
105108
if (!a.IsDead)

OpenRA.Mods.CA/Traits/LinkedProducerSource.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ public class LinkedProducerSource : INotifyProduction, INotifyOwnerChanged, INot
2525
{
2626
HashSet<LinkedProducerTarget> linkedProducerTargets = new HashSet<LinkedProducerTarget>();
2727
public IEnumerable<string> ProductionTypes { get; private set; }
28+
public Actor Actor { get; private set; }
2829

2930
public LinkedProducerSource(Actor self, LinkedProducerSourceInfo info)
3031
{
32+
Actor = self;
3133
ProductionTypes = self.Info.TraitInfos<ProductionInfo>().SelectMany(p => p.Produces);
3234
}
3335

OpenRA.Mods.CA/Traits/LinkedProducerTarget.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public class LinkedProducerTarget : ConditionalTrait<ConditionalTraitInfo>, IIss
7272
bool delayUntilNext;
7373

7474
public string[] Types => info.Types;
75+
public LinkedProducerSource Source => linkedProducerSource;
7576

7677
public LinkedProducerTarget(Actor self, LinkedProducerTargetInfo info)
7778
: base(info)

OpenRA.Mods.CA/Traits/MindController.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ public MindController(Actor self, MindControllerInfo info)
164164

165165
protected override void Created(Actor self)
166166
{
167+
base.Created(self);
167168
deployTrait = self.TraitOrDefault<GrantConditionOnDeploy>();
168169
}
169170

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#region Copyright & License Information
2+
/**
3+
* Copyright (c) The OpenRA Combined Arms Developers (see CREDITS).
4+
* This file is part of OpenRA Combined Arms, which is free software.
5+
* It is made available to you under the terms of the GNU General Public License
6+
* as published by the Free Software Foundation, either version 3 of the License,
7+
* or (at your option) any later version. For more information, see COPYING.
8+
*/
9+
#endregion
10+
11+
using OpenRA.Mods.Common.Traits;
12+
13+
namespace OpenRA.Mods.CA.Traits
14+
{
15+
[Desc("Modifies the interval between seeding resources.")]
16+
public class SeedsResourceMultiplierInfo : ConditionalTraitInfo
17+
{
18+
[FieldLoader.Require]
19+
[Desc("Percentage modifier to apply.")]
20+
public readonly int Modifier = 100;
21+
22+
public override object Create(ActorInitializer init) { return new SeedsResourceMultiplier(this); }
23+
}
24+
25+
public class SeedsResourceMultiplier : ConditionalTrait<SeedsResourceMultiplierInfo>, ISeedsResourceIntervalModifier
26+
{
27+
public SeedsResourceMultiplier(SeedsResourceMultiplierInfo info)
28+
: base(info) { }
29+
30+
int ISeedsResourceIntervalModifier.GetModifier() => IsTraitDisabled ? 100 : Info.Modifier;
31+
}
32+
}

OpenRA.Mods.CA/Traits/Player/ProductionTracker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.CA.Traits
1717
public class ProductionTrackerInfo : TraitInfo
1818
{
1919
[Desc("Maximum number of build order items to track.")]
20-
public readonly int MaxBuildOrderItems = 12;
20+
public readonly int MaxBuildOrderItems = 18;
2121

2222
public override object Create(ActorInitializer init) { return new ProductionTracker(init.Self, this); }
2323
}

OpenRA.Mods.CA/Traits/Player/UpgradesManager.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ public class UpgradesManager
2727
{
2828
readonly Actor self;
2929
Dictionary<string, UpgradeInfo> upgrades;
30-
HashSet<string> unlockedUpgradeTypes;
30+
Dictionary<string, int> unlockedUpgradeTypes;
3131

3232
public int Hash { get; private set; }
3333

34-
public HashSet<string> UnlockedUpgradeTypes => unlockedUpgradeTypes;
34+
public Dictionary<string, int> UnlockedUpgradeTypes => unlockedUpgradeTypes;
3535

3636
public UpgradesManager(Actor self, UpgradesManagerInfo info)
3737
{
3838
this.self = self;
3939
upgrades = new Dictionary<string, UpgradeInfo>();
40-
unlockedUpgradeTypes = new HashSet<string>();
40+
unlockedUpgradeTypes = new Dictionary<string, int>();
4141
Hash = 0;
4242
}
4343

@@ -79,23 +79,26 @@ public UpgradeInfo UpgradeableActorCreated(Upgradeable upgradeable, string upgra
7979

8080
public void UpgradeProviderCreated(string type)
8181
{
82-
if (IsUnlocked(type))
83-
return;
82+
if (unlockedUpgradeTypes.ContainsKey(type))
83+
unlockedUpgradeTypes[type]++;
84+
else
85+
unlockedUpgradeTypes.Add(type, 1);
8486

85-
Update();
86-
87-
unlockedUpgradeTypes.Add(type);
88-
var upgradeables = self.World.ActorsWithTrait<Upgradeable>().Where(x => x.Trait.Info.Type == type && x.Actor.Owner == self.Owner).ToList();
87+
if (!IsUnlocked(type))
88+
{
89+
var upgradeables = self.World.ActorsWithTrait<Upgradeable>().Where(x => x.Trait.Info.Type == type && x.Actor.Owner == self.Owner).ToList();
8990

90-
foreach (var p in upgradeables)
91-
p.Trait.Unlock();
91+
foreach (var p in upgradeables)
92+
p.Trait.Unlock();
93+
}
9294

9395
UpgradeCompleted?.Invoke(type);
96+
Update();
9497
}
9598

9699
public bool IsUnlocked(string upgradeType)
97100
{
98-
return unlockedUpgradeTypes.Contains(upgradeType);
101+
return unlockedUpgradeTypes.ContainsKey(upgradeType);
99102
}
100103

101104
int CalculateCost(string sourceActorType, string targetActorType)

OpenRA.Mods.CA/Traits/ProductionQueueFromSelectionCA.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,27 @@ void INotifySelection.SelectionChanged()
5353
.SelectMany(a => a.TraitsImplementing<ProductionQueue>())
5454
.FirstOrDefault(q => q.Enabled);
5555

56+
// Linked producer queue
57+
if (queue == null)
58+
{
59+
queue = world.Selection.Actors
60+
.Where(a => a.IsInWorld && a.World.LocalPlayer == a.Owner)
61+
.SelectMany(a => a.TraitsImplementing<LinkedProducerTarget>())
62+
.Where(t => t.Source?.Actor != null)
63+
.Select(t => t.Source.Actor)
64+
.SelectMany(s => s.TraitsImplementing<ProductionQueue>())
65+
.FirstOrDefault(q => q.Enabled);
66+
}
67+
5668
// Queue-per-player
5769
if (queue == null)
5870
{
5971
var types = world.Selection.Actors.Where(a => a.IsInWorld && a.World.LocalPlayer == a.Owner)
6072
.SelectMany(a => a.TraitsImplementing<Production>().Where(p => !p.IsTraitDisabled))
61-
.SelectMany(t => t.Info.Produces);
73+
.SelectMany(t => t.Info.Produces)
74+
.Concat(world.Selection.Actors.Where(a => a.IsInWorld && a.World.LocalPlayer == a.Owner)
75+
.SelectMany(a => a.TraitsImplementing<LinkedProducerTarget>())
76+
.SelectMany(t => t.Types));
6277

6378
queue = world.LocalPlayer.PlayerActor.TraitsImplementing<ProductionQueue>()
6479
.FirstOrDefault(q => q.Enabled && types.Contains(q.Info.Type));

OpenRA.Mods.CA/Traits/ProvidesUpgrade.cs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#endregion
1010

1111
using OpenRA.Mods.Common.Traits;
12-
using OpenRA.Traits;
1312

1413
namespace OpenRA.Mods.CA.Traits
1514
{
@@ -22,7 +21,7 @@ public class ProvidesUpgradeInfo : ConditionalTraitInfo
2221
public override object Create(ActorInitializer init) { return new ProvidesUpgrade(init.Self, this); }
2322
}
2423

25-
public class ProvidesUpgrade : ConditionalTrait<ProvidesUpgradeInfo>, INotifyCreated
24+
public class ProvidesUpgrade : ConditionalTrait<ProvidesUpgradeInfo>
2625
{
2726
public readonly new ProvidesUpgradeInfo Info;
2827
readonly string type;
@@ -39,16 +38,6 @@ public ProvidesUpgrade(Actor self, ProvidesUpgradeInfo info)
3938
type = self.Info.Name;
4039
}
4140

42-
protected override void Created(Actor self)
43-
{
44-
if (IsTraitDisabled)
45-
return;
46-
47-
upgradesManager.UpgradeProviderCreated(type);
48-
49-
base.Created(self);
50-
}
51-
5241
protected override void TraitEnabled(Actor self)
5342
{
5443
upgradesManager.UpgradeProviderCreated(type);

0 commit comments

Comments
 (0)