pass WorldRenderer to Widget.Draw, DrawInner

This commit is contained in:
Bob
2010-10-12 01:29:07 +13:00
parent 597dba8584
commit 6ea2a06e4b
33 changed files with 159 additions and 137 deletions

View File

@@ -181,7 +181,7 @@ namespace OpenRA
LocalTick = 0;
orderManager.StartGame();
viewport.RefreshPalette();
worldRenderer.RefreshPalette();
AfterGameStart( world );
}

View File

@@ -100,7 +100,7 @@ namespace OpenRA.Graphics
renderer.BeginFrame(scrollPosition);
wr.Draw();
Widget.DoDraw();
Widget.DoDraw( wr );
var cursorName = Widget.RootWidget.GetCursorOuter(Viewport.LastMousePos) ?? "default";
var c = new Cursor(cursorName);
@@ -109,16 +109,9 @@ namespace OpenRA.Graphics
renderer.EndFrame();
}
public void RefreshPalette()
{
Game.worldRenderer.palette.Update(
Game.world.WorldActor.TraitsImplementing<IPaletteModifier>());
}
public void Tick()
{
cursorFrame += 0.5f;
RefreshPalette();
}
public float2 ViewToWorld(int2 loc)

View File

@@ -73,6 +73,7 @@ namespace OpenRA.Graphics
Renderable[] worldSprites = { };
public void Tick()
{
RefreshPalette();
var bounds = GetBoundsRect();
var comparer = new SpriteComparer();
@@ -188,5 +189,10 @@ namespace OpenRA.Graphics
prev = pos;
}
}
public void RefreshPalette()
{
palette.Update( world.WorldActor.TraitsImplementing<IPaletteModifier>() );
}
}
}

View File

@@ -8,13 +8,15 @@
*/
#endregion
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
class BackgroundWidget : Widget
{
public readonly string Background = "dialog";
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
WidgetUtils.DrawPanel(Background, RenderBounds);
}

View File

@@ -10,6 +10,7 @@
using System;
using System.Drawing;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -62,7 +63,7 @@ namespace OpenRA.Widgets
return Depressed;
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);

View File

@@ -11,6 +11,7 @@
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -32,7 +33,7 @@ namespace OpenRA.Widgets
: base(widget) { }
public override Rectangle EventBounds { get { return Rectangle.Empty; } }
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var pos = RenderOrigin;
var chatLogArea = new Rectangle(pos.X, pos.Y, Bounds.Width, Bounds.Height);

View File

@@ -9,6 +9,7 @@
#endregion
using System.Drawing;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -24,7 +25,7 @@ namespace OpenRA.Widgets
bool composing = false;
bool teamChat = false;
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
if (composing)
{

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Widgets
public bool Bold = false;
public Func<bool> Checked = () => false;
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var font = Bold ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var pos = RenderOrigin;

View File

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

View File

@@ -13,6 +13,7 @@ using System.Drawing;
using System.Linq;
using OpenRA.FileFormats;
using OpenRA.Network;
using OpenRA.Graphics;
namespace OpenRA.Widgets.Delegates
{
@@ -172,7 +173,7 @@ namespace OpenRA.Widgets.Delegates
{
CurrentColorPreview1 = PlayerColorRemap.ColorFromHSL(hf, sf, lf);
CurrentColorPreview2 = PlayerColorRemap.ColorFromHSL(hf, sf, r * lf);
Game.viewport.RefreshPalette();
Game.worldRenderer.RefreshPalette();
}
void UpdateCurrentMap()
@@ -182,7 +183,6 @@ namespace OpenRA.Widgets.Delegates
Map = Game.modData.AvailableMaps[MapUid];
}
bool hasJoined = false;
void JoinedServer()
{

View File

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

View File

@@ -10,6 +10,7 @@
using System;
using System.Drawing;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -43,7 +44,7 @@ namespace OpenRA.Widgets
GetBackground = other.GetBackground;
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var bg = GetBackground();

View File

@@ -44,8 +44,8 @@ namespace OpenRA.Widgets
DownPressed = other.DownPressed;
}
public override void DrawInner() {}
public override void Draw()
public override void DrawInner( WorldRenderer wr ) {}
public override void Draw( WorldRenderer wr )
{
if (!IsVisible())
return;
@@ -74,7 +74,7 @@ namespace OpenRA.Widgets
Game.Renderer.EnableScissor(backgroundRect.X, backgroundRect.Y + HeaderHeight, backgroundRect.Width, backgroundRect.Height - HeaderHeight);
foreach (var child in Children)
child.Draw();
child.Draw( wr );
Game.Renderer.DisableScissor();
}

View File

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

View File

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

View File

@@ -1,8 +1,19 @@
using System;
#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
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see LICENSE.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -93,7 +104,7 @@ namespace OpenRA.Widgets
Text = Text.Replace("\r", "");
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var bg = GetBackground();

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Widgets
Sprite sprite = null;
string cachedImage = null;
int cachedFrame= -1;
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var image = GetImage();
var frame = GetFrame();
@@ -61,7 +61,7 @@ namespace OpenRA.Widgets
cachedFrame = frame;
}
Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, Game.worldRenderer, palette);
Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, wr, palette);
}
}
}

View File

@@ -10,6 +10,7 @@
using System;
using System.Drawing;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -165,7 +166,7 @@ namespace OpenRA.Widgets
}
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
if (!IsVisible())
return;

View File

@@ -10,6 +10,7 @@
using System;
using System.Drawing;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -107,7 +108,7 @@ namespace OpenRA.Widgets
base.Tick();
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
int margin = 5;
var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;

View File

@@ -9,6 +9,7 @@
#endregion
using System.Drawing;
using OpenRA.Graphics;
using OpenRA.Support;
namespace OpenRA.Widgets
@@ -22,7 +23,7 @@ namespace OpenRA.Widgets
IsVisible = () => Game.Settings.Game.MatchTimer;
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var s = WorldUtils.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() {}
public override void DrawInner( WorldRenderer wr ) {}
public override bool HandleInputInner(MouseInput mi)
{

View File

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

View File

@@ -269,15 +269,15 @@ namespace OpenRA.Widgets
return false;
}
public abstract void DrawInner();
public abstract void DrawInner( WorldRenderer wr );
public virtual void Draw()
public virtual void Draw( WorldRenderer wr )
{
if (IsVisible())
{
DrawInner();
DrawInner( wr );
foreach (var child in Children)
child.Draw();
child.Draw( wr );
}
}
@@ -340,9 +340,9 @@ namespace OpenRA.Widgets
RootWidget.Tick();
}
public static void DoDraw()
public static void DoDraw( WorldRenderer wr )
{
RootWidget.Draw();
RootWidget.Draw( wr );
}
}
@@ -351,7 +351,7 @@ namespace OpenRA.Widgets
public ContainerWidget(Widget other) : base(other) { }
public override void DrawInner() { }
public override void DrawInner( WorldRenderer wr ) { }
public override string GetCursor(int2 pos) { return null; }
public override Widget Clone() { return new ContainerWidget(this); }

View File

@@ -27,9 +27,9 @@ namespace OpenRA.Widgets
Game.Renderer.RgbaSpriteRenderer.DrawSprite(s,pos);
}
public static void DrawSHP(Sprite s, float2 pos)
public static void DrawSHP(Sprite s, float2 pos, WorldRenderer wr)
{
Game.Renderer.WorldSpriteRenderer.DrawSprite(s,pos, Game.worldRenderer, "chrome");
Game.Renderer.WorldSpriteRenderer.DrawSprite(s,pos, wr, "chrome");
}
public static void DrawPanel(string collection, Rectangle Bounds)

View File

@@ -14,6 +14,7 @@ using System.Linq;
using OpenRA.FileFormats;
using OpenRA.Orders;
using OpenRA.Traits;
using OpenRA.Graphics;
namespace OpenRA.Widgets
{
@@ -26,7 +27,7 @@ namespace OpenRA.Widgets
this.world = world;
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var selbox = SelectionBox;
if (selbox == null) return;
@@ -41,7 +42,7 @@ namespace OpenRA.Widgets
Game.Renderer.LineRenderer.DrawLine(a, a + c, Color.White, Color.White);
foreach (var u in SelectActorsInBox(world, selbox.Value.First, selbox.Value.Second))
Game.worldRenderer.DrawSelectionBox(u, Color.Yellow);
wr.DrawSelectionBox(u, Color.Yellow);
}
float2 dragStart, dragEnd;

View File

@@ -20,7 +20,7 @@ namespace OpenRA.Widgets
{
public int TooltipDelay = 10;
public WorldTooltipWidget() : base() { }
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var world = Game.world;
if (Viewport.TicksSinceLastMove < TooltipDelay || world == null || world.LocalPlayer == null)

View File

@@ -163,9 +163,9 @@ namespace OpenRA
}, "[{2}] Trait: {0} ({1:0.000} ms)", Game.Settings.Debug.LongTickThreshold );
effects.DoTimed( e => e.Tick( this ), "[{2}] Effect: {0} ({1:0.000} ms)", Game.Settings.Debug.LongTickThreshold );
Game.viewport.Tick();
while (frameEndActions.Count != 0)
frameEndActions.Dequeue()(this);
Game.viewport.Tick();
}
public IEnumerable<Actor> Actors { get { return actors; } }

View File

@@ -176,15 +176,15 @@ namespace OpenRA.Mods.RA.Widgets
int paletteHeight = 0;
int numActualRows = 0;
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
if (!IsVisible()) return;
// todo: fix
paletteHeight = DrawPalette(world, CurrentQueue);
paletteHeight = DrawPalette(wr, world, CurrentQueue);
DrawBuildTabs(world, paletteHeight);
}
int DrawPalette(World world, ProductionQueue queue)
int DrawPalette(WorldRenderer wr, World world, ProductionQueue queue)
{
buttons.Clear();
if (queue == null) return 0;
@@ -218,7 +218,7 @@ namespace OpenRA.Mods.RA.Widgets
{
var rect = new RectangleF(origin.X + x * 64, origin.Y + 48 * y, 64, 48);
var drawPos = new float2(rect.Location);
WidgetUtils.DrawSHP(iconSprites[item.Name], drawPos);
WidgetUtils.DrawSHP(iconSprites[item.Name], drawPos, wr);
var firstOfThis = queue.AllQueued().FirstOrDefault(a => a.Item == item.Name);
@@ -233,7 +233,7 @@ namespace OpenRA.Mods.RA.Widgets
() => (firstOfThis.TotalTime - firstOfThis.RemainingTime)
* (clock.CurrentSequence.Length - 1) / firstOfThis.TotalTime);
clock.Tick();
WidgetUtils.DrawSHP(clock.Image, drawPos);
WidgetUtils.DrawSHP(clock.Image, drawPos, wr);
if (firstOfThis.Done)
{
@@ -272,7 +272,7 @@ namespace OpenRA.Mods.RA.Widgets
if (x != 0) y++;
foreach (var ob in overlayBits)
WidgetUtils.DrawSHP(ob.First, ob.Second);
WidgetUtils.DrawSHP(ob.First, ob.Second, wr);
// Tooltip
if (tooltipItem != null && !paletteAnimating && paletteOpen)

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA.Widgets
public MoneyBinWidget() : base() { }
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var world = Game.world;
if( world.LocalPlayer == null ) return;

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Widgets
GetLongDesc = () => LongDesc;
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var image = ChromeProvider.GetImage(Image + "-button", GetImage());
var rect = new Rectangle(RenderBounds.X, RenderBounds.Y, (int)image.size.X, (int)image.size.Y);

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA.Widgets
float? lastPowerDrainedPos;
string powerCollection;
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var world = Game.world;
if( world.LocalPlayer == null ) return;

View File

@@ -119,7 +119,7 @@ namespace OpenRA.Mods.RA.Widgets
get { return new Rectangle((int)mapRect.X, (int)mapRect.Y, (int)mapRect.Width, (int)mapRect.Height);}
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
if( world == null || world.LocalPlayer == null ) return;

View File

@@ -63,7 +63,7 @@ namespace OpenRA.Mods.RA.Widgets
return false;
}
public override void DrawInner()
public override void DrawInner( WorldRenderer wr )
{
var world = Game.world;
buttons.Clear();
@@ -127,19 +127,19 @@ namespace OpenRA.Mods.RA.Widgets
}
}
WidgetUtils.DrawSHP(image, drawPos);
WidgetUtils.DrawSHP(image, drawPos, wr);
clock.PlayFetchIndex("idle",
() => (sp.TotalTime - sp.RemainingTime)
* (clock.CurrentSequence.Length - 1) / sp.TotalTime);
clock.Tick();
WidgetUtils.DrawSHP(clock.Image, drawPos);
WidgetUtils.DrawSHP(clock.Image, drawPos, wr);
if (sp.IsReady)
{
ready.Play("ready");
WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2));
WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2), wr);
}
buttons.Add(Pair.New(rect,HandleSupportPower(sp)));