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

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