Replace IOrderGenerator.RenderBeforeWorld with world-sorted .Render.
Range circles have been moved to RenderAfterWorld for now.
This commit is contained in:
@@ -77,8 +77,11 @@ namespace OpenRA.Graphics
|
|||||||
bounds.TopLeftAsCPos(),
|
bounds.TopLeftAsCPos(),
|
||||||
bounds.BottomRightAsCPos());
|
bounds.BottomRightAsCPos());
|
||||||
|
|
||||||
var worldRenderables = actors.SelectMany(a => a.Render(this))
|
var worldRenderables = actors.SelectMany(a => a.Render(this));
|
||||||
.OrderBy(r => r, comparer);
|
if (world.OrderGenerator != null)
|
||||||
|
worldRenderables = worldRenderables.Concat(world.OrderGenerator.Render(this, world));
|
||||||
|
|
||||||
|
worldRenderables = worldRenderables.OrderBy(r => r, comparer);
|
||||||
|
|
||||||
// Effects are drawn on top of all actors
|
// Effects are drawn on top of all actors
|
||||||
// TODO: Allow effects to be interleaved with actors
|
// TODO: Allow effects to be interleaved with actors
|
||||||
@@ -112,16 +115,8 @@ namespace OpenRA.Graphics
|
|||||||
foreach (var r in a.Trait.RenderAsTerrain(this, a.Actor))
|
foreach (var r in a.Trait.RenderAsTerrain(this, a.Actor))
|
||||||
r.Render(this);
|
r.Render(this);
|
||||||
|
|
||||||
foreach (var a in world.Selection.Actors)
|
|
||||||
if (!a.Destroyed)
|
|
||||||
foreach (var t in a.TraitsImplementing<IPreRenderSelection>())
|
|
||||||
t.RenderBeforeWorld(this, a);
|
|
||||||
|
|
||||||
Game.Renderer.Flush();
|
Game.Renderer.Flush();
|
||||||
|
|
||||||
if (world.OrderGenerator != null)
|
|
||||||
world.OrderGenerator.RenderBeforeWorld(this, world);
|
|
||||||
|
|
||||||
for (var i = 0; i < renderables.Count; i++)
|
for (var i = 0; i < renderables.Count; i++)
|
||||||
renderables[i].Render(this);
|
renderables[i].Render(this);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
@@ -66,7 +66,7 @@ namespace OpenRA.Orders
|
|||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Tick(World world) { }
|
public virtual void Tick(World world) { }
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; }
|
public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA
|
|||||||
{
|
{
|
||||||
IEnumerable<Order> Order(World world, CPos xy, MouseInput mi);
|
IEnumerable<Order> Order(World world, CPos xy, MouseInput mi);
|
||||||
void Tick(World world);
|
void Tick(World world);
|
||||||
void RenderBeforeWorld(WorldRenderer wr, World world);
|
IEnumerable<IRenderable> Render(WorldRenderer wr, World world);
|
||||||
void RenderAfterWorld(WorldRenderer wr, World world);
|
void RenderAfterWorld(WorldRenderer wr, World world);
|
||||||
string GetCursor(World world, CPos xy, MouseInput mi);
|
string GetCursor(World world, CPos xy, MouseInput mi);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace OpenRA.Orders
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(World world) { }
|
public void Tick(World world) { }
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi)
|
public string GetCursor(World world, CPos xy, MouseInput mi)
|
||||||
|
|||||||
@@ -187,7 +187,6 @@ namespace OpenRA.Traits
|
|||||||
public interface IPostRender { void RenderAfterWorld(WorldRenderer wr, Actor self); }
|
public interface IPostRender { void RenderAfterWorld(WorldRenderer wr, Actor self); }
|
||||||
|
|
||||||
public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr); }
|
public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr); }
|
||||||
public interface IPreRenderSelection { void RenderBeforeWorld(WorldRenderer wr, Actor self); }
|
|
||||||
public interface IRenderAsTerrain { IEnumerable<IRenderable> RenderAsTerrain(WorldRenderer wr, Actor self); }
|
public interface IRenderAsTerrain { IEnumerable<IRenderable> RenderAsTerrain(WorldRenderer wr, Actor self); }
|
||||||
public interface IBodyOrientation
|
public interface IBodyOrientation
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA.Buildings
|
|||||||
public object Create(ActorInitializer init) { return new BaseProvider(init.self, this); }
|
public object Create(ActorInitializer init) { return new BaseProvider(init.self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BaseProvider : ITick, IPreRenderSelection, ISelectionBar
|
public class BaseProvider : ITick, IPostRenderSelection, ISelectionBar
|
||||||
{
|
{
|
||||||
public readonly BaseProviderInfo Info;
|
public readonly BaseProviderInfo Info;
|
||||||
DeveloperMode devMode;
|
DeveloperMode devMode;
|
||||||
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA.Buildings
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Range circle
|
// Range circle
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, Actor self)
|
public void RenderAfterWorld(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
// Visible to player and allies
|
// Visible to player and allies
|
||||||
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
|
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
|
||||||
|
|||||||
@@ -143,8 +143,9 @@ namespace OpenRA.Mods.RA
|
|||||||
if (!self.IsInWorld || self.IsDead())
|
if (!self.IsInWorld || self.IsDead())
|
||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
|
public void RenderAfterWorld(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
if (!self.IsInWorld)
|
if (!self.IsInWorld)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
@@ -74,7 +74,7 @@ namespace OpenRA.Mods.RA
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi)
|
public string GetCursor(World world, CPos xy, MouseInput mi)
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ namespace OpenRA.Mods.RA
|
|||||||
}
|
}
|
||||||
|
|
||||||
CPos lastMousePos;
|
CPos lastMousePos;
|
||||||
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world)
|
public void RenderAfterWorld(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
if (!minelayer.IsInWorld)
|
if (!minelayer.IsInWorld)
|
||||||
@@ -138,8 +139,6 @@ namespace OpenRA.Mods.RA
|
|||||||
wr.DrawLocus(Color.Cyan, minefield);
|
wr.DrawLocus(Color.Cyan, minefield);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
|
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi) { lastMousePos = xy; return "ability"; } /* TODO */
|
public string GetCursor(World world, CPos xy, MouseInput mi) { lastMousePos = xy; return "ability"; } /* TODO */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ namespace OpenRA.Mods.RA.Orders
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(World world) {}
|
public void Tick(World world) {}
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) {}
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world)
|
public void RenderAfterWorld(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
var position = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
var position = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var topLeft = position - FootprintUtils.AdjustForBuildingSize(BuildingInfo);
|
var topLeft = position - FootprintUtils.AdjustForBuildingSize(BuildingInfo);
|
||||||
@@ -110,7 +110,10 @@ namespace OpenRA.Mods.RA.Orders
|
|||||||
|
|
||||||
var pal = wr.Palette("terrain");
|
var pal = wr.Palette("terrain");
|
||||||
foreach (var c in cells)
|
foreach (var c in cells)
|
||||||
(c.Value ? buildOk : buildBlocked).DrawAt(c.Key.ToPPos().ToFloat2(), pal);
|
{
|
||||||
|
var tile = c.Value ? buildOk : buildBlocked;
|
||||||
|
tile.DrawAt(wr.ScreenPxPosition(c.Key.CenterPosition) - 0.5f * tile.size, pal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi) { return "default"; }
|
public string GetCursor(World world, CPos xy, MouseInput mi) { return "default"; }
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
@@ -55,8 +55,8 @@ namespace OpenRA.Mods.RA.Orders
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
|
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi)
|
public string GetCursor(World world, CPos xy, MouseInput mi)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
@@ -49,8 +49,8 @@ namespace OpenRA.Mods.RA.Orders
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
|
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi)
|
public string GetCursor(World world, CPos xy, MouseInput mi)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,13 +38,12 @@ namespace OpenRA.Mods.RA.Orders
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Tick( World world ) { }
|
public void Tick( World world ) { }
|
||||||
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld( WorldRenderer wr, World world )
|
public void RenderAfterWorld( WorldRenderer wr, World world )
|
||||||
{
|
{
|
||||||
wr.DrawSelectionBox(self, Color.White);
|
wr.DrawSelectionBox(self, Color.White);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderBeforeWorld( WorldRenderer wr, World world ) { }
|
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi)
|
public string GetCursor(World world, CPos xy, MouseInput mi)
|
||||||
{
|
{
|
||||||
if (!world.LocalPlayer.Shroud.IsExplored(xy))
|
if (!world.LocalPlayer.Shroud.IsExplored(xy))
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (var a in w.ActorsWithTrait<BaseProvider>())
|
foreach (var a in w.ActorsWithTrait<BaseProvider>())
|
||||||
a.Trait.RenderBeforeWorld(wr, a.Actor);
|
a.Trait.RenderAfterWorld(wr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,18 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
class RenderDetectionCircleInfo : TraitInfo<RenderDetectionCircle> { }
|
class RenderDetectionCircleInfo : ITraitInfo
|
||||||
class RenderDetectionCircle : IPreRenderSelection
|
|
||||||
{
|
{
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, Actor self)
|
public object Create(ActorInitializer init) { return new RenderDetectionCircle(init.self); }
|
||||||
|
}
|
||||||
|
|
||||||
|
class RenderDetectionCircle : IPostRenderSelection
|
||||||
|
{
|
||||||
|
Actor self;
|
||||||
|
|
||||||
|
public RenderDetectionCircle(Actor self) { this.self = self; }
|
||||||
|
|
||||||
|
public void RenderAfterWorld(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
if (self.Owner != self.World.LocalPlayer)
|
if (self.Owner != self.World.LocalPlayer)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using OpenRA.Traits;
|
|||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
//todo: remove all the Render*Circle duplication
|
//todo: remove all the Render*Circle duplication
|
||||||
class RenderJammerCircleInfo : TraitInfo<RenderJammerCircle>, IPlaceBuildingDecoration
|
class RenderJammerCircleInfo : ITraitInfo, IPlaceBuildingDecoration
|
||||||
{
|
{
|
||||||
public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
|
public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
|
||||||
{
|
{
|
||||||
@@ -29,13 +29,19 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
foreach (var a in w.ActorsWithTrait<RenderJammerCircle>())
|
foreach (var a in w.ActorsWithTrait<RenderJammerCircle>())
|
||||||
if (a.Actor.Owner == a.Actor.World.LocalPlayer)
|
if (a.Actor.Owner == a.Actor.World.LocalPlayer)
|
||||||
a.Trait.RenderBeforeWorld(wr, a.Actor);
|
a.Trait.RenderAfterWorld(wr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public object Create(ActorInitializer init) { return new RenderJammerCircle(init.self); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RenderJammerCircle : IPreRenderSelection
|
class RenderJammerCircle : IPostRenderSelection
|
||||||
{
|
{
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, Actor self)
|
Actor self;
|
||||||
|
|
||||||
|
public RenderJammerCircle(Actor self) { this.self = self; }
|
||||||
|
|
||||||
|
public void RenderAfterWorld(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
if (self.Owner != self.World.LocalPlayer)
|
if (self.Owner != self.World.LocalPlayer)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA
|
|||||||
void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition);
|
void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
class RenderRangeCircleInfo : TraitInfo<RenderRangeCircle>, IPlaceBuildingDecoration
|
class RenderRangeCircleInfo : ITraitInfo, IPlaceBuildingDecoration
|
||||||
{
|
{
|
||||||
public readonly string RangeCircleType = null;
|
public readonly string RangeCircleType = null;
|
||||||
|
|
||||||
@@ -36,13 +36,19 @@ namespace OpenRA.Mods.RA
|
|||||||
foreach (var a in w.ActorsWithTrait<RenderRangeCircle>())
|
foreach (var a in w.ActorsWithTrait<RenderRangeCircle>())
|
||||||
if (a.Actor.Owner == a.Actor.World.LocalPlayer)
|
if (a.Actor.Owner == a.Actor.World.LocalPlayer)
|
||||||
if (a.Actor.Info.Traits.Get<RenderRangeCircleInfo>().RangeCircleType == RangeCircleType)
|
if (a.Actor.Info.Traits.Get<RenderRangeCircleInfo>().RangeCircleType == RangeCircleType)
|
||||||
a.Trait.RenderBeforeWorld(wr, a.Actor);
|
a.Trait.RenderAfterWorld(wr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public object Create(ActorInitializer init) { return new RenderRangeCircle(init.self); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class RenderRangeCircle : IPreRenderSelection
|
class RenderRangeCircle : IPostRenderSelection
|
||||||
{
|
{
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, Actor self)
|
Actor self;
|
||||||
|
|
||||||
|
public RenderRangeCircle(Actor self) { this.self = self; }
|
||||||
|
|
||||||
|
public void RenderAfterWorld(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
if (self.Owner != self.World.LocalPlayer)
|
if (self.Owner != self.World.LocalPlayer)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
class RenderShroudCircleInfo : TraitInfo<RenderShroudCircle>, IPlaceBuildingDecoration
|
class RenderShroudCircleInfo : ITraitInfo, IPlaceBuildingDecoration
|
||||||
{
|
{
|
||||||
public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
|
public void Render(WorldRenderer wr, World w, ActorInfo ai, WPos centerPosition)
|
||||||
{
|
{
|
||||||
@@ -27,13 +27,19 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
foreach (var a in w.ActorsWithTrait<RenderShroudCircle>())
|
foreach (var a in w.ActorsWithTrait<RenderShroudCircle>())
|
||||||
if (a.Actor.Owner == a.Actor.World.LocalPlayer)
|
if (a.Actor.Owner == a.Actor.World.LocalPlayer)
|
||||||
a.Trait.RenderBeforeWorld(wr, a.Actor);
|
a.Trait.RenderAfterWorld(wr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public object Create(ActorInitializer init) { return new RenderShroudCircle(init.self); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class RenderShroudCircle : IPreRenderSelection
|
class RenderShroudCircle : IPostRenderSelection
|
||||||
{
|
{
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, Actor self)
|
Actor self;
|
||||||
|
|
||||||
|
public RenderShroudCircle(Actor self) { this.self = self; }
|
||||||
|
|
||||||
|
public void RenderAfterWorld(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
if (self.Owner != self.World.LocalPlayer)
|
if (self.Owner != self.World.LocalPlayer)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -140,20 +140,18 @@ namespace OpenRA.Mods.RA
|
|||||||
{
|
{
|
||||||
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var targetUnits = power.UnitsInRange(xy);
|
var targetUnits = power.UnitsInRange(xy);
|
||||||
foreach (var unit in targetUnits) {
|
foreach (var unit in targetUnits)
|
||||||
if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility()) {
|
if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility())
|
||||||
wr.DrawSelectionBox(unit, Color.Red);
|
wr.DrawSelectionBox(unit, Color.Red);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var tiles = world.FindTilesInCircle(xy, range);
|
var tiles = world.FindTilesInCircle(xy, range);
|
||||||
var pal = wr.Palette("terrain");
|
var pal = wr.Palette("terrain");
|
||||||
foreach (var t in tiles)
|
foreach (var t in tiles)
|
||||||
tile.DrawAt(t.ToPPos().ToFloat2(), pal);
|
yield return new SpriteRenderable(tile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi)
|
public string GetCursor(World world, CPos xy, MouseInput mi)
|
||||||
@@ -221,25 +219,23 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world)
|
public void RenderAfterWorld(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
foreach (var unit in power.UnitsInRange(sourceLocation)) {
|
foreach (var unit in power.UnitsInRange(sourceLocation))
|
||||||
if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility()) {
|
if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility())
|
||||||
wr.DrawSelectionBox(unit, Color.Red);
|
wr.DrawSelectionBox(unit, Color.Red);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var pal = wr.Palette("terrain");
|
var pal = wr.Palette("terrain");
|
||||||
|
|
||||||
// Source tiles
|
// Source tiles
|
||||||
foreach (var t in world.FindTilesInCircle(sourceLocation, range))
|
foreach (var t in world.FindTilesInCircle(sourceLocation, range))
|
||||||
sourceTile.DrawAt(t.ToPPos().ToFloat2(), pal);
|
yield return new SpriteRenderable(sourceTile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
|
||||||
|
|
||||||
// Destination tiles
|
// Destination tiles
|
||||||
foreach (var t in world.FindTilesInCircle(xy, range))
|
foreach (var t in world.FindTilesInCircle(xy, range))
|
||||||
sourceTile.DrawAt(t.ToPPos().ToFloat2(), pal);
|
yield return new SpriteRenderable(sourceTile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
|
||||||
|
|
||||||
// Unit previews
|
// Unit previews
|
||||||
foreach (var unit in power.UnitsInRange(sourceLocation))
|
foreach (var unit in power.UnitsInRange(sourceLocation))
|
||||||
@@ -247,7 +243,7 @@ namespace OpenRA.Mods.RA
|
|||||||
var offset = (xy - sourceLocation).ToWVec();
|
var offset = (xy - sourceLocation).ToWVec();
|
||||||
if (manager.self.Owner.Shroud.IsTargetable(unit))
|
if (manager.self.Owner.Shroud.IsTargetable(unit))
|
||||||
foreach (var r in unit.Render(wr))
|
foreach (var r in unit.Render(wr))
|
||||||
r.OffsetBy(offset).Render(wr);
|
yield return r.OffsetBy(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unit tiles
|
// Unit tiles
|
||||||
@@ -259,7 +255,7 @@ namespace OpenRA.Mods.RA
|
|||||||
var canEnter = ((manager.self.Owner.Shroud.IsExplored(targetCell) || manager.self.Owner.HasFogVisibility()) &&
|
var canEnter = ((manager.self.Owner.Shroud.IsExplored(targetCell) || manager.self.Owner.HasFogVisibility()) &&
|
||||||
unit.Trait<Chronoshiftable>().CanChronoshiftTo(unit,targetCell));
|
unit.Trait<Chronoshiftable>().CanChronoshiftTo(unit,targetCell));
|
||||||
var tile = canEnter ? validTile : invalidTile;
|
var tile = canEnter ? validTile : invalidTile;
|
||||||
tile.DrawAt(targetCell.ToPPos().ToFloat2(), pal);
|
yield return new SpriteRenderable(tile, targetCell.CenterPosition, WVec.Zero, -511, pal, 1f, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -276,7 +272,8 @@ namespace OpenRA.Mods.RA
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!canTeleport) {
|
if (!canTeleport)
|
||||||
|
{
|
||||||
// Check the terrain types. This will allow chronoshifts to occur on empty terrain to terrain of
|
// Check the terrain types. This will allow chronoshifts to occur on empty terrain to terrain of
|
||||||
// a similar type. This also keeps the cursor from changing in non-visible property, alerting the
|
// a similar type. This also keeps the cursor from changing in non-visible property, alerting the
|
||||||
// chronoshifter of enemy unit presence
|
// chronoshifter of enemy unit presence
|
||||||
|
|||||||
@@ -95,12 +95,12 @@ namespace OpenRA.Mods.RA
|
|||||||
wr.DrawSelectionBox(unit, Color.Red);
|
wr.DrawSelectionBox(unit, Color.Red);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world)
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
|
||||||
{
|
{
|
||||||
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos);
|
||||||
var pal = wr.Palette("terrain");
|
var pal = wr.Palette("terrain");
|
||||||
foreach (var t in world.FindTilesInCircle(xy, range))
|
foreach (var t in world.FindTilesInCircle(xy, range))
|
||||||
tile.DrawAt(t.ToPPos().ToFloat2(), pal);
|
yield return new SpriteRenderable(tile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi)
|
public string GetCursor(World world, CPos xy, MouseInput mi)
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ namespace OpenRA.Mods.RA
|
|||||||
world.CancelInputMode();
|
world.CancelInputMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderBeforeWorld(WorldRenderer wr, World world) { }
|
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
|
||||||
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
public void RenderAfterWorld(WorldRenderer wr, World world) { }
|
||||||
public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; }
|
public string GetCursor(World world, CPos xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user