fixes
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
Reference in New Issue
Block a user