RenderBeforeWorld/RenderAfterWorld split. still need to sort out which behavior belongs where.
This commit is contained in:
@@ -98,6 +98,13 @@ namespace OpenRA.Graphics
|
||||
Game.Renderer.Device.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height);
|
||||
|
||||
terrainRenderer.Draw(Game.viewport);
|
||||
|
||||
if (Game.controller.orderGenerator != null)
|
||||
Game.controller.orderGenerator.RenderBeforeWorld(world);
|
||||
|
||||
Game.Renderer.SpriteRenderer.Flush();
|
||||
Game.Renderer.LineRenderer.Flush();
|
||||
|
||||
foreach (var image in worldSprites)
|
||||
Game.Renderer.SpriteRenderer.DrawSprite(image.Sprite, image.Pos, image.Palette);
|
||||
uiOverlay.Draw(world);
|
||||
@@ -105,7 +112,7 @@ namespace OpenRA.Graphics
|
||||
DrawBandBox();
|
||||
|
||||
if (Game.controller.orderGenerator != null)
|
||||
Game.controller.orderGenerator.Render(world);
|
||||
Game.controller.orderGenerator.RenderAfterWorld(world);
|
||||
|
||||
if (world.LocalPlayer != null)
|
||||
world.LocalPlayer.Shroud.Draw();
|
||||
|
||||
@@ -40,7 +40,8 @@ namespace OpenRA.Orders
|
||||
}
|
||||
|
||||
public virtual void Tick(World world) { }
|
||||
public void Render(World world) { }
|
||||
public void RenderAfterWorld(World world) { }
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi) { return world.Map.IsInMap(xy) ? cursor : "generic-blocked"; }
|
||||
}
|
||||
|
||||
@@ -14,9 +14,10 @@ namespace OpenRA
|
||||
{
|
||||
public interface IOrderGenerator
|
||||
{
|
||||
IEnumerable<Order> Order( World world, int2 xy, MouseInput mi );
|
||||
void Tick( World world );
|
||||
void Render( World world );
|
||||
string GetCursor( World world, int2 xy, MouseInput mi );
|
||||
IEnumerable<Order> Order(World world, int2 xy, MouseInput mi);
|
||||
void Tick(World world);
|
||||
void RenderBeforeWorld(World world);
|
||||
void RenderAfterWorld(World world);
|
||||
string GetCursor(World world, int2 xy, MouseInput mi);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,11 +61,13 @@ namespace OpenRA.Orders
|
||||
Game.controller.CancelInputMode();
|
||||
}
|
||||
|
||||
public void Render( World world )
|
||||
public void RenderAfterWorld( World world )
|
||||
{
|
||||
world.WorldRenderer.uiOverlay.DrawBuildingGrid( world, Building, BuildingInfo );
|
||||
}
|
||||
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi) { return "default"; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,13 +35,18 @@ namespace OpenRA.Orders
|
||||
|
||||
public void Tick( World world ) {}
|
||||
|
||||
public void Render( World world )
|
||||
public void RenderBeforeWorld(World world)
|
||||
{
|
||||
foreach (var a in Game.controller.selection.Actors)
|
||||
{
|
||||
foreach (var t in a.traits.WithInterface<IRenderSelection>())
|
||||
t.Render(a);
|
||||
}
|
||||
foreach (var t in a.traits.WithInterface<IPreRenderSelection>())
|
||||
t.RenderBeforeWorld(a);
|
||||
}
|
||||
|
||||
public void RenderAfterWorld( World world )
|
||||
{
|
||||
foreach (var a in Game.controller.selection.Actors)
|
||||
foreach (var t in a.traits.WithInterface<IPostRenderSelection>())
|
||||
t.RenderAfterWorld(a);
|
||||
}
|
||||
|
||||
public string GetCursor( World world, int2 xy, MouseInput mi )
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace OpenRA.Traits
|
||||
public virtual object Create(ActorInitializer init) { return new DrawLineToTarget(this); }
|
||||
}
|
||||
|
||||
public class DrawLineToTarget :IRenderSelection
|
||||
public class DrawLineToTarget :IPostRenderSelection
|
||||
{
|
||||
DrawLineToTargetInfo Info;
|
||||
public DrawLineToTarget(DrawLineToTargetInfo info)
|
||||
@@ -44,7 +44,7 @@ namespace OpenRA.Traits
|
||||
this.c = c;
|
||||
}
|
||||
|
||||
public void Render (Actor self)
|
||||
public void RenderAfterWorld (Actor self)
|
||||
{
|
||||
var force = Game.controller.GetModifiers().HasModifier(Modifiers.Alt);
|
||||
if ((lifetime <= 0 || --lifetime <= 0) && !force)
|
||||
|
||||
@@ -23,13 +23,13 @@ namespace OpenRA.Traits
|
||||
public readonly float Radius = 10;
|
||||
}
|
||||
|
||||
public class Selectable : IRenderSelection
|
||||
public class Selectable : IPostRenderSelection
|
||||
{
|
||||
// depends on the order of pips in TraitsInterfaces.cs!
|
||||
static readonly string[] pipStrings = { "pip-empty", "pip-green", "pip-yellow", "pip-red", "pip-gray" };
|
||||
static readonly string[] tagStrings = { "", "tag-fake", "tag-primary" };
|
||||
|
||||
public void Render (Actor self)
|
||||
public void RenderAfterWorld (Actor self)
|
||||
{
|
||||
var bounds = self.GetBounds(true);
|
||||
|
||||
|
||||
@@ -165,7 +165,8 @@ namespace OpenRA.Traits
|
||||
|
||||
public interface IBlocksBullets { }
|
||||
|
||||
public interface IRenderSelection { void Render(Actor self); }
|
||||
public interface IPostRenderSelection { void RenderAfterWorld(Actor self); }
|
||||
public interface IPreRenderSelection { void RenderBeforeWorld(Actor self); }
|
||||
|
||||
public struct Target // a target: either an actor, or a fixed location.
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA
|
||||
public readonly string[] RearmBuildings = { "fix" };
|
||||
}
|
||||
|
||||
class Minelayer : IIssueOrder, IResolveOrder, IOrderCursor, IRenderSelection
|
||||
class Minelayer : IIssueOrder, IResolveOrder, IOrderCursor, IPostRenderSelection
|
||||
{
|
||||
/* [Sync] when sync can cope with arrays! */
|
||||
public int2[] minefield = null;
|
||||
@@ -120,7 +120,7 @@ namespace OpenRA.Mods.RA
|
||||
}
|
||||
|
||||
int2 lastMousePos;
|
||||
public void Render(World world)
|
||||
public void RenderAfterWorld(World world)
|
||||
{
|
||||
var ml = minelayer.traits.Get<Minelayer>();
|
||||
var movement = minelayer.traits.Get<IMove>();
|
||||
@@ -130,10 +130,12 @@ namespace OpenRA.Mods.RA
|
||||
Game.world.WorldRenderer.DrawLocus(Color.Cyan, minefield);
|
||||
}
|
||||
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi) { lastMousePos = xy; return "ability"; } /* todo */
|
||||
}
|
||||
|
||||
public void Render(Actor self)
|
||||
public void RenderAfterWorld(Actor self)
|
||||
{
|
||||
if (self.Owner != self.World.LocalPlayer)
|
||||
return;
|
||||
|
||||
@@ -38,7 +38,8 @@ namespace OpenRA.Mods.RA.Orders
|
||||
}
|
||||
|
||||
public void Tick(World world) { }
|
||||
public void Render(World world) { }
|
||||
public void RenderAfterWorld(World world) { }
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi)
|
||||
{
|
||||
|
||||
@@ -53,7 +53,8 @@ namespace OpenRA.Mods.RA.Orders
|
||||
.Any();
|
||||
}
|
||||
|
||||
public void Render( World world ) {}
|
||||
public void RenderAfterWorld( World world ) {}
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi)
|
||||
{
|
||||
|
||||
@@ -41,7 +41,8 @@ namespace OpenRA.Mods.RA.Orders
|
||||
}
|
||||
|
||||
public void Tick( World world ) {}
|
||||
public void Render( World world ) {}
|
||||
public void RenderAfterWorld( World world ) {}
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi)
|
||||
{
|
||||
|
||||
@@ -36,11 +36,13 @@ namespace OpenRA.Mods.RA.Orders
|
||||
}
|
||||
|
||||
public void Tick( World world ) { }
|
||||
public void Render( World world )
|
||||
public void RenderAfterWorld( World world )
|
||||
{
|
||||
world.WorldRenderer.DrawSelectionBox(self, Color.White);
|
||||
}
|
||||
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi)
|
||||
{
|
||||
if (!world.LocalPlayer.Shroud.IsExplored(xy))
|
||||
|
||||
@@ -14,9 +14,9 @@ using OpenRA.Traits;
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class RenderDetectionCircleInfo : TraitInfo<RenderDetectionCircle> { }
|
||||
class RenderDetectionCircle : IRenderSelection
|
||||
class RenderDetectionCircle : IPostRenderSelection
|
||||
{
|
||||
public void Render(Actor self)
|
||||
public void RenderAfterWorld(Actor self)
|
||||
{
|
||||
if (self.Owner != self.World.LocalPlayer)
|
||||
return;
|
||||
|
||||
@@ -14,9 +14,9 @@ using OpenRA.Traits;
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class RenderRangeCircleInfo : TraitInfo<RenderRangeCircle> { }
|
||||
class RenderRangeCircle : IRenderSelection
|
||||
class RenderRangeCircle : IPostRenderSelection
|
||||
{
|
||||
public void Render(Actor self)
|
||||
public void RenderAfterWorld(Actor self)
|
||||
{
|
||||
if (self.Owner != self.World.LocalPlayer)
|
||||
return;
|
||||
|
||||
@@ -93,7 +93,8 @@ namespace OpenRA.Mods.RA
|
||||
// TODO: Check if the selected unit is still alive
|
||||
}
|
||||
|
||||
public void Render( World world ) { }
|
||||
public void RenderAfterWorld( World world ) { }
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi)
|
||||
{
|
||||
@@ -133,11 +134,13 @@ namespace OpenRA.Mods.RA
|
||||
// TODO: Check if the selected unit is still alive
|
||||
}
|
||||
|
||||
public void Render(World world)
|
||||
public void RenderAfterWorld(World world)
|
||||
{
|
||||
world.WorldRenderer.DrawSelectionBox(self, Color.Red);
|
||||
}
|
||||
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi)
|
||||
{
|
||||
if (!world.LocalPlayer.Shroud.IsExplored(xy))
|
||||
|
||||
@@ -95,7 +95,8 @@ namespace OpenRA.Mods.RA
|
||||
Game.controller.CancelInputMode();
|
||||
}
|
||||
|
||||
public void Render(World world) { }
|
||||
public void RenderAfterWorld(World world) { }
|
||||
public void RenderBeforeWorld(World world) { }
|
||||
|
||||
public string GetCursor(World world, int2 xy, MouseInput mi)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user