fixed some things

This commit is contained in:
Chris Forbes
2009-12-01 22:36:06 +13:00
parent 83a0da9fee
commit ee3699ae0e
7 changed files with 55 additions and 26 deletions

View File

@@ -149,6 +149,9 @@ namespace OpenRA.Server
case ReceiveState.Data: case ReceiveState.Data:
{ {
if (bytes.Length > 0)
Console.WriteLine("{0} bytes", bytes.Length);
DispatchOrders(conn, conn.Frame, bytes); DispatchOrders(conn, conn.Frame, bytes);
conn.ExpectLength = 8; conn.ExpectLength = 8;
conn.State = ReceiveState.Header; conn.State = ReceiveState.Header;
@@ -203,10 +206,16 @@ namespace OpenRA.Server
case "ToggleReady": case "ToggleReady":
conn.IsReady ^= true; conn.IsReady ^= true;
Console.WriteLine("Player @{0} is {1}",
conn.socket.RemoteEndPoint, conn.IsReady ? "ready" : "not ready");
// start the game if everyone is ready. // start the game if everyone is ready.
if (conns.All(c => c.IsReady)) if (conns.All(c => c.IsReady))
{
Console.WriteLine("All players are ready. Starting the game!");
DispatchOrders(null, 0, DispatchOrders(null, 0,
new ServerOrder(0, "StartGame", "").Serialize()); new ServerOrder(0, "StartGame", "").Serialize());
}
break; break;
} }
} }

View File

@@ -33,11 +33,24 @@ namespace OpenRa.Game
public void AddOrder(Order o) { recentOrders.Add(o); } public void AddOrder(Order o) { recentOrders.Add(o); }
public List<Order> GetRecentOrders() public List<Order> GetRecentOrders( bool imm )
{ {
var ret = recentOrders; if (imm)
recentOrders = new List<Order>(); {
return ret; var result = recentOrders.Where(o => o.IsImmediate).ToList();
recentOrders.RemoveAll(o => o.IsImmediate);
return result;
}
else
{
var result = recentOrders.Where(o => !o.IsImmediate).ToList();
recentOrders.RemoveAll(o => !o.IsImmediate);
return result;
}
//var ret = recentOrders;
//recentOrders = new List<Order>();
//return ret;
} }
static string GetVoiceSuffix(Actor unit) static string GetVoiceSuffix(Actor unit)

View File

@@ -172,9 +172,11 @@ namespace OpenRa.Game
{ {
lastTime += timestep; lastTime += timestep;
orderManager.TickImmediate();
if (orderManager.IsReadyForNextFrame) if (orderManager.IsReadyForNextFrame)
{ {
orderManager.Tick(false); orderManager.Tick();
if (controller.orderGenerator != null) if (controller.orderGenerator != null)
controller.orderGenerator.Tick(); controller.orderGenerator.Tick();
@@ -191,11 +193,8 @@ namespace OpenRa.Game
player.Tick(); player.Tick();
} }
else else
orderManager.Tick(true); if (orderManager.FrameNumber == 0)
// if (orderManager.FrameNumber == 0) lastTime = Environment.TickCount;
//{
// lastTime = Environment.TickCount;
//}
} }
PerfHistory.Tick(); PerfHistory.Tick();

View File

@@ -134,7 +134,8 @@ namespace OpenRa.Game
Game.LocalPlayer.IsReady ^= true; Game.LocalPlayer.IsReady ^= true;
Game.controller.AddOrder( Game.controller.AddOrder(
new Order(Game.LocalPlayer, new Order(Game.LocalPlayer,
"ToggleReady", null, null, int2.Zero, "") { IsImmediate = true }); "ToggleReady", null, null, int2.Zero,
Game.LocalPlayer.IsReady ? "ready" : "not ready") { IsImmediate = true });
} }
} }

View File

@@ -30,6 +30,8 @@
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<StartupObject>
</StartupObject>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>

View File

@@ -51,28 +51,38 @@ namespace OpenRa.Game
} }
} }
public void Tick( bool immediateOnly ) public void TickImmediate()
{ {
var localOrders = Game.controller.GetRecentOrders(); var localOrders = Game.controller.GetRecentOrders(true);
if (localOrders.Count > 0)
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);
}
public void Tick()
{
var localOrders = Game.controller.GetRecentOrders(false);
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(); var allOrders = sources.SelectMany(p => p.OrdersForFrame(frameNumber)).OrderBy(o => o.Player.Index).ToList();
foreach (var order in allOrders) foreach (var order in allOrders)
UnitOrders.ProcessOrder(order); UnitOrders.ProcessOrder(order);
if( savingReplay != null ) if( savingReplay != null )
savingReplay.WriteFrameData( allOrders, frameNumber ); savingReplay.WriteFrameData( allOrders, frameNumber );
if (frameNumber != 0 && !immediateOnly) ++frameNumber;
++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" );
return;
} }
} }
@@ -97,6 +107,7 @@ namespace OpenRa.Game
public void SendLocalOrders( int localFrame, List<Order> localOrders ) public void SendLocalOrders( int localFrame, List<Order> localOrders )
{ {
if (localFrame == 0) return;
orders[ localFrame ] = localOrders; orders[ localFrame ] = localOrders;
} }
@@ -189,18 +200,12 @@ namespace OpenRa.Game
public List<Order> OrdersForFrame( int currentFrame ) public List<Order> OrdersForFrame( int currentFrame )
{ {
var orderData = ExtractOrders(currentFrame); var orderData = ExtractOrders(currentFrame);
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 )
{ {
socket.GetStream().WriteFrameData( socket.GetStream().WriteFrameData( localOrders, localFrame );
localOrders.Where(o => o.IsImmediate), 0);
socket.GetStream().WriteFrameData(
localOrders.Where( o => !o.IsImmediate ), localFrame );
} }
public bool IsReadyForFrame( int frameNumber ) public bool IsReadyForFrame( int frameNumber )

View File

@@ -99,7 +99,7 @@ namespace OpenRa.Game
} }
case "ToggleReady": case "ToggleReady":
{ {
Game.chat.AddLine(Pair.New(order.Player.PlayerName, "toggled ready status" )); Game.chat.AddLine(Pair.New(order.Player.PlayerName, "is " + order.TargetString ));
break; break;
} }
case "AssignPlayer": case "AssignPlayer":