fixes crash in netplay when the subject is killed.
This commit is contained in:
@@ -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()
|
public void TickImmediate()
|
||||||
{
|
{
|
||||||
var localOrders = Game.controller.GetRecentOrders(true);
|
var localOrders = Game.controller.GetRecentOrders(true);
|
||||||
@@ -59,9 +74,7 @@ namespace OpenRa.Game
|
|||||||
foreach (var p in sources)
|
foreach (var p in sources)
|
||||||
p.SendLocalOrders(0, localOrders);
|
p.SendLocalOrders(0, localOrders);
|
||||||
|
|
||||||
var immOrders = sources.SelectMany( p => p.OrdersForFrame(0) ).OrderBy(o => o.Player.Index).ToList();
|
ProcessOrders(0, false);
|
||||||
foreach (var order in immOrders)
|
|
||||||
UnitOrders.ProcessOrder(order);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick()
|
public void Tick()
|
||||||
@@ -71,13 +84,7 @@ namespace OpenRa.Game
|
|||||||
foreach( var p in sources )
|
foreach( var p in sources )
|
||||||
p.SendLocalOrders( frameNumber + FramesAhead, localOrders );
|
p.SendLocalOrders( frameNumber + FramesAhead, localOrders );
|
||||||
|
|
||||||
var allOrders = sources.SelectMany(p => p.OrdersForFrame(frameNumber)).OrderBy(o => o.Player.Index).ToList();
|
ProcessOrders(frameNumber, true);
|
||||||
|
|
||||||
foreach (var order in allOrders)
|
|
||||||
UnitOrders.ProcessOrder(order);
|
|
||||||
|
|
||||||
if( savingReplay != null )
|
|
||||||
savingReplay.WriteFrameData( allOrders, frameNumber );
|
|
||||||
|
|
||||||
++frameNumber;
|
++frameNumber;
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ namespace OpenRa.Game
|
|||||||
{
|
{
|
||||||
public static void ProcessOrder( Order order )
|
public static void ProcessOrder( Order order )
|
||||||
{
|
{
|
||||||
if (!order.Validate())
|
|
||||||
{
|
|
||||||
/* todo: log this if we care */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch( order.OrderString )
|
switch( order.OrderString )
|
||||||
{
|
{
|
||||||
case "Move":
|
case "Move":
|
||||||
|
|||||||
Reference in New Issue
Block a user