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 = _ => { }; public static event Action<OrderManager> ConnectionStateChanged = _ => { };
static ConnectionState lastConnectionState = ConnectionState.PreConnecting; static ConnectionState lastConnectionState = ConnectionState.PreConnecting;
public static int LocalClientId { get { return orderManager.Connection.LocalClientId; } } 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 ) static void Tick( OrderManager orderManager, Viewport viewPort )
{ {
if (orderManager.Connection.ConnectionState != lastConnectionState) if (orderManager.Connection.ConnectionState != lastConnectionState)

View File

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

View File

@@ -77,7 +77,9 @@ namespace OpenRA
{ {
var attrs = p[ i ].GetCustomAttributes<ParamAttribute>(); var attrs = p[ i ].GetCustomAttributes<ParamAttribute>();
if( attrs.Length != 1 ) throw new InvalidOperationException( "ObjectCreator: argument in [UseCtor] doesn't have [Param]" ); 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 ); return ctor.Invoke( a );
} }

View File

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

View File

@@ -84,7 +84,7 @@ namespace OpenRA.Widgets
public override int2 ChildOrigin { get { return RenderOrigin + public override int2 ChildOrigin { get { return RenderOrigin +
((Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0)); } } ((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 font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0); 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 stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
var image = ChromeProvider.GetImage("scrollbar", "down_arrow"); var image = ChromeProvider.GetImage("scrollbar", "down_arrow");

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -56,8 +56,8 @@ namespace OpenRA.Widgets
base.AddChild(child); base.AddChild(child);
} }
public override void DrawInner( WorldRenderer wr ) {} public override void DrawInner() {}
public override void Draw( WorldRenderer wr ) public override void Draw()
{ {
if (!IsVisible()) if (!IsVisible())
return; return;
@@ -98,7 +98,7 @@ namespace OpenRA.Widgets
Game.Renderer.EnableScissor(backgroundRect.X + 1, backgroundRect.Y + 1, backgroundRect.Width - 2, backgroundRect.Height - 2); Game.Renderer.EnableScissor(backgroundRect.X + 1, backgroundRect.Y + 1, backgroundRect.Width - 2, backgroundRect.Height - 2);
foreach (var child in Children) foreach (var child in Children)
child.Draw( wr ); child.Draw();
Game.Renderer.DisableScissor(); 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) * Copyright 2007-2010 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
@@ -101,7 +101,7 @@ namespace OpenRA.Widgets
Text = Text.Replace("\r", ""); Text = Text.Replace("\r", "");
} }
public override void DrawInner( WorldRenderer wr ) public override void DrawInner()
{ {
var bg = GetBackground(); var bg = GetBackground();

View File

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

View File

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

View File

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

View File

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

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Widgets
public ViewportScrollControllerWidget() : base() { } public ViewportScrollControllerWidget() : base() { }
protected ViewportScrollControllerWidget(ViewportScrollControllerWidget widget) : base(widget) {} 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 // TODO: ViewportScrollController doesn't support delegate methods for mouse input
public override bool HandleMouseInput(MouseInput mi) public override bool HandleMouseInput(MouseInput mi)

View File

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

View File

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

View File

@@ -20,14 +20,16 @@ namespace OpenRA.Widgets
{ {
public class WorldInteractionControllerWidget : Widget public class WorldInteractionControllerWidget : Widget
{ {
readonly World world; readonly World world;
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor] [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; var selbox = SelectionBox;
if (selbox == null) return; 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, 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 + b + c, a + c, Color.White, Color.White);
Game.Renderer.LineRenderer.DrawLine(a, 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)) 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; float2 dragStart, dragEnd;

View File

@@ -117,12 +117,6 @@ namespace OpenRA
foreach (var wlh in WorldActor.TraitsImplementing<IWorldLoaded>()) foreach (var wlh in WorldActor.TraitsImplementing<IWorldLoaded>())
wlh.WorldLoaded(this); 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 ) public Actor CreateActor( string name, TypeDictionary initDict )
{ {

View File

@@ -31,9 +31,9 @@ namespace OpenRA.Mods.RA
public void WorldLoaded(World world) public void WorldLoaded(World world)
{ {
if (world.LocalPlayer != null) if (world.LocalPlayer != null)
world.OpenWindow(Info.Widget); Game.OpenWindow(world, Info.Widget);
else if (Info.ObserverWidget != null) else if (Info.ObserverWidget != null)
world.OpenWindow(Info.ObserverWidget); Game.OpenWindow(world, Info.ObserverWidget);
} }
} }
} }

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Scripting
{ {
public static void PlayFMVFullscreen(World w, string movie, Action onComplete) public static void PlayFMVFullscreen(World w, string movie, Action onComplete)
{ {
var playerRoot = w.OpenWindow("FMVPLAYER"); var playerRoot = Game.OpenWindow(w, "FMVPLAYER");
var player = playerRoot.GetWidget<VqaPlayerWidget>("PLAYER"); var player = playerRoot.GetWidget<VqaPlayerWidget>("PLAYER");
w.DisableTick = true; w.DisableTick = true;
player.Load(movie); player.Load(movie);

View File

@@ -48,11 +48,13 @@ namespace OpenRA.Mods.RA.Widgets
public readonly string BuildPaletteClose = "bleep13.aud"; public readonly string BuildPaletteClose = "bleep13.aud";
public readonly string TabClick = "ramenu1.aud"; public readonly string TabClick = "ramenu1.aud";
readonly WorldRenderer worldRenderer;
readonly World world; readonly World world;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public BuildPaletteWidget( [ObjectCreator.Param] World world ) public BuildPaletteWidget( [ObjectCreator.Param] World world, [ObjectCreator.Param] WorldRenderer worldRenderer )
{ {
this.world = world; this.world = world;
this.worldRenderer = worldRenderer;
} }
public override void Initialize() public override void Initialize()
@@ -178,15 +180,16 @@ namespace OpenRA.Mods.RA.Widgets
int paletteHeight = 0; int paletteHeight = 0;
int numActualRows = 0; int numActualRows = 0;
public override void DrawInner( WorldRenderer wr ) public override void DrawInner()
{ {
if (!IsVisible()) return; if (!IsVisible()) return;
// todo: fix // todo: fix
paletteHeight = DrawPalette(wr, world, CurrentQueue);
paletteHeight = DrawPalette(CurrentQueue);
DrawBuildTabs(world, paletteHeight); DrawBuildTabs(world, paletteHeight);
} }
int DrawPalette(WorldRenderer wr, World world, ProductionQueue queue) int DrawPalette(ProductionQueue queue)
{ {
buttons.Clear(); buttons.Clear();
if (queue == null) return 0; if (queue == null) return 0;
@@ -220,7 +223,7 @@ namespace OpenRA.Mods.RA.Widgets
{ {
var rect = new RectangleF(origin.X + x * 64, origin.Y + 48 * y, 64, 48); var rect = new RectangleF(origin.X + x * 64, origin.Y + 48 * y, 64, 48);
var drawPos = new float2(rect.Location); var drawPos = new float2(rect.Location);
WidgetUtils.DrawSHP(iconSprites[item.Name], drawPos, wr); WidgetUtils.DrawSHP(iconSprites[item.Name], drawPos, worldRenderer);
var firstOfThis = queue.AllQueued().FirstOrDefault(a => a.Item == item.Name); var firstOfThis = queue.AllQueued().FirstOrDefault(a => a.Item == item.Name);
@@ -235,7 +238,7 @@ namespace OpenRA.Mods.RA.Widgets
() => (firstOfThis.TotalTime - firstOfThis.RemainingTime) () => (firstOfThis.TotalTime - firstOfThis.RemainingTime)
* (clock.CurrentSequence.Length - 1) / firstOfThis.TotalTime); * (clock.CurrentSequence.Length - 1) / firstOfThis.TotalTime);
clock.Tick(); clock.Tick();
WidgetUtils.DrawSHP(clock.Image, drawPos, wr); WidgetUtils.DrawSHP(clock.Image, drawPos, worldRenderer);
if (firstOfThis.Done) if (firstOfThis.Done)
{ {
@@ -274,7 +277,7 @@ namespace OpenRA.Mods.RA.Widgets
if (x != 0) y++; if (x != 0) y++;
foreach (var ob in overlayBits) foreach (var ob in overlayBits)
WidgetUtils.DrawSHP(ob.First, ob.Second, wr); WidgetUtils.DrawSHP(ob.First, ob.Second, worldRenderer);
// Tooltip // Tooltip
if (tooltipItem != null && !paletteAnimating && paletteOpen) if (tooltipItem != null && !paletteAnimating && paletteOpen)

View File

@@ -16,6 +16,7 @@ using OpenRA.FileFormats;
using OpenRA.Network; using OpenRA.Network;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Widgets; using OpenRA.Widgets;
using OpenRA.Graphics;
namespace OpenRA.Mods.RA.Widgets.Delegates namespace OpenRA.Mods.RA.Widgets.Delegates
{ {
@@ -30,10 +31,13 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
public static ColorRamp CurrentColorPreview; public static ColorRamp CurrentColorPreview;
readonly OrderManager orderManager; readonly OrderManager orderManager;
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
internal LobbyDelegate( [ObjectCreator.Param( "widget" )] Widget lobby, [ObjectCreator.Param] OrderManager orderManager ) internal LobbyDelegate( [ObjectCreator.Param( "widget" )] Widget lobby, [ObjectCreator.Param] OrderManager orderManager, [ObjectCreator.Param] WorldRenderer worldRenderer)
{ {
this.orderManager = orderManager; this.orderManager = orderManager;
this.worldRenderer = worldRenderer;
Game.LobbyInfoChanged += UpdateCurrentMap; Game.LobbyInfoChanged += UpdateCurrentMap;
UpdateCurrentMap(); UpdateCurrentMap();
@@ -266,7 +270,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
if (Map.Players[s.MapPlayer].LockColor) if (Map.Players[s.MapPlayer].LockColor)
return false; return false;
var colorChooser = Game.modData.WidgetLoader.LoadWidget( new Dictionary<string,object>(), null, "COLOR_CHOOSER" ); var colorChooser = Game.modData.WidgetLoader.LoadWidget( new Dictionary<string,object>() { {"worldRenderer", worldRenderer} }, null, "COLOR_CHOOSER" );
var hueSlider = colorChooser.GetWidget<SliderWidget>("HUE_SLIDER"); var hueSlider = colorChooser.GetWidget<SliderWidget>("HUE_SLIDER");
hueSlider.SetOffset(orderManager.LocalClient.ColorRamp.H / 255f); hueSlider.SetOffset(orderManager.LocalClient.ColorRamp.H / 255f);

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
new Dictionary<string, object> { { "orderManager", orderManager } } ); new Dictionary<string, object> { { "orderManager", orderManager } } );
break; break;
case ConnectionState.Connected: case ConnectionState.Connected:
var lobby = Widget.OpenWindow( "SERVER_LOBBY", new Dictionary<string, object> { { "orderManager", orderManager } } ); var lobby = Game.OpenWindow(orderManager.world, "SERVER_LOBBY");
lobby.GetWidget<ChatDisplayWidget>("CHAT_DISPLAY").ClearChat(); lobby.GetWidget<ChatDisplayWidget>("CHAT_DISPLAY").ClearChat();
lobby.GetWidget("CHANGEMAP_BUTTON").Visible = true; lobby.GetWidget("CHANGEMAP_BUTTON").Visible = true;
lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true; lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true;

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Widgets
this.world = world; this.world = world;
} }
public override void DrawInner( WorldRenderer wr ) public override void DrawInner()
{ {
if( world.LocalPlayer == null ) return; if( world.LocalPlayer == null ) return;

View File

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

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Widgets
this.world = world; this.world = world;
} }
public override void DrawInner( WorldRenderer wr ) public override void DrawInner()
{ {
if( world.LocalPlayer == null ) return; if( world.LocalPlayer == null ) return;

View File

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

View File

@@ -26,10 +26,12 @@ namespace OpenRA.Mods.RA.Widgets
readonly List<Pair<Rectangle, Action<MouseInput>>> buttons = new List<Pair<Rectangle,Action<MouseInput>>>(); readonly List<Pair<Rectangle, Action<MouseInput>>> buttons = new List<Pair<Rectangle,Action<MouseInput>>>();
readonly World world; readonly World world;
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public SpecialPowerBinWidget( [ObjectCreator.Param] World world ) public SpecialPowerBinWidget([ObjectCreator.Param] World world, [ObjectCreator.Param] WorldRenderer worldRenderer)
{ {
this.world = world; this.world = world;
this.worldRenderer = worldRenderer;
} }
public override void Initialize() public override void Initialize()
@@ -70,7 +72,7 @@ namespace OpenRA.Mods.RA.Widgets
return false; return false;
} }
public override void DrawInner( WorldRenderer wr ) public override void DrawInner()
{ {
buttons.Clear(); buttons.Clear();
@@ -140,24 +142,24 @@ namespace OpenRA.Mods.RA.Widgets
} }
} }
WidgetUtils.DrawSHP(image, drawPos, wr); WidgetUtils.DrawSHP(image, drawPos, worldRenderer);
clock.PlayFetchIndex("idle", clock.PlayFetchIndex("idle",
() => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime) () => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime)
* (clock.CurrentSequence.Length - 1) / sp.TotalTime); * (clock.CurrentSequence.Length - 1) / sp.TotalTime);
clock.Tick(); clock.Tick();
WidgetUtils.DrawSHP(clock.Image, drawPos, wr); WidgetUtils.DrawSHP(clock.Image, drawPos, worldRenderer);
if (sp.Ready) if (sp.Ready)
{ {
ready.Play("ready"); ready.Play("ready");
WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2), wr); WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2), worldRenderer);
} }
else if (!sp.Active) else if (!sp.Active)
{ {
ready.Play("hold"); ready.Play("hold");
WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2), wr); WidgetUtils.DrawSHP(ready.Image, drawPos + new float2((64 - ready.Image.size.X) / 2, 2), worldRenderer);
} }
buttons.Add(Pair.New(rect,HandleSupportPower(kv.Key, manager))); buttons.Add(Pair.New(rect,HandleSupportPower(kv.Key, manager)));

View File

@@ -12,38 +12,45 @@ namespace OpenRA.Mods.RA.Widgets
public class StrategicProgressWidget : Widget public class StrategicProgressWidget : Widget
{ {
bool Initialised = false; bool Initialised = false;
readonly World world;
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor]
public StrategicProgressWidget([ObjectCreator.Param] World world, [ObjectCreator.Param] WorldRenderer worldRenderer)
{
IsVisible = () => true;
this.world = world;
this.worldRenderer = worldRenderer;
}
public StrategicProgressWidget() { IsVisible = () => true; } public override void DrawInner()
public override void DrawInner(WorldRenderer wr)
{ {
if (!Initialised) if (!Initialised)
Init(wr); Init();
if (!IsVisible()) return; if (!IsVisible()) return;
int2 offset = int2.Zero; int2 offset = int2.Zero;
var svc = wr.world.players.Select(p => p.Value.PlayerActor.TraitOrDefault<StrategicVictoryConditions>()).FirstOrDefault(); var svc = world.players.Select(p => p.Value.PlayerActor.TraitOrDefault<StrategicVictoryConditions>()).FirstOrDefault();
var totalWidth = (svc.Total + svc.TotalCritical)*32; var totalWidth = (svc.Total + svc.TotalCritical)*32;
int curX = -(totalWidth / 2); int curX = -(totalWidth / 2);
foreach (var a in wr.world.Actors.Where(a => !a.Destroyed && a.HasTrait<StrategicPoint>() && !a.TraitOrDefault<StrategicPoint>().Critical)) foreach (var a in world.Actors.Where(a => !a.Destroyed && a.HasTrait<StrategicPoint>() && !a.TraitOrDefault<StrategicPoint>().Critical))
{ {
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "unowned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "unowned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top));
if (a.Owner == wr.world.LocalPlayer || (a.Owner.Stances[wr.world.LocalPlayer] == Stance.Ally && wr.world.LocalPlayer.Stances[a.Owner] == Stance.Ally)) if (a.Owner == worldRenderer.world.LocalPlayer || (a.Owner.Stances[world.LocalPlayer] == Stance.Ally && world.LocalPlayer.Stances[a.Owner] == Stance.Ally))
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top));
else if (!a.Owner.NonCombatant) else if (!a.Owner.NonCombatant)
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top));
curX += 32; curX += 32;
} }
foreach (var a in wr.world.Actors.Where(a => !a.Destroyed && a.HasTrait<StrategicPoint>() && a.TraitOrDefault<StrategicPoint>().Critical)) foreach (var a in world.Actors.Where(a => !a.Destroyed && a.HasTrait<StrategicPoint>() && a.TraitOrDefault<StrategicPoint>().Critical))
{ {
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "critical_unowned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "critical_unowned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top));
if (a.Owner == wr.world.LocalPlayer || (a.Owner.Stances[wr.world.LocalPlayer] == Stance.Ally && wr.world.LocalPlayer.Stances[a.Owner] == Stance.Ally)) if (a.Owner == world.LocalPlayer || (a.Owner.Stances[world.LocalPlayer] == Stance.Ally && world.LocalPlayer.Stances[a.Owner] == Stance.Ally))
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top));
else if (!a.Owner.NonCombatant) else if (!a.Owner.NonCombatant)
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top));
@@ -52,17 +59,15 @@ namespace OpenRA.Mods.RA.Widgets
} }
offset += new int2(0, 32); offset += new int2(0, 32);
var pendingWinner = FindFirstWinningPlayer(wr.world); var pendingWinner = FindFirstWinningPlayer(world);
if (pendingWinner == null) return; if (pendingWinner == null) return;
svc = pendingWinner.PlayerActor.TraitOrDefault<StrategicVictoryConditions>(); svc = pendingWinner.PlayerActor.TraitOrDefault<StrategicVictoryConditions>();
if (wr.world.LocalPlayer == null) if (world.LocalPlayer != null)
{
}else
{ {
var tc = ""; var tc = "";
if (pendingWinner != wr.world.LocalPlayer && (pendingWinner.Stances[wr.world.LocalPlayer] != Stance.Ally || wr.world.LocalPlayer.Stances[pendingWinner] != Stance.Ally)) if (pendingWinner != world.LocalPlayer && (pendingWinner.Stances[world.LocalPlayer] != Stance.Ally || world.LocalPlayer.Stances[pendingWinner] != Stance.Ally))
{ {
// losing // losing
tc = "Strategic defeat in " + tc = "Strategic defeat in " +
@@ -109,9 +114,9 @@ namespace OpenRA.Mods.RA.Widgets
return shortestPlayer; return shortestPlayer;
} }
private void Init(WorldRenderer wr) private void Init()
{ {
IsVisible = () => (wr.world.Actors.Where(a => a.HasTrait<StrategicVictoryConditions>()).Any() && wr.world.Actors.Where(a => a.HasTrait<StrategicPoint>()).Any()); IsVisible = () => (world.Actors.Where(a => a.HasTrait<StrategicVictoryConditions>()).Any() && world.Actors.Where(a => a.HasTrait<StrategicPoint>()).Any());
Initialised = true; Initialised = true;
} }
} }

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Widgets
OrderManager = orderManager; OrderManager = orderManager;
} }
public override void DrawInner(WorldRenderer wr) { } public override void DrawInner() { }
public override string GetCursor(int2 pos) { return null; } public override string GetCursor(int2 pos) { return null; }

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Widgets
this.world = world; this.world = world;
} }
public override void DrawInner( WorldRenderer wr ) public override void DrawInner()
{ {
if (Viewport.TicksSinceLastMove < TooltipDelay || world == null || world.LocalPlayer == null) if (Viewport.TicksSinceLastMove < TooltipDelay || world == null || world.LocalPlayer == null)
return; return;