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)
|
foreach (var player in players.Values)
|
||||||
player.Tick();
|
player.Tick();
|
||||||
}
|
}
|
||||||
else if (orderManager.FrameNumber == 0)
|
else
|
||||||
lastTime = Environment.TickCount;
|
orderManager.Tick();
|
||||||
|
// if (orderManager.FrameNumber == 0)
|
||||||
|
//{
|
||||||
|
// lastTime = Environment.TickCount;
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
PerfHistory.Tick();
|
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)
|
protected override void OnKeyPress(KeyPressEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnKeyPress(e);
|
base.OnKeyPress(e);
|
||||||
|
|||||||
@@ -15,8 +15,10 @@ namespace OpenRa.Game
|
|||||||
public readonly Actor TargetActor;
|
public readonly Actor TargetActor;
|
||||||
public readonly int2 TargetLocation;
|
public readonly int2 TargetLocation;
|
||||||
public readonly string TargetString;
|
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.Player = player;
|
||||||
this.OrderString = orderString;
|
this.OrderString = orderString;
|
||||||
@@ -71,7 +73,7 @@ namespace OpenRa.Game
|
|||||||
targetString = r.ReadString();
|
targetString = r.ReadString();
|
||||||
|
|
||||||
var player = Game.players.Where( x => x.Value.Index == playerID ).First().Value;
|
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:
|
default:
|
||||||
throw new NotImplementedException();
|
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.
|
// 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)
|
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)
|
public static Order Attack(Actor subject, Actor target)
|
||||||
|
|||||||
@@ -11,19 +11,25 @@ namespace OpenRa.Game
|
|||||||
{
|
{
|
||||||
Stream savingReplay;
|
Stream savingReplay;
|
||||||
List<OrderSource> sources;
|
List<OrderSource> sources;
|
||||||
int frameNumber = 1;
|
int frameNumber = 0;
|
||||||
|
|
||||||
const int FramesAhead = 3;
|
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 int FrameNumber { get { return frameNumber; } }
|
||||||
|
|
||||||
public OrderManager( IEnumerable<OrderSource> sources )
|
public OrderManager( IEnumerable<OrderSource> sources )
|
||||||
{
|
{
|
||||||
this.sources = sources.ToList();
|
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 )
|
public OrderManager( IEnumerable<OrderSource> sources, string replayFilename )
|
||||||
@@ -57,7 +63,9 @@ namespace OpenRa.Game
|
|||||||
if( savingReplay != null )
|
if( savingReplay != null )
|
||||||
savingReplay.WriteFrameData( allOrders, frameNumber );
|
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.
|
// sanity check on the framenumber. This is 2^31 frames maximum, or multiple *years* at 40ms/frame.
|
||||||
if( ( frameNumber & 0x80000000 ) != 0 )
|
if( ( frameNumber & 0x80000000 ) != 0 )
|
||||||
throw new InvalidOperationException( "(OrderManager) Frame number too large" );
|
throw new InvalidOperationException( "(OrderManager) Frame number too large" );
|
||||||
@@ -80,6 +88,8 @@ namespace OpenRa.Game
|
|||||||
public List<Order> OrdersForFrame( int currentFrame )
|
public List<Order> OrdersForFrame( int currentFrame )
|
||||||
{
|
{
|
||||||
// TODO: prune `orders` based on currentFrame.
|
// TODO: prune `orders` based on currentFrame.
|
||||||
|
if (!orders.ContainsKey(currentFrame))
|
||||||
|
return new List<Order>();
|
||||||
return orders[ currentFrame ];
|
return orders[ currentFrame ];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +141,7 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
class NetworkOrderSource : OrderSource
|
class NetworkOrderSource : OrderSource
|
||||||
{
|
{
|
||||||
int nextLocalOrderFrame = 1;
|
// 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[]>>();
|
||||||
@@ -183,10 +193,13 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
public void SendLocalOrders( int localFrame, List<Order> localOrders )
|
public void SendLocalOrders( int localFrame, List<Order> localOrders )
|
||||||
{
|
{
|
||||||
if( nextLocalOrderFrame != localFrame )
|
// if( nextLocalOrderFrame != localFrame )
|
||||||
throw new InvalidOperationException( "Attempted time-travel in NetworkOrderSource.SendLocalOrders()" );
|
// 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 )
|
public bool IsReadyForFrame( int frameNumber )
|
||||||
@@ -206,7 +219,7 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
static class OrderIO
|
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();
|
var ms = new MemoryStream();
|
||||||
ms.Write( BitConverter.GetBytes( nextLocalOrderFrame ) );
|
ms.Write( BitConverter.GetBytes( nextLocalOrderFrame ) );
|
||||||
@@ -215,7 +228,7 @@ namespace OpenRa.Game
|
|||||||
return ms;
|
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 );
|
var ms = orders.ToMemoryStream( frameNumber );
|
||||||
s.Write( BitConverter.GetBytes( (int)ms.Length ) );
|
s.Write( BitConverter.GetBytes( (int)ms.Length ) );
|
||||||
|
|||||||
Reference in New Issue
Block a user