fixes crash in netplay when the subject is killed.

This commit is contained in:
Chris Forbes
2009-12-18 07:58:37 +13:00
parent ac2b666366
commit 2d951c931d
2 changed files with 18 additions and 17 deletions

View File

@@ -52,6 +52,21 @@ namespace OpenRa.Game
}
}
void ProcessOrders(int frame, bool save)
{
var orders = sources
.SelectMany(s => s.OrdersForFrame(frame))
.Where(o => o.Validate()) /* drop bogus things */
.OrderBy(o => o.Player.Index)
.ToList();
foreach (var o in orders)
UnitOrders.ProcessOrder(o);
if (save && savingReplay != null)
savingReplay.WriteFrameData(orders, frame);
}
public void TickImmediate()
{
var localOrders = Game.controller.GetRecentOrders(true);
@@ -59,9 +74,7 @@ namespace OpenRa.Game
foreach (var p in sources)
p.SendLocalOrders(0, localOrders);
var immOrders = sources.SelectMany( p => p.OrdersForFrame(0) ).OrderBy(o => o.Player.Index).ToList();
foreach (var order in immOrders)
UnitOrders.ProcessOrder(order);
ProcessOrders(0, false);
}
public void Tick()
@@ -71,14 +84,8 @@ namespace OpenRa.Game
foreach( var p in sources )
p.SendLocalOrders( frameNumber + FramesAhead, localOrders );
var allOrders = sources.SelectMany(p => p.OrdersForFrame(frameNumber)).OrderBy(o => o.Player.Index).ToList();
foreach (var order in allOrders)
UnitOrders.ProcessOrder(order);
if( savingReplay != null )
savingReplay.WriteFrameData( allOrders, frameNumber );
ProcessOrders(frameNumber, true);
++frameNumber;
// sanity check on the framenumber. This is 2^31 frames maximum, or multiple *years* at 40ms/frame.