run the shellmap even while the lobby shows. remove Widget.SpecialOneArg

This commit is contained in:
Bob
2010-10-12 18:33:16 +13:00
parent 20276291ce
commit 7ca9fcdac9
7 changed files with 56 additions and 61 deletions

View File

@@ -75,13 +75,6 @@ namespace OpenRA
ConnectionStateChanged( orderManager ); ConnectionStateChanged( orderManager );
} }
static int lastTime = Environment.TickCount;
static void ResetTimer()
{
lastTime = Environment.TickCount;
}
internal static int RenderFrame = 0; internal static int RenderFrame = 0;
internal static int LocalTick { get { return orderManager.LocalFrameNumber; } } internal static int LocalTick { get { return orderManager.LocalFrameNumber; } }
const int NetTickScale = 3; // 120ms net tick for 40ms local tick const int NetTickScale = 3; // 120ms net tick for 40ms local tick
@@ -98,13 +91,33 @@ namespace OpenRA
ConnectionStateChanged( orderManager ); ConnectionStateChanged( orderManager );
} }
int t = Environment.TickCount; Tick( orderManager );
int dt = t - lastTime; if( orderManager.world != worldRenderer.world )
if (dt >= Settings.Game.Timestep) Tick( worldRenderer.world.orderManager );
using (new PerfSample("render"))
{ {
++RenderFrame;
viewport.DrawRegions(worldRenderer);
Sound.SetListenerPosition(viewport.Location + .5f * new float2(viewport.Width, viewport.Height));
}
PerfHistory.items["render"].Tick();
PerfHistory.items["batches"].Tick();
PerfHistory.items["text"].Tick();
PerfHistory.items["cursor"].Tick();
MasterServerQuery.Tick();
}
private static void Tick( OrderManager orderManager )
{
int t = Environment.TickCount;
int dt = t - orderManager.LastTickTime;
if (dt >= Settings.Game.Timestep)
using( new PerfSample( "tick_time" ) ) using( new PerfSample( "tick_time" ) )
{ {
lastTime += Settings.Game.Timestep; orderManager.LastTickTime += Settings.Game.Timestep;
Widget.DoTick(); Widget.DoTick();
var world = orderManager.world; var world = orderManager.world;
if( orderManager.GameStarted && world.LocalPlayer != null ) if( orderManager.GameStarted && world.LocalPlayer != null )
@@ -131,25 +144,10 @@ namespace OpenRA
} }
else else
if( orderManager.NetFrameNumber == 0 ) if( orderManager.NetFrameNumber == 0 )
lastTime = Environment.TickCount; orderManager.LastTickTime = Environment.TickCount;
} }
} }
using (new PerfSample("render"))
{
++RenderFrame;
viewport.DrawRegions(worldRenderer);
Sound.SetListenerPosition(viewport.Location + .5f * new float2(viewport.Width, viewport.Height));
}
PerfHistory.items["render"].Tick();
PerfHistory.items["batches"].Tick();
PerfHistory.items["text"].Tick();
PerfHistory.items["cursor"].Tick();
MasterServerQuery.Tick();
}
internal static event Action LobbyInfoChanged = () => { }; internal static event Action LobbyInfoChanged = () => { };
internal static void SyncLobbyInfo() internal static void SyncLobbyInfo()
@@ -288,7 +286,7 @@ namespace OpenRA
modData.WidgetLoader.LoadWidget( new Dictionary<string,object>(), Widget.RootWidget, "PERF_BG" ); modData.WidgetLoader.LoadWidget( new Dictionary<string,object>(), Widget.RootWidget, "PERF_BG" );
Widget.OpenWindow("MAINMENU_BG"); Widget.OpenWindow("MAINMENU_BG");
ResetTimer(); Game.orderManager.LastTickTime = Environment.TickCount;
} }
static bool quit; static bool quit;

View File

@@ -19,7 +19,7 @@ namespace OpenRA.Graphics
{ {
public class WorldRenderer public class WorldRenderer
{ {
readonly World world; public readonly World world;
internal readonly TerrainRenderer terrainRenderer; internal readonly TerrainRenderer terrainRenderer;
public readonly UiOverlay uiOverlay; public readonly UiOverlay uiOverlay;
internal readonly HardwarePalette palette; internal readonly HardwarePalette palette;

View File

@@ -32,6 +32,8 @@ namespace OpenRA.Network
public int LocalFrameNumber; public int LocalFrameNumber;
public int FramesAhead = 0; public int FramesAhead = 0;
public int LastTickTime = Environment.TickCount;
public bool GameStarted { get { return NetFrameNumber != 0; } } public bool GameStarted { get { return NetFrameNumber != 0; } }
public IConnection Connection { get; private set; } public IConnection Connection { get; private set; }

View File

@@ -76,7 +76,7 @@ namespace OpenRA.Widgets.Delegates
var mapButton = lobby.GetWidget("CHANGEMAP_BUTTON"); var mapButton = lobby.GetWidget("CHANGEMAP_BUTTON");
mapButton.OnMouseUp = mi => mapButton.OnMouseUp = mi =>
{ {
Widget.OpenWindow("MAP_CHOOSER").SpecialOneArg(MapUid); // WTF Widget.OpenWindow( "MAP_CHOOSER", new Dictionary<string, object> { { "orderManager", orderManager }, { "mapName", MapUid } } );
return true; return true;
}; };

View File

@@ -20,11 +20,17 @@ namespace OpenRA.Widgets.Delegates
MapStub Map = null; MapStub Map = null;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
internal MapChooserDelegate( [ObjectCreator.Param( "widget" )] Widget bg, [ObjectCreator.Param] OrderManager orderManager ) internal MapChooserDelegate(
[ObjectCreator.Param( "widget" )] Widget bg,
[ObjectCreator.Param] OrderManager orderManager,
[ObjectCreator.Param] string mapName )
{ {
bg.SpecialOneArg = (map) => RefreshMapList(map); if (mapName != null)
var ml = bg.GetWidget<ListBoxWidget>("MAP_LIST"); Map = Game.modData.AvailableMaps[mapName];
else
Map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Value;
var ml = bg.GetWidget<ListBoxWidget>("MAP_LIST");
bg.GetWidget<MapPreviewWidget>("MAPCHOOSER_MAP_PREVIEW").Map = () => Map; bg.GetWidget<MapPreviewWidget>("MAPCHOOSER_MAP_PREVIEW").Map = () => Map;
bg.GetWidget<LabelWidget>("CURMAP_TITLE").GetText = () => Map.Title; bg.GetWidget<LabelWidget>("CURMAP_TITLE").GetText = () => Map.Title;
bg.GetWidget<LabelWidget>("CURMAP_SIZE").GetText = () => "{0}x{1}".F(Map.Width, Map.Height); bg.GetWidget<LabelWidget>("CURMAP_SIZE").GetText = () => "{0}x{1}".F(Map.Width, Map.Height);
@@ -67,15 +73,5 @@ namespace OpenRA.Widgets.Delegates
ml.ContentHeight += template.Bounds.Height; ml.ContentHeight += template.Bounds.Height;
} }
} }
public void RefreshMapList(object uidobj)
{
// Set the default selected map
var uid = uidobj as string;
if (uid != null)
Map = Game.modData.AvailableMaps[uid];
else
Map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Value;
}
} }
} }

View File

@@ -39,7 +39,6 @@ namespace OpenRA.Widgets
public static Stack<Widget> WindowList = new Stack<Widget>(); public static Stack<Widget> WindowList = new Stack<Widget>();
// Common Funcs that most widgets will want // Common Funcs that most widgets will want
public Action<object> SpecialOneArg = (arg) => {};
public Func<MouseInput, bool> OnMouseDown = mi => false; public Func<MouseInput, bool> OnMouseDown = mi => false;
public Func<MouseInput, bool> OnMouseUp = mi => false; public Func<MouseInput, bool> OnMouseUp = mi => false;
public Func<MouseInput, bool> OnMouseMove = mi => false; public Func<MouseInput, bool> OnMouseMove = mi => false;

View File

@@ -29,7 +29,7 @@ namespace OpenRA
List<IEffect> effects = new List<IEffect>(); List<IEffect> effects = new List<IEffect>();
Queue<Action<World>> frameEndActions = new Queue<Action<World>>(); Queue<Action<World>> frameEndActions = new Queue<Action<World>>();
readonly OrderManager orderManager; internal readonly OrderManager orderManager;
public Session LobbyInfo { get { return orderManager.LobbyInfo; } } public Session LobbyInfo { get { return orderManager.LobbyInfo; } }
public XRandom SharedRandom = new XRandom(0); public XRandom SharedRandom = new XRandom(0);