Pushed down the MouseInput handling to the OrderGenerators and made a base class for handling the basic logic

This commit is contained in:
teinarss
2019-03-30 20:07:11 +01:00
committed by reaperrr
parent 9ec8d25dff
commit 1dd90a1d7b
13 changed files with 120 additions and 77 deletions

View File

@@ -155,7 +155,7 @@ namespace OpenRA.Mods.Cnc.Traits
bool IRenderAboveShroudWhenSelected.SpatiallyPartitionable { get { return false; } }
class MinefieldOrderGenerator : IOrderGenerator
class MinefieldOrderGenerator : OrderGenerator
{
readonly List<Actor> minelayers;
readonly Sprite tileOk;
@@ -179,7 +179,7 @@ namespace OpenRA.Mods.Cnc.Traits
minelayers.Add(a);
}
public IEnumerable<Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override IEnumerable<Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
if (mi.Button == Game.Settings.Game.MouseButtonPreference.Cancel)
{
@@ -201,15 +201,15 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
public void Tick(World world)
protected override void Tick(World world)
{
minelayers.RemoveAll(minelayer => !minelayer.IsInWorld || minelayer.IsDead);
if (!minelayers.Any())
world.CancelInputMode();
}
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
protected override IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
{
var minelayer = minelayers.FirstOrDefault(m => m.IsInWorld && !m.IsDead);
if (minelayer == null)
@@ -230,7 +230,7 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
return "ability";
}

View File

@@ -180,7 +180,7 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
class PortableChronoOrderGenerator : IOrderGenerator
class PortableChronoOrderGenerator : OrderGenerator
{
readonly Actor self;
readonly PortableChronoInfo info;
@@ -191,7 +191,7 @@ namespace OpenRA.Mods.Cnc.Traits
this.info = info;
}
public IEnumerable<Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override IEnumerable<Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
if (mi.Button == Game.Settings.Game.MouseButtonPreference.Cancel)
{
@@ -207,18 +207,18 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
public void Tick(World world)
protected override void Tick(World world)
{
if (!self.IsInWorld || self.IsDead)
world.CancelInputMode();
}
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{
yield break;
}
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
{
if (!self.IsInWorld || self.Owner != self.World.LocalPlayer)
yield break;
@@ -234,7 +234,7 @@ namespace OpenRA.Mods.Cnc.Traits
Color.FromArgb(96, Color.Black));
}
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
if (self.IsInWorld && self.Location != cell
&& self.Trait<PortableChrono>().CanTeleport && self.Owner.Shroud.IsExplored(cell))

View File

@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Graphics;
using OpenRA.Mods.Common.Orders;
using OpenRA.Mods.Common.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
@@ -61,7 +62,7 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
public class SelectAttackPowerTarget : IOrderGenerator
public class SelectAttackPowerTarget : OrderGenerator
{
readonly SupportPowerManager manager;
readonly SupportPowerInstance instance;
@@ -94,7 +95,7 @@ namespace OpenRA.Mods.Cnc.Traits
return world.Map.Contains(cell) && instance.Instances.Any(a => !a.IsTraitPaused && (a.Self.CenterPosition - pos).HorizontalLengthSquared < range);
}
IEnumerable<Order> IOrderGenerator.Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override IEnumerable<Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
world.CancelInputMode();
if (mi.Button == expectedButton && IsValidTarget(world, cell))
@@ -104,16 +105,16 @@ namespace OpenRA.Mods.Cnc.Traits
};
}
void IOrderGenerator.Tick(World world)
protected override void Tick(World world)
{
// Cancel the OG if we can't use the power
if (!manager.Powers.ContainsKey(order))
world.CancelInputMode();
}
IEnumerable<IRenderable> IOrderGenerator.Render(WorldRenderer wr, World world) { yield break; }
protected override IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
IEnumerable<IRenderable> IOrderGenerator.RenderAboveShroud(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
{
foreach (var a in instance.Instances.Where(i => !i.IsTraitPaused))
{
@@ -133,7 +134,7 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
string IOrderGenerator.GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
return IsValidTarget(world, cell) ? cursor : cursorBlocked;
}

View File

@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Graphics;
using OpenRA.Mods.Common.Orders;
using OpenRA.Mods.Common.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
@@ -120,7 +121,7 @@ namespace OpenRA.Mods.Cnc.Traits
return true;
}
class SelectChronoshiftTarget : IOrderGenerator
class SelectChronoshiftTarget : OrderGenerator
{
readonly ChronoshiftPower power;
readonly int range;
@@ -143,7 +144,7 @@ namespace OpenRA.Mods.Cnc.Traits
tile = world.Map.Rules.Sequences.GetSequence(info.OverlaySpriteGroup, info.SourceTileSequence).GetSprite(0);
}
public IEnumerable<Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override IEnumerable<Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
world.CancelInputMode();
if (mi.Button == MouseButton.Left)
@@ -152,14 +153,14 @@ namespace OpenRA.Mods.Cnc.Traits
yield break;
}
public void Tick(World world)
protected override void Tick(World world)
{
// Cancel the OG if we can't use the power
if (!manager.Powers.ContainsKey(order))
world.CancelInputMode();
}
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
{
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var targetUnits = power.UnitsInRange(xy).Where(a => !world.FogObscures(a));
@@ -174,7 +175,7 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var tiles = world.Map.FindTilesInCircle(xy, range);
@@ -183,13 +184,13 @@ namespace OpenRA.Mods.Cnc.Traits
yield return new SpriteRenderable(tile, wr.World.Map.CenterOfCell(t), WVec.Zero, -511, palette, 1f, true);
}
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
return ((ChronoshiftPowerInfo)power.Info).SelectionCursor;
}
}
class SelectDestination : IOrderGenerator
class SelectDestination : OrderGenerator
{
readonly ChronoshiftPower power;
readonly CPos sourceLocation;
@@ -214,7 +215,7 @@ namespace OpenRA.Mods.Cnc.Traits
sourceTile = world.Map.Rules.Sequences.GetSequence(info.OverlaySpriteGroup, info.SourceTileSequence).GetSprite(0);
}
public IEnumerable<Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override IEnumerable<Order> OrderInner(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
if (mi.Button == MouseButton.Right)
{
@@ -241,14 +242,14 @@ namespace OpenRA.Mods.Cnc.Traits
};
}
public void Tick(World world)
protected override void Tick(World world)
{
// Cancel the OG if we can't use the power
if (!manager.Powers.ContainsKey(order))
world.CancelInputMode();
}
public IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> RenderAboveShroud(WorldRenderer wr, World world)
{
var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var palette = wr.Palette(power.Info.IconPalette);
@@ -289,7 +290,7 @@ namespace OpenRA.Mods.Cnc.Traits
}
}
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
protected override IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{
var palette = wr.Palette(power.Info.IconPalette);
@@ -322,7 +323,7 @@ namespace OpenRA.Mods.Cnc.Traits
return canTeleport;
}
public string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
protected override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
var powerInfo = (ChronoshiftPowerInfo)power.Info;
return IsValidTarget(cell) ? powerInfo.TargetCursor : powerInfo.TargetBlockedCursor;