From 00bc886b01622f056abf18429cd39e9f0f2e3362 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 27 Jan 2010 18:23:27 +1300 Subject: [PATCH] fix crash in minimap; constrain shroud to edge; fix some render dumbness --- OpenRa.Game/Graphics/Minimap.cs | 9 +++------ OpenRa.Game/Player.cs | 2 +- OpenRa.Game/Shroud.cs | 18 ++++++++++-------- OpenRa.Game/WorldUtils.cs | 8 ++++---- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/OpenRa.Game/Graphics/Minimap.cs b/OpenRa.Game/Graphics/Minimap.cs index be2af6772e..b56b91a53d 100644 --- a/OpenRa.Game/Graphics/Minimap.cs +++ b/OpenRa.Game/Graphics/Minimap.cs @@ -34,6 +34,9 @@ namespace OpenRa.Graphics sprite = new Sprite(sheet, rect, TextureChannel.Alpha); mapOnlySprite = new Sprite(mapOnlySheet, rect, TextureChannel.Alpha); + + playerColors = Util.MakeArray(8, b => Color.FromArgb(alpha, Chat.paletteColors[b])); + shroudColor = Color.FromArgb(alpha, Color.Black); } public static Rectangle MakeMinimapBounds(Map m) @@ -75,12 +78,6 @@ namespace OpenRa.Graphics public void Update() { - if (terrainTypeColors == null) - { - playerColors = Util.MakeArray( 8, b => Color.FromArgb(alpha, Chat.paletteColors[b]) ); - shroudColor = Color.FromArgb(alpha, Color.Black); - } - if (terrain == null) terrain = RenderTerrainBitmap(world.Map, world.TileSet); diff --git a/OpenRa.Game/Player.cs b/OpenRa.Game/Player.cs index 25060cd970..5bc3d9a6a5 100644 --- a/OpenRa.Game/Player.cs +++ b/OpenRa.Game/Player.cs @@ -32,7 +32,7 @@ namespace OpenRa public Player( World world, int index, Session.Client client ) { - Shroud = new Shroud(this); + Shroud = new Shroud(this, world.Map); this.PlayerActor = world.CreateActor("Player", new int2(int.MaxValue, int.MaxValue), this); this.Index = index; this.InternalName = "Multi{0}".F(index); diff --git a/OpenRa.Game/Shroud.cs b/OpenRa.Game/Shroud.cs index ad7b868f96..4b56ff74e6 100644 --- a/OpenRa.Game/Shroud.cs +++ b/OpenRa.Game/Shroud.cs @@ -5,6 +5,7 @@ using System.Text; using IjwFramework.Types; using OpenRa.Graphics; using OpenRa.Traits; +using OpenRa.FileFormats; namespace OpenRa { @@ -16,8 +17,9 @@ namespace OpenRa bool dirty = true; bool hasGPS = false; Player owner; + Map map; - public Shroud(Player owner) { this.owner = owner; } + public Shroud(Player owner, Map map) { this.owner = owner; this.map = map; } float gapOpaqueTicks = (int)(Rules.General.GapRegenInterval * 25 * 60); int[,] gapField = new int[128, 128]; @@ -145,15 +147,15 @@ namespace OpenRa if (dirty) { dirty = false; - for (int j = 1; j < 127; j++) - for (int i = 1; i < 127; i++) + for (int j = map.YOffset; j < map.YOffset + map.Height; j++) + for (int i = map.XOffset; i < map.XOffset + map.Width; i++) sprites[i, j] = ChooseShroud(i, j); } - for (var j = 1; j < 127; j++) + for (var j = map.YOffset; j < map.YOffset + map.Height; j++) { - var starti = 1; - for (var i = 1; i < 127; i++) + var starti = map.XOffset; + for (var i = map.XOffset; i < map.XOffset + map.Width; i++) { if (sprites[i, j] == shadowBits[0x0f]) continue; @@ -173,11 +175,11 @@ namespace OpenRa starti = i+1; } - if (starti < 127) + if (starti < map.XOffset + map.Width) r.DrawSprite(sprites[starti, j], Game.CellSize * new float2(starti, j), PaletteType.Shroud, - new float2(Game.CellSize * (127 - starti), Game.CellSize)); + new float2(Game.CellSize * (map.XOffset + map.Width - starti), Game.CellSize)); } } } diff --git a/OpenRa.Game/WorldUtils.cs b/OpenRa.Game/WorldUtils.cs index c4aca9bcf4..77fade7f71 100755 --- a/OpenRa.Game/WorldUtils.cs +++ b/OpenRa.Game/WorldUtils.cs @@ -79,10 +79,10 @@ namespace OpenRa { var min = a - new int2(r, r); var max = a + new int2(r, r); - if (min.X < 0) min.X = 0; - if (min.Y < 0) min.Y = 0; - if (max.X > 127) max.X = 127; - if (max.Y > 127) max.Y = 127; + if (min.X < world.Map.XOffset) min.X = world.Map.XOffset; + if (min.Y < world.Map.YOffset) min.Y = world.Map.YOffset; + if (max.X > world.Map.XOffset + world.Map.Width - 1) max.X = world.Map.XOffset + world.Map.Width - 1; + if (max.Y > world.Map.YOffset + world.Map.Height - 1) max.Y = world.Map.YOffset + world.Map.Height - 1; for (var j = min.Y; j <= max.Y; j++) for (var i = min.X; i <= max.X; i++)