remove many references to Game.world

This commit is contained in:
Bob
2010-10-11 02:44:16 +13:00
parent f8776d773d
commit 6a25d989a7
10 changed files with 88 additions and 63 deletions

View File

@@ -9,6 +9,7 @@
#endregion
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
@@ -186,7 +187,7 @@ namespace OpenRA
public static void IssueOrder( Order o ) { orderManager.IssueOrder( o ); } /* avoid exposing the OM to mod code */
public static event Action AfterGameStart = () => {};
public static event Action<World> AfterGameStart = _ => {};
public static event Action BeforeGameStart = () => {};
internal static void StartGame(string map)
{
@@ -200,7 +201,7 @@ namespace OpenRA
orderManager.StartGame();
viewport.RefreshPalette();
AfterGameStart();
AfterGameStart( world );
}
public static void DispatchMouseInput(MouseInputEvent ev, MouseEventArgs e, Modifiers modifierKeys)
@@ -291,7 +292,7 @@ namespace OpenRA
JoinLocal();
StartGame(modData.Manifest.ShellmapUid);
Game.AfterGameStart += world => Widget.OpenWindow("INGAME_ROOT", new Dictionary<string,object>{{"world", world}});
Game.ConnectionStateChanged += () =>
@@ -318,7 +319,7 @@ namespace OpenRA
break;
}
};
modData.WidgetLoader.LoadWidget( new Dictionary<string,object>(), Widget.RootWidget, "PERF_BG" );
Widget.OpenWindow("MAINMENU_BG");

View File

@@ -23,14 +23,15 @@ using OpenRA;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Widgets.Delegates
{
public class DeveloperModeDelegate : IWidgetDelegate
{
public DeveloperModeDelegate ()
readonly World world;
[ObjectCreator.UseCtor]
public DeveloperModeDelegate( [ObjectCreator.Param("world")] World world )
{
this.world = world;
var devmodeBG = Widget.RootWidget.GetWidget("INGAME_ROOT").GetWidget("DEVELOPERMODE_BG");
var devModeButton = Widget.RootWidget.GetWidget<ButtonWidget>("INGAME_DEVELOPERMODE_BUTTON");
@@ -41,10 +42,10 @@ namespace OpenRA.Widgets.Delegates
};
devmodeBG.GetWidget<CheckboxWidget>("CHECKBOX_SHROUD").Checked =
() => Game.world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().DisableShroud;
() => world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().DisableShroud;
devmodeBG.GetWidget<CheckboxWidget>("CHECKBOX_SHROUD").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevShroud", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevShroud", world.LocalPlayer.PlayerActor));
return true;
};
@@ -52,51 +53,51 @@ namespace OpenRA.Widgets.Delegates
() => Game.Settings.Debug.ShowCollisions;
devmodeBG.GetWidget("CHECKBOX_UNITDEBUG").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevUnitDebug", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevUnitDebug", world.LocalPlayer.PlayerActor));
return true;
};
devmodeBG.GetWidget<CheckboxWidget>("CHECKBOX_PATHDEBUG").Checked =
() => Game.world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().PathDebug;
() => world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().PathDebug;
devmodeBG.GetWidget("CHECKBOX_PATHDEBUG").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevPathDebug", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevPathDebug", world.LocalPlayer.PlayerActor));
return true;
};
devmodeBG.GetWidget<ButtonWidget>("GIVE_CASH").OnMouseUp = mi =>
{
Game.IssueOrder(new Order("DevGiveCash", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevGiveCash", world.LocalPlayer.PlayerActor));
return true;
};
devmodeBG.GetWidget<CheckboxWidget>("INSTANT_BUILD").Checked =
() => Game.world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().FastBuild;
() => world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().FastBuild;
devmodeBG.GetWidget<CheckboxWidget>("INSTANT_BUILD").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevFastBuild", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevFastBuild", world.LocalPlayer.PlayerActor));
return true;
};
devmodeBG.GetWidget<CheckboxWidget>("INSTANT_CHARGE").Checked =
() => Game.world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().FastCharge;
() => world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().FastCharge;
devmodeBG.GetWidget<CheckboxWidget>("INSTANT_CHARGE").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevFastCharge", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevFastCharge", world.LocalPlayer.PlayerActor));
return true;
};
devmodeBG.GetWidget<CheckboxWidget>("ENABLE_TECH").Checked =
() => Game.world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().AllTech;
() => world.LocalPlayer.PlayerActor.Trait<DeveloperMode>().AllTech;
devmodeBG.GetWidget<CheckboxWidget>("ENABLE_TECH").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevEnableTech", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevEnableTech", world.LocalPlayer.PlayerActor));
return true;
};
devmodeBG.GetWidget<ButtonWidget>("GIVE_EXPLORATION").OnMouseUp = mi =>
{
Game.IssueOrder(new Order("DevGiveExploration", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevGiveExploration", world.LocalPlayer.PlayerActor));
return true;
};

View File

@@ -21,8 +21,11 @@ namespace OpenRA.Widgets.Delegates
static List<Widget> controls = new List<Widget>();
int validPlayers = 0;
public DiplomacyDelegate()
readonly World world;
[ObjectCreator.UseCtor]
public DiplomacyDelegate( [ObjectCreator.Param("world")] World world )
{
this.world = world;
var root = Widget.RootWidget.GetWidget("INGAME_ROOT");
var diplomacyBG = root.GetWidget("DIPLOMACY_BG");
var diplomacy = root.GetWidget("INGAME_DIPLOMACY_BUTTON");
@@ -34,7 +37,7 @@ namespace OpenRA.Widgets.Delegates
return true;
};
Game.AfterGameStart += () => validPlayers = Game.world.players.Values.Where(a => a != Game.world.LocalPlayer && !a.NonCombatant).Count();
Game.AfterGameStart += _ => validPlayers = world.players.Values.Where(a => a != world.LocalPlayer && !a.NonCombatant).Count();
diplomacy.IsVisible = () => (validPlayers > 0);
}
@@ -71,7 +74,7 @@ namespace OpenRA.Widgets.Delegates
y += 35;
foreach (var p in Game.world.players.Values.Where(a => a != Game.world.LocalPlayer && !a.NonCombatant))
foreach (var p in world.players.Values.Where(a => a != world.LocalPlayer && !a.NonCombatant))
{
var pp = p;
var label = new LabelWidget
@@ -94,7 +97,7 @@ namespace OpenRA.Widgets.Delegates
Align = LabelWidget.TextAlign.Left,
Bold = false,
GetText = () => pp.Stances[ Game.world.LocalPlayer ].ToString(),
GetText = () => pp.Stances[ world.LocalPlayer ].ToString(),
};
bg.AddChild(theirStance);
@@ -104,7 +107,7 @@ namespace OpenRA.Widgets.Delegates
{
Bounds = new Rectangle( margin + 2 * labelWidth + 20, y, labelWidth, 25),
Id = "DIPLOMACY_PLAYER_LABEL_MY_{0}".F(p.Index),
Text = Game.world.LocalPlayer.Stances[ pp ].ToString(),
Text = world.LocalPlayer.Stances[ pp ].ToString(),
};
myStance.OnMouseUp = mi => { CycleStance(pp, myStance); return true; };
@@ -135,7 +138,7 @@ namespace OpenRA.Widgets.Delegates
var nextStance = GetNextStance((Stance)Enum.Parse(typeof(Stance), bw.Text));
Game.IssueOrder(new Order("SetStance", Game.world.LocalPlayer.PlayerActor,
Game.IssueOrder(new Order("SetStance", world.LocalPlayer.PlayerActor,
new int2(p.Index, (int)nextStance)));
bw.Text = nextStance.ToString();

View File

@@ -124,12 +124,13 @@ namespace OpenRA.Widgets
height);
}
public void PostInit()
public void PostInit( Dictionary<string, object> args )
{
if( Delegate != null )
{
var createDict = new Dictionary<string, object> { { "widget", this } };
Game.modData.ObjectCreator.CreateObject<IWidgetDelegate>( Delegate, createDict );
args[ "widget" ] = this;
Game.modData.ObjectCreator.CreateObject<IWidgetDelegate>( Delegate, args );
args.Remove( "widget" );
}
}
@@ -322,7 +323,12 @@ namespace OpenRA.Widgets
public static Widget OpenWindow( string id )
{
var window = Game.modData.WidgetLoader.LoadWidget( rootWidget, id );
return OpenWindow( id, new Dictionary<string, object>() );
}
public static Widget OpenWindow(string id, Dictionary<string, object> args )
{
var window = Game.modData.WidgetLoader.LoadWidget( args, rootWidget, id );
if( WindowList.Count > 0 )
rootWidget.Children.Remove( WindowList.Peek() );
WindowList.Push( window );

View File

@@ -33,14 +33,14 @@ namespace OpenRA
widgets.Add( w.Key.Substring( w.Key.IndexOf( '@' ) + 1 ), w );
}
public Widget LoadWidget( Widget parent, string w )
public Widget LoadWidget( Dictionary<string, object> args, Widget parent, string w )
{
return LoadWidget( parent, widgets[ w ] );
return LoadWidget( args, parent, widgets[ w ] );
}
public Widget LoadWidget( Widget parent, MiniYamlNode node)
public Widget LoadWidget( Dictionary<string, object> args, Widget parent, MiniYamlNode node)
{
var widget = NewWidget(node.Key);
var widget = NewWidget(node.Key, args);
parent.AddChild( widget );
foreach (var child in node.Value.Nodes)
@@ -52,16 +52,16 @@ namespace OpenRA
foreach (var child in node.Value.Nodes)
if (child.Key == "Children")
foreach (var c in child.Value.Nodes)
LoadWidget( widget, c);
LoadWidget( args, widget, c);
widget.PostInit();
widget.PostInit( args );
return widget;
}
Widget NewWidget(string widgetType)
Widget NewWidget(string widgetType, Dictionary<string, object> args)
{
widgetType = widgetType.Split('@')[0];
return Game.CreateObject<Widget>(widgetType + "Widget");
return Game.modData.ObjectCreator.CreateObject<Widget>(widgetType + "Widget", args);
}
}
}

View File

@@ -19,7 +19,12 @@ namespace OpenRA.Widgets
{
class WorldInteractionControllerWidget : Widget
{
public WorldInteractionControllerWidget() : base() {}
readonly World world;
[ObjectCreator.UseCtor]
public WorldInteractionControllerWidget( [ObjectCreator.Param( "world" )] World world )
{
this.world = world;
}
public override void DrawInner( World world )
{
@@ -43,7 +48,6 @@ namespace OpenRA.Widgets
public override bool HandleInputInner(MouseInput mi)
{
var xy = Game.viewport.ViewToWorld(mi);
var world = Game.world;
if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Down)
{
dragStart = dragEnd = xy;
@@ -106,7 +110,6 @@ namespace OpenRA.Widgets
public override string GetCursor(int2 pos)
{
var world = Game.world;
return Sync.CheckSyncUnchanged( world, () =>
{
if (!world.GameHasStarted)
@@ -129,7 +132,7 @@ namespace OpenRA.Widgets
{
if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0]))
{
Game.world.Selection.DoControlGroup(Game.world, e.KeyName[0] - '0', e.Modifiers);
world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers);
return true;
}
@@ -144,7 +147,6 @@ namespace OpenRA.Widgets
public void GotoNextBase()
{
var world = Game.world;
var bases = world.Queries.OwnedBy[world.LocalPlayer].WithTrait<BaseBuilding>().ToArray();
if (!bases.Any()) return;

View File

@@ -47,7 +47,12 @@ namespace OpenRA.Mods.RA.Widgets
public readonly string BuildPaletteClose = "bleep13.aud";
public readonly string TabClick = "ramenu1.aud";
public BuildPaletteWidget() : base() { }
readonly World world;
[ObjectCreator.UseCtor]
public BuildPaletteWidget( [ObjectCreator.Param("world")] World world )
{
this.world = world;
}
public override void Initialize()
{
@@ -148,7 +153,7 @@ namespace OpenRA.Mods.RA.Widgets
return true;
}
return DoBuildingHotkey(Char.ToLowerInvariant(e.KeyChar), Game.world);
return DoBuildingHotkey(Char.ToLowerInvariant(e.KeyChar), world);
}
public override bool HandleInputInner(MouseInput mi)

View File

@@ -15,8 +15,11 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
{
public class IngameChromeDelegate : IWidgetDelegate
{
public IngameChromeDelegate()
readonly World world;
[ObjectCreator.UseCtor]
public IngameChromeDelegate( [ObjectCreator.Param("world")] World world )
{
this.world = world;
var r = Widget.RootWidget;
var gameRoot = r.GetWidget("INGAME_ROOT");
var optionsBG = gameRoot.GetWidget("INGAME_OPTIONS_BG");
@@ -50,7 +53,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
optionsBG.GetWidget("SURRENDER").OnMouseUp = mi =>
{
Game.IssueOrder(new Order("Surrender", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor));
return true;
};
@@ -66,12 +69,12 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
var postgameText = postgameBG.GetWidget<LabelWidget>("TEXT");
postgameBG.IsVisible = () =>
{
return Game.world.LocalPlayer != null && Game.world.LocalPlayer.WinState != WinState.Undefined;
return world.LocalPlayer != null && world.LocalPlayer.WinState != WinState.Undefined;
};
postgameText.GetText = () =>
{
var state = Game.world.LocalPlayer.WinState;
var state = world.LocalPlayer.WinState;
return (state == WinState.Undefined)? "" :
((state == WinState.Lost)? "YOU ARE DEFEATED" : "YOU ARE VICTORIOUS");
};

View File

@@ -8,6 +8,7 @@
*/
#endregion
using OpenRA;
using OpenRA.Mods.RA.Orders;
using OpenRA.Widgets;
@@ -15,8 +16,11 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
{
public class OrderButtonsChromeDelegate : IWidgetDelegate
{
public OrderButtonsChromeDelegate()
readonly World world;
[ObjectCreator.UseCtor]
public OrderButtonsChromeDelegate( [ObjectCreator.Param("world")] World world )
{
this.world = world;
var r = Widget.RootWidget;
var gameRoot = r.GetWidget("INGAME_ROOT");
@@ -25,23 +29,23 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
var sell = moneybin.GetWidget<OrderButtonWidget>("SELL");
if (sell != null)
{
sell.Pressed = () => Game.world.OrderGenerator is SellOrderGenerator;
sell.OnMouseDown = mi => { Game.world.ToggleInputMode<SellOrderGenerator>(); return true; };
sell.Pressed = () => world.OrderGenerator is SellOrderGenerator;
sell.OnMouseDown = mi => { world.ToggleInputMode<SellOrderGenerator>(); return true; };
}
var powerdown = moneybin.GetWidget<OrderButtonWidget>("POWER_DOWN");
if (powerdown != null)
{
powerdown.Pressed = () => Game.world.OrderGenerator is PowerDownOrderGenerator;
powerdown.OnMouseDown = mi => { Game.world.ToggleInputMode<PowerDownOrderGenerator>(); return true; };
powerdown.Pressed = () => world.OrderGenerator is PowerDownOrderGenerator;
powerdown.OnMouseDown = mi => { world.ToggleInputMode<PowerDownOrderGenerator>(); return true; };
}
var repair = moneybin.GetWidget<OrderButtonWidget>("REPAIR");
if (repair != null)
{
repair.Enabled = () => { return RepairOrderGenerator.PlayerIsAllowedToRepair( Game.world ); };
repair.Pressed = () => Game.world.OrderGenerator is RepairOrderGenerator;
repair.OnMouseDown = mi => { Game.world.ToggleInputMode<RepairOrderGenerator>(); return true; };
repair.Enabled = () => { return RepairOrderGenerator.PlayerIsAllowedToRepair( world ); };
repair.Pressed = () => world.OrderGenerator is RepairOrderGenerator;
repair.OnMouseDown = mi => { world.ToggleInputMode<RepairOrderGenerator>(); return true; };
repair.GetLongDesc = () => { return repair.Enabled() ? repair.LongDesc : repair.LongDesc + "\n\nRequires: Construction Yard"; };
}
}

View File

@@ -75,7 +75,7 @@ namespace OpenRA.Mods.RA.Widgets
Modifiers = Game.GetModifierKeys()
};
var cursor = Game.world.OrderGenerator.GetCursor( world, loc, mi );
var cursor = world.OrderGenerator.GetCursor( world, loc, mi );
if (cursor == null)
return "default";