From 79bcb3c739f7d3b5b622f8b16a1d358e9ebdb36e Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 17 Mar 2010 19:31:19 +1300 Subject: [PATCH] SpawnMapActors trait on world actor is now responsible for spawning trees etc at gamestart time --- OpenRA.Game/Game.cs | 9 -------- OpenRA.Game/OpenRA.Game.csproj | 1 + OpenRA.Game/Traits/World/SpawnMapActors.cs | 24 ++++++++++++++++++++++ mods/cnc/system.yaml | 1 + mods/ra/rules.yaml | 1 + 5 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 OpenRA.Game/Traits/World/SpawnMapActors.cs diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index e5ab86ae3d..0670f2dfb8 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -120,15 +120,6 @@ namespace OpenRA viewport = new Viewport(clientSize, Game.world.Map.Offset, Game.world.Map.Offset + Game.world.Map.Size, renderer); Timer.Time( "ChromeProv, SeqProv, viewport: {0}" ); - // todo: delay this - skipMakeAnims = true; - foreach (var actorReference in world.Map.Actors) - world.CreateActor(actorReference.Name, actorReference.Location, - world.players.Values.FirstOrDefault(p => p.InternalName == actorReference.Owner) - ?? world.NeutralPlayer); - skipMakeAnims = false; - Timer.Time( "map actors: {0}" ); - chrome = new Chrome(renderer, manifest); Timer.Time( "chrome: {0}" ); diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 70b7889425..22dfed001e 100644 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -258,6 +258,7 @@ + diff --git a/OpenRA.Game/Traits/World/SpawnMapActors.cs b/OpenRA.Game/Traits/World/SpawnMapActors.cs new file mode 100644 index 0000000000..a2ffb81fcf --- /dev/null +++ b/OpenRA.Game/Traits/World/SpawnMapActors.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OpenRA.Traits +{ + class SpawnMapActorsInfo : StatelessTraitInfo { } + + class SpawnMapActors : IGameStarted + { + public void GameStarted(World world) + { + Game.skipMakeAnims = true; // rude hack + + foreach (var actorReference in world.Map.Actors) + world.CreateActor(actorReference.Name, actorReference.Location, + world.players.Values.FirstOrDefault(p => p.InternalName == actorReference.Owner) + ?? world.NeutralPlayer); + + Game.skipMakeAnims = false; + } + } +} diff --git a/mods/cnc/system.yaml b/mods/cnc/system.yaml index b94af8e34c..0b538cf709 100644 --- a/mods/cnc/system.yaml +++ b/mods/cnc/system.yaml @@ -207,4 +207,5 @@ World: Name: Tiberium GrowthInterval: 1 SpreadInterval: 6 + SpawnMapActors: SpawnDefaultUnits: \ No newline at end of file diff --git a/mods/ra/rules.yaml b/mods/ra/rules.yaml index 5af5dd605a..7662fb485d 100644 --- a/mods/ra/rules.yaml +++ b/mods/ra/rules.yaml @@ -265,6 +265,7 @@ World: Templates:templates.ini Tileset:tileSet.til MapColors:temperat.col + SpawnMapActors: SpawnDefaultUnits: MGG: