From ce49d5df5e2065a9747e3d19cc94534bec25dff4 Mon Sep 17 00:00:00 2001 From: Pizzaoverhead Date: Thu, 6 Mar 2014 19:15:00 +0000 Subject: [PATCH] Display an "outside range" cursor for attacks. --- OpenRA.Mods.RA/Attack/AttackBase.cs | 15 +++++++++++++-- mods/d2k/cursors.yaml | 10 ++++++++++ mods/ra/cursors.yaml | 6 ++++++ mods/ts/cursors.yaml | 6 ++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Attack/AttackBase.cs b/OpenRA.Mods.RA/Attack/AttackBase.cs index edede38566..1ef88832f4 100644 --- a/OpenRA.Mods.RA/Attack/AttackBase.cs +++ b/OpenRA.Mods.RA/Attack/AttackBase.cs @@ -20,6 +20,7 @@ namespace OpenRA.Mods.RA public abstract class AttackBaseInfo : ITraitInfo { public readonly string Cursor = "attack"; + public readonly string OutsideRangeCursor = "attackoutsiderange"; public abstract object Create(ActorInitializer init); } @@ -188,7 +189,10 @@ namespace OpenRA.Mods.RA { IsQueued = modifiers.HasModifier(TargetModifiers.ForceQueue); - cursor = ab.info.Cursor; + var a = ab.ChooseArmamentForTarget(target); + cursor = a != null && !target.IsInRange(self.CenterPosition, a.Weapon.Range) + ? ab.info.OutsideRangeCursor + : ab.info.Cursor; if (target.Type == TargetType.Actor && target.Actor == self) return false; @@ -220,11 +224,18 @@ namespace OpenRA.Mods.RA if (negativeDamage) return false; - if (!self.Trait().HasAnyValidWeapons(Target.FromCell(location))) + if (!ab.HasAnyValidWeapons(Target.FromCell(location))) return false; if (modifiers.HasModifier(TargetModifiers.ForceAttack)) + { + var maxRange = ab.GetMaximumRange().Range; + var targetRange = (location.CenterPosition - self.CenterPosition).HorizontalLengthSquared; + if (targetRange > maxRange * maxRange) + cursor = ab.info.OutsideRangeCursor; + return true; + } return false; } diff --git a/mods/d2k/cursors.yaml b/mods/d2k/cursors.yaml index 758cd367ec..604cac5eae 100644 --- a/mods/d2k/cursors.yaml +++ b/mods/d2k/cursors.yaml @@ -119,6 +119,16 @@ Cursors: length: 8 x: 24 y: 24 + attackoutsiderange: + start:16 + length: 8 + x: 24 + y: 24 + attackoutsiderange-minimap: + start:16 + length: 8 + x: 24 + y: 24 attackmove: start:16 length: 8 diff --git a/mods/ra/cursors.yaml b/mods/ra/cursors.yaml index 0d73983068..3b874f6dc4 100644 --- a/mods/ra/cursors.yaml +++ b/mods/ra/cursors.yaml @@ -70,6 +70,12 @@ Cursors: attack-minimap: start:203 length: 8 + attackoutsiderange: + start:21 + length: 8 + attackoutsiderange-minimap: + start:134 + length: 8 harvest: start:21 length: 8 diff --git a/mods/ts/cursors.yaml b/mods/ts/cursors.yaml index dcd50bde72..8693ba203c 100644 --- a/mods/ts/cursors.yaml +++ b/mods/ts/cursors.yaml @@ -72,6 +72,12 @@ Cursors: attack-minimap: start: 63 length: 5 + attackoutsiderange: + start: 58 + length: 5 + attackoutsiderange-minimap: + start: 63 + length: 5 attackmove: #TODO start: 58 length: 5