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

View File

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

View File

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