diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index cb2e3fed1b..22631abbf8 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -100,7 +100,7 @@ namespace OpenRa.Game chrome = new Chrome(renderer); - oreFrequency = (int)(Rules.General.GrowthRate * 60 * 1000); + oreFrequency = (int)(Rules.General.GrowthRate * 60 * 25); oreTicks = oreFrequency; } @@ -182,11 +182,12 @@ namespace OpenRa.Game controller.orderGenerator.Tick(); if (--oreTicks == 0) - { using (new PerfSample("ore")) + { Rules.Map.GrowOre(SharedRandom); - oreTicks = oreFrequency; - } + minimap.InvalidateOre(); + oreTicks = oreFrequency; + } world.Tick(); UnitInfluence.Tick(); diff --git a/OpenRa.Game/Graphics/Minimap.cs b/OpenRa.Game/Graphics/Minimap.cs index 21031eb6e5..fbb13f3ef9 100644 --- a/OpenRa.Game/Graphics/Minimap.cs +++ b/OpenRa.Game/Graphics/Minimap.cs @@ -10,7 +10,7 @@ namespace OpenRa.Game.Graphics Sheet sheet; SpriteRenderer spriteRenderer; Sprite sprite; - Bitmap terrain; + Bitmap terrain, oreLayer; public void Tick() { } @@ -24,6 +24,8 @@ namespace OpenRa.Game.Graphics // todo: extract these from the palette Color[] terrainTypeColors; + public void InvalidateOre() { oreLayer = null; } + public void Update() { if (terrainTypeColors == null) @@ -39,8 +41,10 @@ namespace OpenRa.Game.Graphics pal.GetColor(0x1f), pal.GetColor(0x68), pal.GetColor(0x6b), + pal.GetColor(0x6d), }; } + if (terrain == null) { terrain = new Bitmap(128, 128); @@ -51,7 +55,16 @@ namespace OpenRa.Game.Graphics : Color.Black); } - var bitmap = new Bitmap(terrain); + if (oreLayer == null) + { + oreLayer = new Bitmap(terrain); + for (var y = 0; y < 128; y++) + for (var x = 0; x < 128; x++) + if (Rules.Map.ContainsResource(new int2(x, y))) + oreLayer.SetPixel(x, y, terrainTypeColors[(int)TerrainMovementType.Ore]); + } + + var bitmap = new Bitmap(oreLayer); for( var y = 0; y < 128; y++ ) for (var x = 0; x < 128; x++)