Don't require a WorldRenderer to draw non-world-rendering widgets.

This commit is contained in:
Paul Chote
2011-01-19 20:19:15 +13:00
committed by Paul Chote
parent e3c090a201
commit 481cc7807b
38 changed files with 115 additions and 93 deletions

View File

@@ -92,7 +92,14 @@ namespace OpenRA
public static event Action<OrderManager> ConnectionStateChanged = _ => { };
static ConnectionState lastConnectionState = ConnectionState.PreConnecting;
public static int LocalClientId { get { return orderManager.Connection.LocalClientId; } }
// Hacky workaround for orderManager visibility
public static Widget OpenWindow(World world, string widget)
{
return Widget.OpenWindow(widget, new Dictionary<string,object>{{ "world", world }, { "orderManager", orderManager }, { "worldRenderer", worldRenderer }});
}
static void Tick( OrderManager orderManager, Viewport viewPort )
{
if (orderManager.Connection.ConnectionState != lastConnectionState)

View File

@@ -86,7 +86,7 @@ namespace OpenRA.Graphics
renderer.BeginFrame(scrollPosition);
wr.Draw();
Widget.DoDraw( wr );
Widget.DoDraw();
var cursorName = Widget.RootWidget.GetCursorOuter(Viewport.LastMousePos) ?? "default";
new Cursor(cursorName).Draw(wr, (int)cursorFrame, Viewport.LastMousePos + Location);

View File

@@ -77,7 +77,9 @@ namespace OpenRA
{
var attrs = p[ i ].GetCustomAttributes<ParamAttribute>();
if( attrs.Length != 1 ) throw new InvalidOperationException( "ObjectCreator: argument in [UseCtor] doesn't have [Param]" );
a[ i ] = args[ attrs[ 0 ].ParamName ?? p[i].Name ];
var key = attrs[ 0 ].ParamName ?? p[i].Name;
if ( !args.ContainsKey(key) ) throw new InvalidOperationException("ObjectCreator: key `{0}' not found".F(key));
a[ i ] = args[ key ];
}
return ctor.Invoke( a );
}

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Widgets
public readonly string Background = "dialog";
public readonly bool ClickThrough = false;
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
WidgetUtils.DrawPanel(Background, RenderBounds);
}

View File

@@ -84,7 +84,7 @@ namespace OpenRA.Widgets
public override int2 ChildOrigin { get { return RenderOrigin +
((Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0)); } }
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
@@ -114,9 +114,9 @@ namespace OpenRA.Widgets
{
}
public override void DrawInner(WorldRenderer wr)
public override void DrawInner()
{
base.DrawInner(wr);
base.DrawInner();
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
var image = ChromeProvider.GetImage("scrollbar", "down_arrow");

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Widgets
: base(widget) { }
public override Rectangle EventBounds { get { return Rectangle.Empty; } }
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var pos = RenderOrigin;
var chatLogArea = new Rectangle(pos.X, pos.Y, Bounds.Width, Bounds.Height);

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Widgets
this.orderManager = orderManager;
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
if (composing)
{

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Widgets
bool boundReadOnly;
FieldInfo boundField;
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var font = Bold ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var pos = RenderOrigin;

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Widgets
return new ColorBlockWidget(this);
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
WidgetUtils.FillRectWithColor(RenderBounds, GetColor());
}

View File

@@ -38,7 +38,7 @@ namespace OpenRA.Widgets
public override Widget Clone() { return new ImageWidget(this); }
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var name = GetImageName();
var collection = GetImageCollection();

View File

@@ -46,7 +46,7 @@ namespace OpenRA.Widgets
GetBackground = other.GetBackground;
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var bg = GetBackground();

View File

@@ -46,7 +46,7 @@ namespace OpenRA.Widgets
static Sprite UnownedSpawn = null;
static Sprite OwnedSpawn = null;
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
if (UnownedSpawn == null)
UnownedSpawn = ChromeProvider.GetImage("spawnpoints", "unowned");

View File

@@ -19,7 +19,7 @@ namespace OpenRA.Widgets
public PasswordFieldWidget() : base() {}
protected PasswordFieldWidget(PasswordFieldWidget widget) : base(widget) {}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
DrawWithString(new string('*', Text.Length));
}

View File

@@ -19,7 +19,7 @@ namespace OpenRA.Widgets
{
public PerfGraphWidget() : base() { }
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var rect = RenderBounds;
float2 origin = Game.viewport.Location + new float2(rect.Right, rect.Bottom);

View File

@@ -56,8 +56,8 @@ namespace OpenRA.Widgets
base.AddChild(child);
}
public override void DrawInner( WorldRenderer wr ) {}
public override void Draw( WorldRenderer wr )
public override void DrawInner() {}
public override void Draw()
{
if (!IsVisible())
return;
@@ -98,7 +98,7 @@ namespace OpenRA.Widgets
Game.Renderer.EnableScissor(backgroundRect.X + 1, backgroundRect.Y + 1, backgroundRect.Width - 2, backgroundRect.Height - 2);
foreach (var child in Children)
child.Draw( wr );
child.Draw();
Game.Renderer.DisableScissor();
}

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007-2010 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
@@ -101,7 +101,7 @@ namespace OpenRA.Widgets
Text = Text.Replace("\r", "");
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var bg = GetBackground();

View File

@@ -22,13 +22,16 @@ namespace OpenRA.Widgets
public Func<string> GetImage;
public Func<int> GetFrame;
public Func<string> GetPalette;
public ShpImageWidget()
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor]
public ShpImageWidget([ObjectCreator.Param] WorldRenderer worldRenderer)
: base()
{
GetImage = () => { return Image; };
GetFrame = () => { return Frame; };
GetPalette = () => { return Palette; };
GetPalette = () => { return Palette; };
this.worldRenderer = worldRenderer;
}
protected ShpImageWidget(ShpImageWidget other)
@@ -39,7 +42,8 @@ namespace OpenRA.Widgets
Palette = other.Palette;
GetImage = other.GetImage;
GetFrame = other.GetFrame;
GetPalette = other.GetPalette;
GetPalette = other.GetPalette;
worldRenderer = other.worldRenderer;
}
public override Widget Clone() { return new ShpImageWidget(this); }
@@ -48,7 +52,7 @@ namespace OpenRA.Widgets
Sprite sprite = null;
string cachedImage = null;
int cachedFrame= -1;
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var image = GetImage();
var frame = GetFrame();
@@ -60,8 +64,7 @@ namespace OpenRA.Widgets
cachedImage = image;
cachedFrame = frame;
}
Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, wr, palette);
Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, worldRenderer, palette);
}
}
}

View File

@@ -170,7 +170,7 @@ namespace OpenRA.Widgets
}
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
if (!IsVisible())
return;

View File

@@ -201,7 +201,7 @@ namespace OpenRA.Widgets
Game.Renderer.DisableScissor();
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
DrawWithString(Text);
}

View File

@@ -23,7 +23,7 @@ namespace OpenRA.Widgets
IsVisible = () => Game.Settings.Game.MatchTimer;
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var s = WidgetUtils.FormatTime(Game.LocalTick);
var size = Game.Renderer.TitleFont.Measure(s);

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Widgets
public ViewportScrollControllerWidget() : base() { }
protected ViewportScrollControllerWidget(ViewportScrollControllerWidget widget) : base(widget) {}
public override void DrawInner( WorldRenderer wr ) {}
public override void DrawInner() {}
// TODO: ViewportScrollController doesn't support delegate methods for mouse input
public override bool HandleMouseInput(MouseInput mi)

View File

@@ -76,7 +76,7 @@ namespace OpenRA.Widgets
overlaySprite.sheet.Texture.SetData(overlay);
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
if (video == null)
return;

View File

@@ -266,15 +266,15 @@ namespace OpenRA.Widgets
return false;
}
public abstract void DrawInner( WorldRenderer wr );
public abstract void DrawInner();
public virtual void Draw( WorldRenderer wr )
public virtual void Draw()
{
if (IsVisible())
{
DrawInner( wr );
DrawInner();
foreach (var child in Children)
child.Draw( wr );
child.Draw();
}
}
@@ -337,9 +337,9 @@ namespace OpenRA.Widgets
RootWidget.Tick();
}
public static void DoDraw( WorldRenderer wr )
public static void DoDraw()
{
RootWidget.Draw( wr );
RootWidget.Draw();
}
}
@@ -358,7 +358,7 @@ namespace OpenRA.Widgets
GetBackground = other.GetBackground;
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var bg = GetBackground();
if (bg != null)

View File

@@ -20,14 +20,16 @@ namespace OpenRA.Widgets
{
public class WorldInteractionControllerWidget : Widget
{
readonly World world;
readonly World world;
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor]
public WorldInteractionControllerWidget( [ObjectCreator.Param] World world )
public WorldInteractionControllerWidget([ObjectCreator.Param] World world, [ObjectCreator.Param] WorldRenderer worldRenderer)
{
this.world = world;
this.world = world;
this.worldRenderer = worldRenderer;
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var selbox = SelectionBox;
if (selbox == null) return;
@@ -40,9 +42,9 @@ namespace OpenRA.Widgets
Game.Renderer.LineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White);
Game.Renderer.LineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White);
Game.Renderer.LineRenderer.DrawLine(a, a + c, Color.White, Color.White);
foreach (var u in SelectActorsInBox(world, selbox.Value.First, selbox.Value.Second))
wr.DrawSelectionBox(u, Color.Yellow);
worldRenderer.DrawSelectionBox(u, Color.Yellow);
}
float2 dragStart, dragEnd;

View File

@@ -117,12 +117,6 @@ namespace OpenRA
foreach (var wlh in WorldActor.TraitsImplementing<IWorldLoaded>())
wlh.WorldLoaded(this);
}
// Hacky workaround for orderManager visibility
public Widget OpenWindow(string widget)
{
return Widget.OpenWindow(widget, new Dictionary<string,object>{{"world", this}, { "orderManager", orderManager }});
}
public Actor CreateActor( string name, TypeDictionary initDict )
{