merge Game.Init into PreInit; fix exploit involving chrome.CheckDeadTab; fixed cancel behaviour wrt canceling an item not currently in the queue (because of orderlag, etc)
This commit is contained in:
@@ -136,7 +136,6 @@ namespace OpenRA
|
|||||||
foreach (var q in tabImageNames)
|
foreach (var q in tabImageNames)
|
||||||
if (!Rules.TechTree.BuildableItems(world.LocalPlayer, q.Key).Any())
|
if (!Rules.TechTree.BuildableItems(world.LocalPlayer, q.Key).Any())
|
||||||
{
|
{
|
||||||
CheckDeadTab(world, q.Key);
|
|
||||||
if (currentTab == q.Key)
|
if (currentTab == q.Key)
|
||||||
currentTab = null;
|
currentTab = null;
|
||||||
}
|
}
|
||||||
@@ -544,13 +543,6 @@ namespace OpenRA
|
|||||||
paletteAnimating = true;
|
paletteAnimating = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckDeadTab( World world, string groupName )
|
|
||||||
{
|
|
||||||
var queue = world.LocalPlayer.PlayerActor.traits.Get<Traits.ProductionQueue>();
|
|
||||||
foreach( var item in queue.AllItems( groupName ) )
|
|
||||||
Game.IssueOrder(Order.CancelProduction(world.LocalPlayer, item.Item));
|
|
||||||
}
|
|
||||||
|
|
||||||
float? lastPowerProvidedPos;
|
float? lastPowerProvidedPos;
|
||||||
float? lastPowerDrainedPos;
|
float? lastPowerDrainedPos;
|
||||||
|
|
||||||
|
|||||||
@@ -181,29 +181,6 @@ namespace OpenRA
|
|||||||
viewport.Center(loc);
|
viewport.Center(loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void Initialize(Renderer renderer, int2 clientSize, int localPlayer, Controller controller)
|
|
||||||
{
|
|
||||||
Game.renderer = renderer;
|
|
||||||
Game.clientSize = clientSize;
|
|
||||||
|
|
||||||
Sound.Initialize();
|
|
||||||
PerfHistory.items["render"].hasNormalTick = false;
|
|
||||||
PerfHistory.items["batches"].hasNormalTick = false;
|
|
||||||
PerfHistory.items["text"].hasNormalTick = false;
|
|
||||||
PerfHistory.items["cursor"].hasNormalTick = false;
|
|
||||||
Game.controller = controller;
|
|
||||||
AvailableMaps = FindMaps(LobbyInfo.GlobalSettings.Mods);
|
|
||||||
|
|
||||||
ChangeMods();
|
|
||||||
|
|
||||||
if( Settings.Replay != "" )
|
|
||||||
orderManager = new OrderManager( new ReplayConnection( Settings.Replay ) );
|
|
||||||
else
|
|
||||||
JoinLocal();
|
|
||||||
|
|
||||||
LoadShellMap(new Manifest(LobbyInfo.GlobalSettings.Mods).ShellmapUid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string CurrentHost = "";
|
public static string CurrentHost = "";
|
||||||
public static int CurrentPort = 0;
|
public static int CurrentPort = 0;
|
||||||
internal static void JoinServer(string host, int port)
|
internal static void JoinServer(string host, int port)
|
||||||
@@ -493,7 +470,7 @@ namespace OpenRA
|
|||||||
desktopResolution.Height);
|
desktopResolution.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void PreInit(Settings settings)
|
public static void Initialize(Settings settings)
|
||||||
{
|
{
|
||||||
AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly;
|
AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly;
|
||||||
while (!Directory.Exists("mods"))
|
while (!Directory.Exists("mods"))
|
||||||
@@ -517,9 +494,24 @@ namespace OpenRA
|
|||||||
renderer = new Renderer(resolution, windowed);
|
renderer = new Renderer(resolution, windowed);
|
||||||
resolution = renderer.Resolution;
|
resolution = renderer.Resolution;
|
||||||
|
|
||||||
var controller = new Controller();
|
Game.controller = new Controller();
|
||||||
|
Game.clientSize = new int2(resolution);
|
||||||
|
|
||||||
|
Sound.Initialize();
|
||||||
|
PerfHistory.items["render"].hasNormalTick = false;
|
||||||
|
PerfHistory.items["batches"].hasNormalTick = false;
|
||||||
|
PerfHistory.items["text"].hasNormalTick = false;
|
||||||
|
PerfHistory.items["cursor"].hasNormalTick = false;
|
||||||
|
AvailableMaps = FindMaps(LobbyInfo.GlobalSettings.Mods);
|
||||||
|
|
||||||
|
ChangeMods();
|
||||||
|
|
||||||
Game.Initialize(renderer, new int2(resolution), Game.Settings.Player, controller);
|
if( Settings.Replay != "" )
|
||||||
|
orderManager = new OrderManager( new ReplayConnection( Settings.Replay ) );
|
||||||
|
else
|
||||||
|
JoinLocal();
|
||||||
|
|
||||||
|
LoadShellMap(new Manifest(LobbyInfo.GlobalSettings.Mods).ShellmapUid);
|
||||||
|
|
||||||
Game.ResetTimer();
|
Game.ResetTimer();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
static void Run( string[] args )
|
static void Run( string[] args )
|
||||||
{
|
{
|
||||||
Game.PreInit( new Settings( args ) );
|
Game.Initialize( new Settings( args ) );
|
||||||
Game.Run();
|
Game.Run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,8 +44,15 @@ namespace OpenRA.Traits
|
|||||||
public void Tick( Actor self )
|
public void Tick( Actor self )
|
||||||
{
|
{
|
||||||
foreach( var p in production )
|
foreach( var p in production )
|
||||||
|
{
|
||||||
|
while( p.Value.Count > 0 && !Rules.TechTree.BuildableItems( self.Owner, p.Key ).Contains( p.Value[ 0 ].Item ) )
|
||||||
|
{
|
||||||
|
self.Owner.GiveCash(p.Value[0].TotalCost - p.Value[0].RemainingCost); // refund what's been paid so far.
|
||||||
|
FinishProduction(p.Key);
|
||||||
|
}
|
||||||
if( p.Value.Count > 0 )
|
if( p.Value.Count > 0 )
|
||||||
(p.Value)[0].Tick( self.Owner );
|
( p.Value )[ 0 ].Tick( self.Owner );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResolveOrder( Actor self, Order order )
|
public void ResolveOrder( Actor self, Order order )
|
||||||
@@ -127,7 +134,7 @@ namespace OpenRA.Traits
|
|||||||
{
|
{
|
||||||
queue.RemoveAt(lastIndex);
|
queue.RemoveAt(lastIndex);
|
||||||
}
|
}
|
||||||
else
|
else if( lastIndex == 0 )
|
||||||
{
|
{
|
||||||
var item = queue[0];
|
var item = queue[0];
|
||||||
self.Owner.GiveCash(item.TotalCost - item.RemainingCost); // refund what's been paid so far.
|
self.Owner.GiveCash(item.TotalCost - item.RemainingCost); // refund what's been paid so far.
|
||||||
|
|||||||
Reference in New Issue
Block a user