From 481cc7807bdf2120449118401fc77c3e745522b0 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 19 Jan 2011 20:19:15 +1300 Subject: [PATCH] Don't require a WorldRenderer to draw non-world-rendering widgets. --- OpenRA.Game/Game.cs | 9 ++++- OpenRA.Game/Graphics/Viewport.cs | 2 +- OpenRA.Game/ObjectCreator.cs | 4 +- OpenRA.Game/Widgets/BackgroundWidget.cs | 2 +- OpenRA.Game/Widgets/ButtonWidget.cs | 6 +-- OpenRA.Game/Widgets/ChatDisplayWidget.cs | 2 +- OpenRA.Game/Widgets/ChatEntryWidget.cs | 2 +- OpenRA.Game/Widgets/CheckboxWidget.cs | 2 +- OpenRA.Game/Widgets/ColorBlockWidget.cs | 2 +- OpenRA.Game/Widgets/ImageWidget.cs | 2 +- OpenRA.Game/Widgets/LabelWidget.cs | 2 +- OpenRA.Game/Widgets/MapPreviewWidget.cs | 2 +- OpenRA.Game/Widgets/PasswordFieldWidget.cs | 2 +- OpenRA.Game/Widgets/PerfGraphWidget.cs | 2 +- OpenRA.Game/Widgets/ScrollPanelWidget.cs | 6 +-- OpenRA.Game/Widgets/ScrollingTextWidget.cs | 4 +- OpenRA.Game/Widgets/ShpImageWidget.cs | 17 +++++---- OpenRA.Game/Widgets/SliderWidget.cs | 2 +- OpenRA.Game/Widgets/TextFieldWidget.cs | 2 +- OpenRA.Game/Widgets/TimerWidget.cs | 2 +- .../Widgets/ViewportScrollControllerWidget.cs | 2 +- OpenRA.Game/Widgets/VqaPlayerWidget.cs | 2 +- OpenRA.Game/Widgets/Widget.cs | 14 +++---- .../WorldInteractionControllerWidget.cs | 14 ++++--- OpenRA.Game/World.cs | 6 --- OpenRA.Mods.RA/OpenWidgetAtGameStart.cs | 4 +- OpenRA.Mods.RA/Scripting/Media.cs | 2 +- OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs | 17 +++++---- .../Widgets/Delegates/LobbyDelegate.cs | 8 +++- .../Delegates/MainMenuButtonsDelegate.cs | 2 +- OpenRA.Mods.RA/Widgets/MoneyBinWidget.cs | 2 +- OpenRA.Mods.RA/Widgets/OrderButtonWidget.cs | 2 +- OpenRA.Mods.RA/Widgets/PowerBinWidget.cs | 2 +- OpenRA.Mods.RA/Widgets/RadarBinWidget.cs | 2 +- .../Widgets/SpecialPowerBinWidget.cs | 14 ++++--- .../Widgets/StrategicProgressWidget.cs | 37 +++++++++++-------- OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs | 2 +- OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs | 2 +- 38 files changed, 115 insertions(+), 93 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index bf4fdf8ef9..5ca95f840e 100755 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -92,7 +92,14 @@ namespace OpenRA public static event Action 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{{ "world", world }, { "orderManager", orderManager }, { "worldRenderer", worldRenderer }}); + } + static void Tick( OrderManager orderManager, Viewport viewPort ) { if (orderManager.Connection.ConnectionState != lastConnectionState) diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index c7e631b1da..05a50a4d86 100755 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -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); diff --git a/OpenRA.Game/ObjectCreator.cs b/OpenRA.Game/ObjectCreator.cs index 6c4c1c4ba8..2cfa94f59f 100755 --- a/OpenRA.Game/ObjectCreator.cs +++ b/OpenRA.Game/ObjectCreator.cs @@ -77,7 +77,9 @@ namespace OpenRA { var attrs = p[ i ].GetCustomAttributes(); 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 ); } diff --git a/OpenRA.Game/Widgets/BackgroundWidget.cs b/OpenRA.Game/Widgets/BackgroundWidget.cs index 8208ad09e9..a6be4c44b5 100644 --- a/OpenRA.Game/Widgets/BackgroundWidget.cs +++ b/OpenRA.Game/Widgets/BackgroundWidget.cs @@ -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); } diff --git a/OpenRA.Game/Widgets/ButtonWidget.cs b/OpenRA.Game/Widgets/ButtonWidget.cs index 4efc73aa31..9f9c4e574b 100644 --- a/OpenRA.Game/Widgets/ButtonWidget.cs +++ b/OpenRA.Game/Widgets/ButtonWidget.cs @@ -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"); diff --git a/OpenRA.Game/Widgets/ChatDisplayWidget.cs b/OpenRA.Game/Widgets/ChatDisplayWidget.cs index 5e982a851e..23ba3ae93c 100644 --- a/OpenRA.Game/Widgets/ChatDisplayWidget.cs +++ b/OpenRA.Game/Widgets/ChatDisplayWidget.cs @@ -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); diff --git a/OpenRA.Game/Widgets/ChatEntryWidget.cs b/OpenRA.Game/Widgets/ChatEntryWidget.cs index 8371c433db..ef4e3e953b 100755 --- a/OpenRA.Game/Widgets/ChatEntryWidget.cs +++ b/OpenRA.Game/Widgets/ChatEntryWidget.cs @@ -34,7 +34,7 @@ namespace OpenRA.Widgets this.orderManager = orderManager; } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { if (composing) { diff --git a/OpenRA.Game/Widgets/CheckboxWidget.cs b/OpenRA.Game/Widgets/CheckboxWidget.cs index fb7413aa99..9f3fafc7fd 100644 --- a/OpenRA.Game/Widgets/CheckboxWidget.cs +++ b/OpenRA.Game/Widgets/CheckboxWidget.cs @@ -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; diff --git a/OpenRA.Game/Widgets/ColorBlockWidget.cs b/OpenRA.Game/Widgets/ColorBlockWidget.cs index 862934f39c..0a30f7d1eb 100644 --- a/OpenRA.Game/Widgets/ColorBlockWidget.cs +++ b/OpenRA.Game/Widgets/ColorBlockWidget.cs @@ -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()); } diff --git a/OpenRA.Game/Widgets/ImageWidget.cs b/OpenRA.Game/Widgets/ImageWidget.cs index 0722df03b3..e17fbb23f7 100644 --- a/OpenRA.Game/Widgets/ImageWidget.cs +++ b/OpenRA.Game/Widgets/ImageWidget.cs @@ -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(); diff --git a/OpenRA.Game/Widgets/LabelWidget.cs b/OpenRA.Game/Widgets/LabelWidget.cs index 9007b0eb45..fd38f8d948 100644 --- a/OpenRA.Game/Widgets/LabelWidget.cs +++ b/OpenRA.Game/Widgets/LabelWidget.cs @@ -46,7 +46,7 @@ namespace OpenRA.Widgets GetBackground = other.GetBackground; } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { var bg = GetBackground(); diff --git a/OpenRA.Game/Widgets/MapPreviewWidget.cs b/OpenRA.Game/Widgets/MapPreviewWidget.cs index 53c5a0f6aa..5e17f49b4a 100644 --- a/OpenRA.Game/Widgets/MapPreviewWidget.cs +++ b/OpenRA.Game/Widgets/MapPreviewWidget.cs @@ -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"); diff --git a/OpenRA.Game/Widgets/PasswordFieldWidget.cs b/OpenRA.Game/Widgets/PasswordFieldWidget.cs index ebf43f0682..000fdcbfb7 100644 --- a/OpenRA.Game/Widgets/PasswordFieldWidget.cs +++ b/OpenRA.Game/Widgets/PasswordFieldWidget.cs @@ -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)); } diff --git a/OpenRA.Game/Widgets/PerfGraphWidget.cs b/OpenRA.Game/Widgets/PerfGraphWidget.cs index 9ea2e1351e..0560b37e0d 100644 --- a/OpenRA.Game/Widgets/PerfGraphWidget.cs +++ b/OpenRA.Game/Widgets/PerfGraphWidget.cs @@ -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); diff --git a/OpenRA.Game/Widgets/ScrollPanelWidget.cs b/OpenRA.Game/Widgets/ScrollPanelWidget.cs index 5bc584c120..d515a84dd6 100644 --- a/OpenRA.Game/Widgets/ScrollPanelWidget.cs +++ b/OpenRA.Game/Widgets/ScrollPanelWidget.cs @@ -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(); } diff --git a/OpenRA.Game/Widgets/ScrollingTextWidget.cs b/OpenRA.Game/Widgets/ScrollingTextWidget.cs index f9e554dcda..79212efa08 100755 --- a/OpenRA.Game/Widgets/ScrollingTextWidget.cs +++ b/OpenRA.Game/Widgets/ScrollingTextWidget.cs @@ -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(); diff --git a/OpenRA.Game/Widgets/ShpImageWidget.cs b/OpenRA.Game/Widgets/ShpImageWidget.cs index 1a2684d3cf..ee229c9e90 100644 --- a/OpenRA.Game/Widgets/ShpImageWidget.cs +++ b/OpenRA.Game/Widgets/ShpImageWidget.cs @@ -22,13 +22,16 @@ namespace OpenRA.Widgets public Func GetImage; public Func GetFrame; public Func 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); } } } diff --git a/OpenRA.Game/Widgets/SliderWidget.cs b/OpenRA.Game/Widgets/SliderWidget.cs index 3313dde325..91e4aaf66d 100755 --- a/OpenRA.Game/Widgets/SliderWidget.cs +++ b/OpenRA.Game/Widgets/SliderWidget.cs @@ -170,7 +170,7 @@ namespace OpenRA.Widgets } } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { if (!IsVisible()) return; diff --git a/OpenRA.Game/Widgets/TextFieldWidget.cs b/OpenRA.Game/Widgets/TextFieldWidget.cs index 55bb0ab3d9..7486f3c725 100644 --- a/OpenRA.Game/Widgets/TextFieldWidget.cs +++ b/OpenRA.Game/Widgets/TextFieldWidget.cs @@ -201,7 +201,7 @@ namespace OpenRA.Widgets Game.Renderer.DisableScissor(); } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { DrawWithString(Text); } diff --git a/OpenRA.Game/Widgets/TimerWidget.cs b/OpenRA.Game/Widgets/TimerWidget.cs index 5204b0663f..e066107d28 100644 --- a/OpenRA.Game/Widgets/TimerWidget.cs +++ b/OpenRA.Game/Widgets/TimerWidget.cs @@ -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); diff --git a/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs b/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs index 58a986e8c9..6bbb9486ef 100755 --- a/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs +++ b/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs @@ -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) diff --git a/OpenRA.Game/Widgets/VqaPlayerWidget.cs b/OpenRA.Game/Widgets/VqaPlayerWidget.cs index e44e821db7..430aa40bbb 100644 --- a/OpenRA.Game/Widgets/VqaPlayerWidget.cs +++ b/OpenRA.Game/Widgets/VqaPlayerWidget.cs @@ -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; diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index 0c11fc8950..a504467259 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -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) diff --git a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs index a1f86d7e25..1ea1c57c52 100644 --- a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs +++ b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs @@ -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; diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 23fd5b18fa..c2b6adbeb5 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -117,12 +117,6 @@ namespace OpenRA foreach (var wlh in WorldActor.TraitsImplementing()) wlh.WorldLoaded(this); } - - // Hacky workaround for orderManager visibility - public Widget OpenWindow(string widget) - { - return Widget.OpenWindow(widget, new Dictionary{{"world", this}, { "orderManager", orderManager }}); - } public Actor CreateActor( string name, TypeDictionary initDict ) { diff --git a/OpenRA.Mods.RA/OpenWidgetAtGameStart.cs b/OpenRA.Mods.RA/OpenWidgetAtGameStart.cs index 9c892a52bc..16a49d53d5 100644 --- a/OpenRA.Mods.RA/OpenWidgetAtGameStart.cs +++ b/OpenRA.Mods.RA/OpenWidgetAtGameStart.cs @@ -31,9 +31,9 @@ namespace OpenRA.Mods.RA public void WorldLoaded(World world) { if (world.LocalPlayer != null) - world.OpenWindow(Info.Widget); + Game.OpenWindow(world, Info.Widget); else if (Info.ObserverWidget != null) - world.OpenWindow(Info.ObserverWidget); + Game.OpenWindow(world, Info.ObserverWidget); } } } \ No newline at end of file diff --git a/OpenRA.Mods.RA/Scripting/Media.cs b/OpenRA.Mods.RA/Scripting/Media.cs index f6be931588..3d1d19e7fc 100644 --- a/OpenRA.Mods.RA/Scripting/Media.cs +++ b/OpenRA.Mods.RA/Scripting/Media.cs @@ -17,7 +17,7 @@ namespace OpenRA.Scripting { 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("PLAYER"); w.DisableTick = true; player.Load(movie); diff --git a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs index e75024e282..c4163530cf 100755 --- a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs @@ -48,11 +48,13 @@ namespace OpenRA.Mods.RA.Widgets public readonly string BuildPaletteClose = "bleep13.aud"; public readonly string TabClick = "ramenu1.aud"; + readonly WorldRenderer worldRenderer; readonly World world; [ObjectCreator.UseCtor] - public BuildPaletteWidget( [ObjectCreator.Param] World world ) + public BuildPaletteWidget( [ObjectCreator.Param] World world, [ObjectCreator.Param] WorldRenderer worldRenderer ) { this.world = world; + this.worldRenderer = worldRenderer; } public override void Initialize() @@ -178,15 +180,16 @@ namespace OpenRA.Mods.RA.Widgets int paletteHeight = 0; int numActualRows = 0; - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { if (!IsVisible()) return; // todo: fix - paletteHeight = DrawPalette(wr, world, CurrentQueue); + + paletteHeight = DrawPalette(CurrentQueue); DrawBuildTabs(world, paletteHeight); } - int DrawPalette(WorldRenderer wr, World world, ProductionQueue queue) + int DrawPalette(ProductionQueue queue) { buttons.Clear(); 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 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); @@ -235,7 +238,7 @@ namespace OpenRA.Mods.RA.Widgets () => (firstOfThis.TotalTime - firstOfThis.RemainingTime) * (clock.CurrentSequence.Length - 1) / firstOfThis.TotalTime); clock.Tick(); - WidgetUtils.DrawSHP(clock.Image, drawPos, wr); + WidgetUtils.DrawSHP(clock.Image, drawPos, worldRenderer); if (firstOfThis.Done) { @@ -274,7 +277,7 @@ namespace OpenRA.Mods.RA.Widgets if (x != 0) y++; foreach (var ob in overlayBits) - WidgetUtils.DrawSHP(ob.First, ob.Second, wr); + WidgetUtils.DrawSHP(ob.First, ob.Second, worldRenderer); // Tooltip if (tooltipItem != null && !paletteAnimating && paletteOpen) diff --git a/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs index 1e81a0fa60..b979c88e90 100755 --- a/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs @@ -16,6 +16,7 @@ using OpenRA.FileFormats; using OpenRA.Network; using OpenRA.Traits; using OpenRA.Widgets; +using OpenRA.Graphics; namespace OpenRA.Mods.RA.Widgets.Delegates { @@ -30,10 +31,13 @@ namespace OpenRA.Mods.RA.Widgets.Delegates public static ColorRamp CurrentColorPreview; readonly OrderManager orderManager; + readonly WorldRenderer worldRenderer; [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.worldRenderer = worldRenderer; + Game.LobbyInfoChanged += UpdateCurrentMap; UpdateCurrentMap(); @@ -266,7 +270,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates if (Map.Players[s.MapPlayer].LockColor) return false; - var colorChooser = Game.modData.WidgetLoader.LoadWidget( new Dictionary(), null, "COLOR_CHOOSER" ); + var colorChooser = Game.modData.WidgetLoader.LoadWidget( new Dictionary() { {"worldRenderer", worldRenderer} }, null, "COLOR_CHOOSER" ); var hueSlider = colorChooser.GetWidget("HUE_SLIDER"); hueSlider.SetOffset(orderManager.LocalClient.ColorRamp.H / 255f); diff --git a/OpenRA.Mods.RA/Widgets/Delegates/MainMenuButtonsDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/MainMenuButtonsDelegate.cs index 28e82b2ee9..360e1237d9 100755 --- a/OpenRA.Mods.RA/Widgets/Delegates/MainMenuButtonsDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/MainMenuButtonsDelegate.cs @@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates new Dictionary { { "orderManager", orderManager } } ); break; case ConnectionState.Connected: - var lobby = Widget.OpenWindow( "SERVER_LOBBY", new Dictionary { { "orderManager", orderManager } } ); + var lobby = Game.OpenWindow(orderManager.world, "SERVER_LOBBY"); lobby.GetWidget("CHAT_DISPLAY").ClearChat(); lobby.GetWidget("CHANGEMAP_BUTTON").Visible = true; lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true; diff --git a/OpenRA.Mods.RA/Widgets/MoneyBinWidget.cs b/OpenRA.Mods.RA/Widgets/MoneyBinWidget.cs index 102b08b720..d7d808225c 100755 --- a/OpenRA.Mods.RA/Widgets/MoneyBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/MoneyBinWidget.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Widgets this.world = world; } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { if( world.LocalPlayer == null ) return; diff --git a/OpenRA.Mods.RA/Widgets/OrderButtonWidget.cs b/OpenRA.Mods.RA/Widgets/OrderButtonWidget.cs index 5ab9187e16..c5c72b8e4b 100755 --- a/OpenRA.Mods.RA/Widgets/OrderButtonWidget.cs +++ b/OpenRA.Mods.RA/Widgets/OrderButtonWidget.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Widgets GetLongDesc = () => LongDesc; } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { var image = ChromeProvider.GetImage(Image + "-button", GetImage()); var rect = new Rectangle(RenderBounds.X, RenderBounds.Y, (int)image.size.X, (int)image.size.Y); diff --git a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs index d45ee64973..7a06bf8d09 100755 --- a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs @@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Widgets this.world = world; } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { if( world.LocalPlayer == null ) return; diff --git a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs index 1b9ed22c90..b6378af1fa 100755 --- a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs @@ -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);} } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { if( world == null || world.LocalPlayer == null ) return; diff --git a/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs index b4fae10781..427651f63d 100755 --- a/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs @@ -26,10 +26,12 @@ namespace OpenRA.Mods.RA.Widgets readonly List>> buttons = new List>>(); readonly World world; + readonly WorldRenderer worldRenderer; [ObjectCreator.UseCtor] - public SpecialPowerBinWidget( [ObjectCreator.Param] World world ) + public SpecialPowerBinWidget([ObjectCreator.Param] World world, [ObjectCreator.Param] WorldRenderer worldRenderer) { this.world = world; + this.worldRenderer = worldRenderer; } public override void Initialize() @@ -70,7 +72,7 @@ namespace OpenRA.Mods.RA.Widgets return false; } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { buttons.Clear(); @@ -140,24 +142,24 @@ namespace OpenRA.Mods.RA.Widgets } } - WidgetUtils.DrawSHP(image, drawPos, wr); + WidgetUtils.DrawSHP(image, drawPos, worldRenderer); clock.PlayFetchIndex("idle", () => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime) * (clock.CurrentSequence.Length - 1) / sp.TotalTime); clock.Tick(); - WidgetUtils.DrawSHP(clock.Image, drawPos, wr); + WidgetUtils.DrawSHP(clock.Image, drawPos, worldRenderer); if (sp.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) { 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))); diff --git a/OpenRA.Mods.RA/Widgets/StrategicProgressWidget.cs b/OpenRA.Mods.RA/Widgets/StrategicProgressWidget.cs index 4f8db27ed5..37ba6817f0 100644 --- a/OpenRA.Mods.RA/Widgets/StrategicProgressWidget.cs +++ b/OpenRA.Mods.RA/Widgets/StrategicProgressWidget.cs @@ -12,38 +12,45 @@ namespace OpenRA.Mods.RA.Widgets public class StrategicProgressWidget : Widget { 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(WorldRenderer wr) + public override void DrawInner() { if (!Initialised) - Init(wr); + Init(); if (!IsVisible()) return; int2 offset = int2.Zero; - var svc = wr.world.players.Select(p => p.Value.PlayerActor.TraitOrDefault()).FirstOrDefault(); + var svc = world.players.Select(p => p.Value.PlayerActor.TraitOrDefault()).FirstOrDefault(); var totalWidth = (svc.Total + svc.TotalCritical)*32; int curX = -(totalWidth / 2); - foreach (var a in wr.world.Actors.Where(a => !a.Destroyed && a.HasTrait() && !a.TraitOrDefault().Critical)) + foreach (var a in world.Actors.Where(a => !a.Destroyed && a.HasTrait() && !a.TraitOrDefault().Critical)) { 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)); else if (!a.Owner.NonCombatant) WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(RenderBounds.Left + curX, RenderBounds.Top)); curX += 32; } - foreach (var a in wr.world.Actors.Where(a => !a.Destroyed && a.HasTrait() && a.TraitOrDefault().Critical)) + foreach (var a in world.Actors.Where(a => !a.Destroyed && a.HasTrait() && a.TraitOrDefault().Critical)) { 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)); else if (!a.Owner.NonCombatant) 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); - var pendingWinner = FindFirstWinningPlayer(wr.world); + var pendingWinner = FindFirstWinningPlayer(world); if (pendingWinner == null) return; svc = pendingWinner.PlayerActor.TraitOrDefault(); - if (wr.world.LocalPlayer == null) - { - }else + if (world.LocalPlayer != null) { 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 tc = "Strategic defeat in " + @@ -109,9 +114,9 @@ namespace OpenRA.Mods.RA.Widgets return shortestPlayer; } - private void Init(WorldRenderer wr) + private void Init() { - IsVisible = () => (wr.world.Actors.Where(a => a.HasTrait()).Any() && wr.world.Actors.Where(a => a.HasTrait()).Any()); + IsVisible = () => (world.Actors.Where(a => a.HasTrait()).Any() && world.Actors.Where(a => a.HasTrait()).Any()); Initialised = true; } } diff --git a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs index 4c2f1e320d..d7c0165bac 100644 --- a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs +++ b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Widgets OrderManager = orderManager; } - public override void DrawInner(WorldRenderer wr) { } + public override void DrawInner() { } public override string GetCursor(int2 pos) { return null; } diff --git a/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs b/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs index 6e8b42a564..3bbee35d3b 100755 --- a/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs +++ b/OpenRA.Mods.RA/Widgets/WorldTooltipWidget.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Widgets this.world = world; } - public override void DrawInner( WorldRenderer wr ) + public override void DrawInner() { if (Viewport.TicksSinceLastMove < TooltipDelay || world == null || world.LocalPlayer == null) return;