This commit is contained in:
Chris Forbes
2009-12-01 21:44:26 +13:00
parent aa4517c7ab
commit 83a0da9fee
3 changed files with 14 additions and 13 deletions

View File

@@ -174,7 +174,7 @@ namespace OpenRa.Game
if (orderManager.IsReadyForNextFrame)
{
orderManager.Tick();
orderManager.Tick(false);
if (controller.orderGenerator != null)
controller.orderGenerator.Tick();
@@ -191,7 +191,7 @@ namespace OpenRa.Game
player.Tick();
}
else
orderManager.Tick();
orderManager.Tick(true);
// if (orderManager.FrameNumber == 0)
//{
// lastTime = Environment.TickCount;

View File

@@ -129,7 +129,7 @@ namespace OpenRa.Game
base.OnKeyDown(e);
/* hack hack hack */
if (e.KeyCode == Keys.F8)
if (e.KeyCode == Keys.F8 && !Game.orderManager.GameStarted)
{
Game.LocalPlayer.IsReady ^= true;
Game.controller.AddOrder(

View File

@@ -19,6 +19,8 @@ namespace OpenRa.Game
public void StartGame()
{
if (GameStarted) return;
frameNumber = 1;
foreach (var p in this.sources)
for (int i = frameNumber; i <= FramesAhead; i++)
@@ -49,7 +51,7 @@ namespace OpenRa.Game
}
}
public void Tick()
public void Tick( bool immediateOnly )
{
var localOrders = Game.controller.GetRecentOrders();
@@ -63,7 +65,7 @@ namespace OpenRa.Game
if( savingReplay != null )
savingReplay.WriteFrameData( allOrders, frameNumber );
if (frameNumber != 0)
if (frameNumber != 0 && !immediateOnly)
++frameNumber; /* game hasnt started yet.. */
// sanity check on the framenumber. This is 2^31 frames maximum, or multiple *years* at 40ms/frame.
@@ -141,7 +143,6 @@ namespace OpenRa.Game
class NetworkOrderSource : OrderSource
{
// int nextLocalOrderFrame = 1;
TcpClient socket;
Dictionary<int, List<byte[]>> orderBuffers = new Dictionary<int, List<byte[]>>();
@@ -178,28 +179,28 @@ namespace OpenRa.Game
lock (orderBuffers)
{
List<byte[]> result;
return orderBuffers.TryGetValue(frame, out result)
? result : NoOrders;
if (!orderBuffers.TryGetValue(frame, out result))
result = NoOrders;
orderBuffers.Remove(frame);
return result;
}
}
public List<Order> OrdersForFrame( int currentFrame )
{
var orderData = ExtractOrders(currentFrame);
/* todo: immediate orders hooked in here? */
if (currentFrame != 0)
orderData.AddRange(ExtractOrders(0));
return orderData.SelectMany(a => a.ToOrderList()).ToList();
}
public void SendLocalOrders( int localFrame, List<Order> localOrders )
{
// if( nextLocalOrderFrame != localFrame )
// throw new InvalidOperationException( "Attempted time-travel in NetworkOrderSource.SendLocalOrders()" );
socket.GetStream().WriteFrameData(
localOrders.Where(o => o.IsImmediate), 0);
socket.GetStream().WriteFrameData(
localOrders.Where( o => !o.IsImmediate ), localFrame );//nextLocalOrderFrame++ );
localOrders.Where( o => !o.IsImmediate ), localFrame );
}
public bool IsReadyForFrame( int frameNumber )