From 83a0da9fee0b37a7cfdf2b6bace655f1d62d4b3e Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 1 Dec 2009 21:44:26 +1300 Subject: [PATCH] fixes --- OpenRa.Game/Game.cs | 4 ++-- OpenRa.Game/MainWindow.cs | 2 +- OpenRa.Game/OrderManager.cs | 21 +++++++++++---------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 1b7bc12b36..1842965afc 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -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; diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index 2c608a8977..79a0289a23 100755 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -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( diff --git a/OpenRa.Game/OrderManager.cs b/OpenRa.Game/OrderManager.cs index bdb8f37f02..31af937afe 100755 --- a/OpenRa.Game/OrderManager.cs +++ b/OpenRa.Game/OrderManager.cs @@ -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> orderBuffers = new Dictionary>(); @@ -178,28 +179,28 @@ namespace OpenRa.Game lock (orderBuffers) { List result; - return orderBuffers.TryGetValue(frame, out result) - ? result : NoOrders; + if (!orderBuffers.TryGetValue(frame, out result)) + result = NoOrders; + orderBuffers.Remove(frame); + return result; } } public List 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 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 )