run the shellmap even while the lobby shows. remove Widget.SpecialOneArg
This commit is contained in:
@@ -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,42 +91,9 @@ 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("tick_time"))
|
|
||||||
{
|
|
||||||
lastTime += Settings.Game.Timestep;
|
|
||||||
Widget.DoTick();
|
|
||||||
var world = orderManager.world;
|
|
||||||
if( orderManager.GameStarted && world.LocalPlayer != null )
|
|
||||||
++Viewport.TicksSinceLastMove;
|
|
||||||
Sound.Tick();
|
|
||||||
Sync.CheckSyncUnchanged( world, () => { orderManager.TickImmediate(); } );
|
|
||||||
|
|
||||||
var isNetTick = LocalTick % NetTickScale == 0;
|
|
||||||
|
|
||||||
if (!isNetTick || orderManager.IsReadyForNextFrame)
|
|
||||||
{
|
|
||||||
++orderManager.LocalFrameNumber;
|
|
||||||
|
|
||||||
Log.Write("debug", "--Tick: {0} ({1})", LocalTick, isNetTick ? "net" : "local");
|
|
||||||
|
|
||||||
if (isNetTick) orderManager.Tick();
|
|
||||||
|
|
||||||
world.OrderGenerator.Tick(world);
|
|
||||||
world.Selection.Tick(world);
|
|
||||||
world.Tick();
|
|
||||||
worldRenderer.Tick();
|
|
||||||
|
|
||||||
PerfHistory.Tick();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (orderManager.NetFrameNumber == 0)
|
|
||||||
lastTime = Environment.TickCount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
using (new PerfSample("render"))
|
using (new PerfSample("render"))
|
||||||
{
|
{
|
||||||
@@ -150,6 +110,44 @@ namespace OpenRA
|
|||||||
MasterServerQuery.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" ) )
|
||||||
|
{
|
||||||
|
orderManager.LastTickTime += Settings.Game.Timestep;
|
||||||
|
Widget.DoTick();
|
||||||
|
var world = orderManager.world;
|
||||||
|
if( orderManager.GameStarted && world.LocalPlayer != null )
|
||||||
|
++Viewport.TicksSinceLastMove;
|
||||||
|
Sound.Tick();
|
||||||
|
Sync.CheckSyncUnchanged( world, () => { orderManager.TickImmediate(); } );
|
||||||
|
|
||||||
|
var isNetTick = LocalTick % NetTickScale == 0;
|
||||||
|
|
||||||
|
if( !isNetTick || orderManager.IsReadyForNextFrame )
|
||||||
|
{
|
||||||
|
++orderManager.LocalFrameNumber;
|
||||||
|
|
||||||
|
Log.Write( "debug", "--Tick: {0} ({1})", LocalTick, isNetTick ? "net" : "local" );
|
||||||
|
|
||||||
|
if( isNetTick ) orderManager.Tick();
|
||||||
|
|
||||||
|
world.OrderGenerator.Tick( world );
|
||||||
|
world.Selection.Tick( world );
|
||||||
|
world.Tick();
|
||||||
|
worldRenderer.Tick();
|
||||||
|
|
||||||
|
PerfHistory.Tick();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( orderManager.NetFrameNumber == 0 )
|
||||||
|
orderManager.LastTickTime = Environment.TickCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user