frame0 runs continuously until game start (currently hacked onto F8)
This commit is contained in:
@@ -190,8 +190,12 @@ namespace OpenRa.Game
|
||||
foreach (var player in players.Values)
|
||||
player.Tick();
|
||||
}
|
||||
else if (orderManager.FrameNumber == 0)
|
||||
lastTime = Environment.TickCount;
|
||||
else
|
||||
orderManager.Tick();
|
||||
// if (orderManager.FrameNumber == 0)
|
||||
//{
|
||||
// lastTime = Environment.TickCount;
|
||||
//}
|
||||
}
|
||||
|
||||
PerfHistory.Tick();
|
||||
|
||||
@@ -124,6 +124,15 @@ namespace OpenRa.Game
|
||||
});
|
||||
}
|
||||
|
||||
protected override void OnKeyDown(KeyEventArgs e)
|
||||
{
|
||||
base.OnKeyDown(e);
|
||||
|
||||
/* hack hack hack */
|
||||
if (e.KeyCode == Keys.F8 && !Game.orderManager.GameStarted)
|
||||
Game.orderManager.StartGame();
|
||||
}
|
||||
|
||||
protected override void OnKeyPress(KeyPressEventArgs e)
|
||||
{
|
||||
base.OnKeyPress(e);
|
||||
|
||||
@@ -15,8 +15,10 @@ namespace OpenRa.Game
|
||||
public readonly Actor TargetActor;
|
||||
public readonly int2 TargetLocation;
|
||||
public readonly string TargetString;
|
||||
public bool IsImmediate;
|
||||
|
||||
Order(Player player, string orderString, Actor subject, Actor targetActor, int2 targetLocation, string targetString)
|
||||
Order(Player player, string orderString, Actor subject,
|
||||
Actor targetActor, int2 targetLocation, string targetString)
|
||||
{
|
||||
this.Player = player;
|
||||
this.OrderString = orderString;
|
||||
@@ -71,7 +73,7 @@ namespace OpenRa.Game
|
||||
targetString = r.ReadString();
|
||||
|
||||
var player = Game.players.Where( x => x.Value.Index == playerID ).First().Value;
|
||||
return new Order( player, order, subject, targetActor, targetLocation, targetString );
|
||||
return new Order( player, order, subject, targetActor, targetLocation, targetString);
|
||||
}
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
@@ -88,7 +90,8 @@ namespace OpenRa.Game
|
||||
// Now that Orders are resolved by individual Actors, these are weird; you unpack orders manually, but not pack them.
|
||||
public static Order Chat(Player subject, string text)
|
||||
{
|
||||
return new Order(subject, "Chat", null, null, int2.Zero, text);
|
||||
return new Order(subject, "Chat", null, null, int2.Zero, text)
|
||||
{ IsImmediate = true };
|
||||
}
|
||||
|
||||
public static Order Attack(Actor subject, Actor target)
|
||||
|
||||
@@ -11,19 +11,25 @@ namespace OpenRa.Game
|
||||
{
|
||||
Stream savingReplay;
|
||||
List<OrderSource> sources;
|
||||
int frameNumber = 1;
|
||||
int frameNumber = 0;
|
||||
|
||||
const int FramesAhead = 3;
|
||||
|
||||
public bool GameStarted { get { return frameNumber != 0; } }
|
||||
|
||||
public void StartGame()
|
||||
{
|
||||
frameNumber = 1;
|
||||
foreach (var p in this.sources)
|
||||
for (int i = frameNumber; i <= FramesAhead; i++)
|
||||
p.SendLocalOrders(i, new List<Order>());
|
||||
}
|
||||
|
||||
public int FrameNumber { get { return frameNumber; } }
|
||||
|
||||
public OrderManager( IEnumerable<OrderSource> sources )
|
||||
{
|
||||
this.sources = sources.ToList();
|
||||
|
||||
foreach( var p in this.sources )
|
||||
for( int i = 1 ; i <= FramesAhead ; i++ )
|
||||
p.SendLocalOrders( i, new List<Order>() );
|
||||
}
|
||||
|
||||
public OrderManager( IEnumerable<OrderSource> sources, string replayFilename )
|
||||
@@ -57,7 +63,9 @@ namespace OpenRa.Game
|
||||
if( savingReplay != null )
|
||||
savingReplay.WriteFrameData( allOrders, frameNumber );
|
||||
|
||||
++frameNumber;
|
||||
if (frameNumber != 0)
|
||||
++frameNumber; /* game hasnt started yet.. */
|
||||
|
||||
// sanity check on the framenumber. This is 2^31 frames maximum, or multiple *years* at 40ms/frame.
|
||||
if( ( frameNumber & 0x80000000 ) != 0 )
|
||||
throw new InvalidOperationException( "(OrderManager) Frame number too large" );
|
||||
@@ -80,6 +88,8 @@ namespace OpenRa.Game
|
||||
public List<Order> OrdersForFrame( int currentFrame )
|
||||
{
|
||||
// TODO: prune `orders` based on currentFrame.
|
||||
if (!orders.ContainsKey(currentFrame))
|
||||
return new List<Order>();
|
||||
return orders[ currentFrame ];
|
||||
}
|
||||
|
||||
@@ -131,7 +141,7 @@ namespace OpenRa.Game
|
||||
|
||||
class NetworkOrderSource : OrderSource
|
||||
{
|
||||
int nextLocalOrderFrame = 1;
|
||||
// int nextLocalOrderFrame = 1;
|
||||
TcpClient socket;
|
||||
|
||||
Dictionary<int, List<byte[]>> orderBuffers = new Dictionary<int, List<byte[]>>();
|
||||
@@ -183,10 +193,13 @@ namespace OpenRa.Game
|
||||
|
||||
public void SendLocalOrders( int localFrame, List<Order> localOrders )
|
||||
{
|
||||
if( nextLocalOrderFrame != localFrame )
|
||||
throw new InvalidOperationException( "Attempted time-travel in NetworkOrderSource.SendLocalOrders()" );
|
||||
// if( nextLocalOrderFrame != localFrame )
|
||||
// throw new InvalidOperationException( "Attempted time-travel in NetworkOrderSource.SendLocalOrders()" );
|
||||
|
||||
socket.GetStream().WriteFrameData( localOrders, nextLocalOrderFrame++ );
|
||||
socket.GetStream().WriteFrameData(
|
||||
localOrders.Where(o => o.IsImmediate), 0);
|
||||
socket.GetStream().WriteFrameData(
|
||||
localOrders.Where( o => !o.IsImmediate ), localFrame );//nextLocalOrderFrame++ );
|
||||
}
|
||||
|
||||
public bool IsReadyForFrame( int frameNumber )
|
||||
@@ -206,7 +219,7 @@ namespace OpenRa.Game
|
||||
|
||||
static class OrderIO
|
||||
{
|
||||
public static MemoryStream ToMemoryStream( this List<Order> orders, int nextLocalOrderFrame )
|
||||
public static MemoryStream ToMemoryStream( this IEnumerable<Order> orders, int nextLocalOrderFrame )
|
||||
{
|
||||
var ms = new MemoryStream();
|
||||
ms.Write( BitConverter.GetBytes( nextLocalOrderFrame ) );
|
||||
@@ -215,7 +228,7 @@ namespace OpenRa.Game
|
||||
return ms;
|
||||
}
|
||||
|
||||
public static void WriteFrameData( this Stream s, List<Order> orders, int frameNumber )
|
||||
public static void WriteFrameData( this Stream s, IEnumerable<Order> orders, int frameNumber )
|
||||
{
|
||||
var ms = orders.ToMemoryStream( frameNumber );
|
||||
s.Write( BitConverter.GetBytes( (int)ms.Length ) );
|
||||
|
||||
Reference in New Issue
Block a user