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

@@ -93,6 +93,13 @@ namespace OpenRA
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

@@ -23,12 +23,15 @@ namespace OpenRA.Widgets
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; };
this.worldRenderer = worldRenderer;
}
protected ShpImageWidget(ShpImageWidget other)
@@ -40,6 +43,7 @@ namespace OpenRA.Widgets
GetImage = other.GetImage;
GetFrame = other.GetFrame;
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

@@ -21,13 +21,15 @@ namespace OpenRA.Widgets
public class WorldInteractionControllerWidget : Widget
{
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.worldRenderer = worldRenderer;
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
var selbox = SelectionBox;
if (selbox == null) return;
@@ -42,7 +44,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))
wr.DrawSelectionBox(u, Color.Yellow);
worldRenderer.DrawSelectionBox(u, Color.Yellow);
}
float2 dragStart, dragEnd;

View File

@@ -118,12 +118,6 @@ namespace OpenRA
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 )
{
return CreateActor( true, name, initDict );

View File

@@ -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);
}
}
}

View File

@@ -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<VqaPlayerWidget>("PLAYER");
w.DisableTick = true;
player.Load(movie);

View File

@@ -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)

View File

@@ -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<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");
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 } } );
break;
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("CHANGEMAP_BUTTON").Visible = true;
lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

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);}
}
public override void DrawInner( WorldRenderer wr )
public override void DrawInner()
{
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 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)));

View File

@@ -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<StrategicVictoryConditions>()).FirstOrDefault();
var svc = world.players.Select(p => p.Value.PlayerActor.TraitOrDefault<StrategicVictoryConditions>()).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<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));
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<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));
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<StrategicVictoryConditions>();
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<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;
}
}

View File

@@ -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; }

View File

@@ -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;