diff --git a/OpenRA.Mods.Common/Traits/Render/WithDecoration.cs b/OpenRA.Mods.Common/Traits/Render/WithDecoration.cs index 799508f887..23b41d285a 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithDecoration.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithDecoration.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using OpenRA.Graphics; using OpenRA.Traits; @@ -59,19 +60,24 @@ namespace OpenRA.Mods.Common.Traits [Desc("Should this be visible to enemy players?")] public readonly bool ShowToEnemies = false; + [Desc("Should this be visible only when selected?")] + public readonly bool SelectionDecoration = false; + public override object Create(ActorInitializer init) { return new WithDecoration(init.Self, this); } } - public class WithDecoration : UpgradableTrait, IRender + public class WithDecoration : UpgradableTrait, IRender, IPostRenderSelection { readonly WithDecorationInfo info; readonly string image; readonly Animation anim; + readonly Actor self; public WithDecoration(Actor self, WithDecorationInfo info) : base(info) { this.info = info; + this.self = self; image = info.Image ?? self.Info.Name; anim = new Animation(self.World, image); anim.Paused = () => self.World.Paused; @@ -86,6 +92,16 @@ namespace OpenRA.Mods.Common.Traits public virtual bool ShouldRender(Actor self) { return true; } public IEnumerable Render(Actor self, WorldRenderer wr) + { + return !info.SelectionDecoration ? RenderInner(self, wr, self.Bounds) : Enumerable.Empty(); + } + + public IEnumerable RenderAfterWorld(WorldRenderer wr) + { + return info.SelectionDecoration ? RenderInner(self, wr, self.VisualBounds) : Enumerable.Empty(); + } + + IEnumerable RenderInner(Actor self, WorldRenderer wr, Rectangle actorBounds) { if (IsTraitDisabled) return Enumerable.Empty(); @@ -111,7 +127,6 @@ namespace OpenRA.Mods.Common.Traits return Enumerable.Empty(); var pxPos = wr.ScreenPxPosition(self.CenterPosition); - var actorBounds = self.Bounds; actorBounds.Offset(pxPos.X, pxPos.Y); var img = anim.Image; diff --git a/mods/d2k/bits/primary.shp b/mods/d2k/bits/primary.shp new file mode 100644 index 0000000000..b997a9d136 Binary files /dev/null and b/mods/d2k/bits/primary.shp differ diff --git a/mods/d2k/rules/player.yaml b/mods/d2k/rules/player.yaml index 5b4cee568e..ffec06eb29 100644 --- a/mods/d2k/rules/player.yaml +++ b/mods/d2k/rules/player.yaml @@ -84,4 +84,5 @@ Player: Prerequisites: techlevel.low, techlevel.medium, techlevel.high, techlevel.superweapons EnemyWatcher: HarvesterInsurance: + GlobalUpgradeManager: diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 815a863fad..6ffa3bae67 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -84,6 +84,17 @@ construction_yard: Palette: d2k PrimaryBuilding: ProvidesPrerequisite@buildingname: + GlobalUpgradable: + Prerequisites: upgrade.conyard + Upgrades: stardecoration + WithDecoration@upgraded: + SelectionDecoration: true + Image: pips + Sequence: tag-upgraded + ReferencePoint: Top, Right + ZOffset: 256 + UpgradeTypes: stardecoration + UpgradeMinEnabledLevel: 1 wind_trap: Inherits: ^Building @@ -176,6 +187,17 @@ barracks: atreides: barracks.atreides ordos: barracks.ordos ProvidesPrerequisite@buildingname: + GlobalUpgradable: + Prerequisites: upgrade.barracks + Upgrades: stardecoration + WithDecoration@upgraded: + SelectionDecoration: true + Image: pips + Sequence: tag-upgraded + ReferencePoint: Top, Right + ZOffset: 256 + UpgradeTypes: stardecoration + UpgradeMinEnabledLevel: 1 refinery: Inherits: ^Building @@ -333,6 +355,17 @@ light_factory: Sequence: idle-top Power: Amount: -125 + GlobalUpgradable: + Prerequisites: upgrade.light + Upgrades: stardecoration + WithDecoration@upgraded: + SelectionDecoration: true + Image: pips + Sequence: tag-upgraded + ReferencePoint: Top, Right + ZOffset: 256 + UpgradeTypes: stardecoration + UpgradeMinEnabledLevel: 1 heavy_factory: Inherits: ^Building @@ -395,6 +428,17 @@ heavy_factory: ProvidesPrerequisite@buildingname: SelectionDecorations: VisualBounds: 96,96 + GlobalUpgradable: + Prerequisites: upgrade.heavy + Upgrades: stardecoration + WithDecoration@upgraded: + SelectionDecoration: true + Image: pips + Sequence: tag-upgraded + ReferencePoint: Top, Right + ZOffset: 256 + UpgradeTypes: stardecoration + UpgradeMinEnabledLevel: 1 outpost: Inherits: ^Building @@ -734,6 +778,17 @@ high_tech_factory: Amount: -75 SelectionDecorations: VisualBounds: 96,96 + GlobalUpgradable: + Prerequisites: upgrade.hightech + Upgrades: stardecoration + WithDecoration@upgraded: + SelectionDecoration: true + Image: pips + Sequence: tag-upgraded + ReferencePoint: Top, Right + ZOffset: 256 + UpgradeTypes: stardecoration + UpgradeMinEnabledLevel: 1 research_centre: Inherits: ^Building diff --git a/mods/d2k/sequences/misc.yaml b/mods/d2k/sequences/misc.yaml index 9d844da610..27381d3d54 100644 --- a/mods/d2k/sequences/misc.yaml +++ b/mods/d2k/sequences/misc.yaml @@ -106,12 +106,14 @@ pips: Length: 10 pickup-indicator: DATA.R8 Start: 112 - tag-primary: DATA.R8 - Start: 110 + tag-primary: primary.shp pip-empty: DATA.R8 Start: 15 pip-green: DATA.R8 Start: 16 + tag-upgraded: DATA.R8 + Start: 110 + Offset: -8,-8 clock: idle: clock.shp