Convert PrimaryBuilding to conditions.
This commit is contained in:
@@ -26,10 +26,11 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Desc("Used together with ClassicProductionQueue.")]
|
[Desc("Used together with ClassicProductionQueue.")]
|
||||||
public class PrimaryBuildingInfo : ITraitInfo, Requires<UpgradeManagerInfo>
|
public class PrimaryBuildingInfo : ITraitInfo
|
||||||
{
|
{
|
||||||
[UpgradeGrantedReference, Desc("The upgrades to grant while the primary building.")]
|
[UpgradeGrantedReference]
|
||||||
public readonly string[] Upgrades = { "primary" };
|
[Desc("The condition to grant to self while this is the primary building.")]
|
||||||
|
public readonly string PrimaryCondition = null;
|
||||||
|
|
||||||
[Desc("The speech notification to play when selecting a primary building.")]
|
[Desc("The speech notification to play when selecting a primary building.")]
|
||||||
public readonly string SelectionNotification = "PrimaryBuildingSelected";
|
public readonly string SelectionNotification = "PrimaryBuildingSelected";
|
||||||
@@ -37,25 +38,30 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public object Create(ActorInitializer init) { return new PrimaryBuilding(init.Self, this); }
|
public object Create(ActorInitializer init) { return new PrimaryBuilding(init.Self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PrimaryBuilding : IIssueOrder, IResolveOrder
|
public class PrimaryBuilding : INotifyCreated, IIssueOrder, IResolveOrder
|
||||||
{
|
{
|
||||||
readonly PrimaryBuildingInfo info;
|
readonly PrimaryBuildingInfo info;
|
||||||
readonly UpgradeManager manager;
|
UpgradeManager um;
|
||||||
|
int primaryToken = UpgradeManager.InvalidConditionToken;
|
||||||
|
|
||||||
public bool IsPrimary { get; private set; }
|
public bool IsPrimary { get; private set; }
|
||||||
|
|
||||||
public PrimaryBuilding(Actor self, PrimaryBuildingInfo info)
|
public PrimaryBuilding(Actor self, PrimaryBuildingInfo info)
|
||||||
{
|
{
|
||||||
this.info = info;
|
this.info = info;
|
||||||
manager = self.Trait<UpgradeManager>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IOrderTargeter> Orders
|
void INotifyCreated.Created(Actor self)
|
||||||
|
{
|
||||||
|
um = self.TraitOrDefault<UpgradeManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerable<IOrderTargeter> IIssueOrder.Orders
|
||||||
{
|
{
|
||||||
get { yield return new DeployOrderTargeter("PrimaryProducer", 1); }
|
get { yield return new DeployOrderTargeter("PrimaryProducer", 1); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
|
||||||
{
|
{
|
||||||
if (order.OrderID == "PrimaryProducer")
|
if (order.OrderID == "PrimaryProducer")
|
||||||
return new Order(order.OrderID, self, false);
|
return new Order(order.OrderID, self, false);
|
||||||
@@ -63,41 +69,39 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResolveOrder(Actor self, Order order)
|
void IResolveOrder.ResolveOrder(Actor self, Order order)
|
||||||
{
|
{
|
||||||
if (order.OrderString == "PrimaryProducer")
|
if (order.OrderString == "PrimaryProducer")
|
||||||
SetPrimaryProducer(self, !IsPrimary);
|
SetPrimaryProducer(self, !IsPrimary);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetPrimaryProducer(Actor self, bool state)
|
public void SetPrimaryProducer(Actor self, bool isPrimary)
|
||||||
{
|
{
|
||||||
if (state == false)
|
IsPrimary = isPrimary;
|
||||||
{
|
|
||||||
IsPrimary = false;
|
|
||||||
foreach (var up in info.Upgrades)
|
|
||||||
manager.RevokeUpgrade(self, up, this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: THIS IS SHIT
|
if (isPrimary)
|
||||||
|
{
|
||||||
// Cancel existing primaries
|
// Cancel existing primaries
|
||||||
|
// TODO: THIS IS SHIT
|
||||||
foreach (var p in self.Info.TraitInfo<ProductionInfo>().Produces)
|
foreach (var p in self.Info.TraitInfo<ProductionInfo>().Produces)
|
||||||
{
|
{
|
||||||
var productionType = p; // benign closure hazard
|
|
||||||
foreach (var b in self.World
|
foreach (var b in self.World
|
||||||
.ActorsWithTrait<PrimaryBuilding>()
|
.ActorsWithTrait<PrimaryBuilding>()
|
||||||
.Where(a =>
|
.Where(a =>
|
||||||
|
a.Actor != self &&
|
||||||
a.Actor.Owner == self.Owner &&
|
a.Actor.Owner == self.Owner &&
|
||||||
a.Trait.IsPrimary &&
|
a.Trait.IsPrimary &&
|
||||||
a.Actor.Info.TraitInfo<ProductionInfo>().Produces.Contains(productionType)))
|
a.Actor.Info.TraitInfo<ProductionInfo>().Produces.Contains(p)))
|
||||||
b.Trait.SetPrimaryProducer(b.Actor, false);
|
b.Trait.SetPrimaryProducer(b.Actor, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
IsPrimary = true;
|
if (um != null && primaryToken == UpgradeManager.InvalidConditionToken && !string.IsNullOrEmpty(info.PrimaryCondition))
|
||||||
foreach (var up in info.Upgrades)
|
primaryToken = um.GrantCondition(self, info.PrimaryCondition);
|
||||||
manager.GrantUpgrade(self, up, this);
|
|
||||||
|
|
||||||
Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.SelectionNotification, self.Owner.Faction.InternalName);
|
Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.SelectionNotification, self.Owner.Faction.InternalName);
|
||||||
}
|
}
|
||||||
|
else if (primaryToken != UpgradeManager.InvalidConditionToken)
|
||||||
|
primaryToken = um.RevokeCondition(self, primaryToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -610,6 +610,13 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
if (!node.Value.Nodes.Any(n => n.Key == "ParachutingCondition"))
|
if (!node.Value.Nodes.Any(n => n.Key == "ParachutingCondition"))
|
||||||
node.Value.Nodes.Add(new MiniYamlNode("ParachutingCondition", "parachute"));
|
node.Value.Nodes.Add(new MiniYamlNode("ParachutingCondition", "parachute"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (node.Key == "PrimaryBuilding")
|
||||||
|
{
|
||||||
|
ConvertUpgradesToCondition(parent, node, "Upgrades", "PrimaryCondition");
|
||||||
|
if (!node.Value.Nodes.Any(n => n.Key == "PrimaryCondition"))
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("PrimaryCondition", "primary"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
|
UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ construction_yard:
|
|||||||
WithBuildingPlacedOverlay:
|
WithBuildingPlacedOverlay:
|
||||||
Palette: d2k
|
Palette: d2k
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProvidesPrerequisite@buildingname:
|
ProvidesPrerequisite@buildingname:
|
||||||
GlobalUpgradable:
|
GlobalUpgradable:
|
||||||
Prerequisites: upgrade.conyard
|
Prerequisites: upgrade.conyard
|
||||||
@@ -181,6 +182,7 @@ barracks:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Infantry
|
Produces: Infantry
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
ProvidesPrerequisite@atreides:
|
ProvidesPrerequisite@atreides:
|
||||||
Prerequisite: barracks.atreides
|
Prerequisite: barracks.atreides
|
||||||
@@ -360,6 +362,7 @@ light_factory:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Vehicle
|
Produces: Vehicle
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
ProvidesPrerequisite@atreides:
|
ProvidesPrerequisite@atreides:
|
||||||
Prerequisite: light.atreides
|
Prerequisite: light.atreides
|
||||||
@@ -430,6 +433,7 @@ heavy_factory:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Armor
|
Produces: Armor
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
ProvidesPrerequisite@atreides:
|
ProvidesPrerequisite@atreides:
|
||||||
Prerequisite: heavy.atreides
|
Prerequisite: heavy.atreides
|
||||||
@@ -567,6 +571,7 @@ starport:
|
|||||||
Palette: starportlights
|
Palette: starportlights
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
RequiresPower:
|
RequiresPower:
|
||||||
CanPowerDown:
|
CanPowerDown:
|
||||||
PowerupSound: EnablePower
|
PowerupSound: EnablePower
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ SPEN:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Ship, Submarine
|
Produces: Ship, Submarine
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
-EmitInfantryOnSell:
|
-EmitInfantryOnSell:
|
||||||
RepairsUnits:
|
RepairsUnits:
|
||||||
FinishRepairingNotification: UnitRepaired
|
FinishRepairingNotification: UnitRepaired
|
||||||
@@ -223,6 +224,7 @@ SYRD:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Ship, Boat
|
Produces: Ship, Boat
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
-EmitInfantryOnSell:
|
-EmitInfantryOnSell:
|
||||||
RepairsUnits:
|
RepairsUnits:
|
||||||
FinishRepairingNotification: UnitRepaired
|
FinishRepairingNotification: UnitRepaired
|
||||||
@@ -854,6 +856,7 @@ WEAP:
|
|||||||
RequiresPrerequisites: structures.ukraine
|
RequiresPrerequisites: structures.ukraine
|
||||||
Prerequisite: vehicles.ukraine
|
Prerequisite: vehicles.ukraine
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
Power:
|
Power:
|
||||||
Amount: -30
|
Amount: -30
|
||||||
@@ -1060,6 +1063,7 @@ HPAD:
|
|||||||
Reservable:
|
Reservable:
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
Power:
|
Power:
|
||||||
Amount: -10
|
Amount: -10
|
||||||
ProvidesPrerequisite@allies:
|
ProvidesPrerequisite@allies:
|
||||||
@@ -1206,6 +1210,7 @@ AFLD:
|
|||||||
ProductionBar:
|
ProductionBar:
|
||||||
SupportPowerChargeBar:
|
SupportPowerChargeBar:
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
Power:
|
Power:
|
||||||
Amount: -20
|
Amount: -20
|
||||||
ProvidesPrerequisite@buildingname:
|
ProvidesPrerequisite@buildingname:
|
||||||
@@ -1354,6 +1359,7 @@ BARR:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Infantry, Soldier
|
Produces: Infantry, Soldier
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
ProvidesPrerequisite:
|
ProvidesPrerequisite:
|
||||||
Prerequisite: barracks
|
Prerequisite: barracks
|
||||||
@@ -1428,6 +1434,7 @@ KENN:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Infantry, Dog
|
Produces: Infantry, Dog
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
-EmitInfantryOnSell:
|
-EmitInfantryOnSell:
|
||||||
Power:
|
Power:
|
||||||
@@ -1472,6 +1479,7 @@ TENT:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Infantry, Soldier
|
Produces: Infantry, Soldier
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
ProvidesPrerequisite@barracks:
|
ProvidesPrerequisite@barracks:
|
||||||
Prerequisite: barracks
|
Prerequisite: barracks
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ GAPILE:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Infantry
|
Produces: Infantry
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
WithProductionOverlay@LIGHTS:
|
WithProductionOverlay@LIGHTS:
|
||||||
Sequence: production-lights
|
Sequence: production-lights
|
||||||
@@ -153,6 +154,7 @@ GAWEAP:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Vehicle
|
Produces: Vehicle
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
WithIdleOverlay@ROOF:
|
WithIdleOverlay@ROOF:
|
||||||
Sequence: idle-roof
|
Sequence: idle-roof
|
||||||
@@ -206,6 +208,7 @@ GAHPAD:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Air
|
Produces: Air
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
Reservable:
|
Reservable:
|
||||||
RepairsUnits:
|
RepairsUnits:
|
||||||
PlayerExperience: 15
|
PlayerExperience: 15
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ NAHAND:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Infantry
|
Produces: Infantry
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
WithIdleOverlay@LIGHTS:
|
WithIdleOverlay@LIGHTS:
|
||||||
Sequence: idle-lights
|
Sequence: idle-lights
|
||||||
@@ -167,6 +168,7 @@ NAWEAP:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Vehicle
|
Produces: Vehicle
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
ProductionBar:
|
ProductionBar:
|
||||||
WithIdleOverlay@ROOF:
|
WithIdleOverlay@ROOF:
|
||||||
Sequence: idle-roof
|
Sequence: idle-roof
|
||||||
@@ -216,6 +218,7 @@ NAHPAD:
|
|||||||
Production:
|
Production:
|
||||||
Produces: Air
|
Produces: Air
|
||||||
PrimaryBuilding:
|
PrimaryBuilding:
|
||||||
|
PrimaryCondition: primary
|
||||||
Reservable:
|
Reservable:
|
||||||
RepairsUnits:
|
RepairsUnits:
|
||||||
PlayerExperience: 15
|
PlayerExperience: 15
|
||||||
|
|||||||
Reference in New Issue
Block a user