diff --git a/OpenRA.FileFormats/Map/TileSet.cs b/OpenRA.FileFormats/Map/TileSet.cs index 2b7d8810a8..7c33da85f7 100644 --- a/OpenRA.FileFormats/Map/TileSet.cs +++ b/OpenRA.FileFormats/Map/TileSet.cs @@ -88,16 +88,12 @@ namespace OpenRA.FileFormats public byte[] GetBytes(TileReference r) { Terrain tile; - Log.Write("Attempting to load tile {0} {1}",r.type,r.image); try { if( tiles.TryGetValue( r.type, out tile ) ) return tile.TileBitmapBytes[ r.image ]; } - catch (System.ArgumentOutOfRangeException) - { - tiles.TryGetValue( 0xfffe, out tile ); - return tile.TileBitmapBytes[ 0 ]; - } + catch (System.ArgumentOutOfRangeException) { } + byte[] missingTile = new byte[ 24 * 24 ]; for( int i = 0 ; i < missingTile.Length ; i++ ) missingTile[ i ] = 0x36; diff --git a/OpenRA.Game/Graphics/Minimap.cs b/OpenRA.Game/Graphics/Minimap.cs index d45a570c51..452ffbe9c1 100644 --- a/OpenRA.Game/Graphics/Minimap.cs +++ b/OpenRA.Game/Graphics/Minimap.cs @@ -89,8 +89,8 @@ namespace OpenRA.Graphics public static Bitmap RenderTerrainBitmap(Map map, TileSet tileset) { var terrain = new Bitmap(map.MapSize.X, map.MapSize.Y); - for (var y = 0; y < map.MapSize.Y; y++) - for (var x = 0; x < map.MapSize.X; x++) + for (var x = 0; x < map.MapSize.X; x++) + for (var y = 0; y < map.MapSize.Y; y++) terrain.SetPixel(x, y, map.IsInMap(x, y) ? Color.FromArgb(alpha, terrainTypeColors[map.Theater].ColorForTerrainType(tileset.GetTerrainType(map.MapTiles[x, y]))) : shroudColor); @@ -117,8 +117,8 @@ namespace OpenRA.Graphics var res = world.WorldActor.traits.Get(); oreLayer = new Bitmap(terrain); - for (var y = world.Map.TopLeft.Y; y < world.Map.BottomRight.Y; y++) - for (var x = world.Map.TopLeft.X; x < world.Map.BottomRight.X; x++) + for (var x = world.Map.TopLeft.X; x < world.Map.BottomRight.X; x++) + for (var y = world.Map.TopLeft.Y; y < world.Map.BottomRight.Y; y++) if (res.GetResource(new int2(x,y)) != null) oreLayer.SetPixel(x, y, Color.FromArgb(alpha, terrainTypeColors[world.Map.Theater].ColorForTerrainType(TerrainType.Ore))); } @@ -140,8 +140,8 @@ namespace OpenRA.Graphics *(c + (a.Actor.Location.Y * bitmapData.Stride >> 2) + a.Actor.Location.X) = Color.FromArgb(alpha, a.Actor.Owner.Color).ToArgb(); - for (var y = world.Map.BottomRight.Y; y < world.Map.YOffset + world.Map.BottomRight.Y; y++) - for (var x = world.Map.TopLeft.X; x < world.Map.BottomRight.X; x++) + for (var x = world.Map.TopLeft.X; x < world.Map.BottomRight.X; x++) + for (var y = world.Map.TopLeft.Y; y < world.Map.BottomRight.Y; y++) { if (!world.LocalPlayer.Shroud.DisplayOnRadar(x, y)) { diff --git a/OpenRA.Game/Graphics/TerrainRenderer.cs b/OpenRA.Game/Graphics/TerrainRenderer.cs index 6b86a8546a..b0c5932d54 100644 --- a/OpenRA.Game/Graphics/TerrainRenderer.cs +++ b/OpenRA.Game/Graphics/TerrainRenderer.cs @@ -50,11 +50,10 @@ namespace OpenRA.Graphics int nv = 0; int ni = 0; - for( int i = map.TopLeft.X ; i < map.BottomRight.X; i++ ) - for( int j = map.TopLeft.Y ; j < map.BottomRight.Y; j++ ) + for( int j = map.TopLeft.Y ; j < map.BottomRight.Y; j++ ) + for( int i = map.TopLeft.X ; i < map.BottomRight.X; i++ ) { - Log.Write("{0} {1}",i,j); - Sprite tile = tileMapping[map.MapTiles[i, j]]; + Sprite tile = tileMapping[map.MapTiles[i, j]]; // TODO: The zero below should explicitly refer to the terrain palette, but this code is called // before the palettes are created Util.FastCreateQuad(vertices, indices, Game.CellSize * new float2(i, j), tile, 0, nv, ni, tile.size); diff --git a/OpenRA.Game/Traits/World/ResourceLayer.cs b/OpenRA.Game/Traits/World/ResourceLayer.cs index c6c890617e..2530663962 100644 --- a/OpenRA.Game/Traits/World/ResourceLayer.cs +++ b/OpenRA.Game/Traits/World/ResourceLayer.cs @@ -28,17 +28,9 @@ namespace OpenRA.Traits { public object Create(Actor self) { return new ResourceLayer(self); } } - - public class ResourceLayer// : IRenderOverlay, ILoadWorldHook - { - public ResourceLayer(Actor self) {} - public void Destroy(int2 p){} - public ResourceTypeInfo GetResource(int2 p) {return null;} - public ResourceTypeInfo Harvest(int2 p) {return null;} - public void AddResource(ResourceTypeInfo info, int i, int j, int n) {} - public void Grow(ResourceTypeInfo info) {} - public void Spread(ResourceTypeInfo info) {} - /* + + public class ResourceLayer: IRenderOverlay, ILoadWorldHook + { SpriteRenderer sr; World w; @@ -73,7 +65,7 @@ namespace OpenRA.Traits public void WorldLoaded(World w) { this.w = w; - content = new CellContents[w.Map.MapSize, w.Map.MapSize]; + content = new CellContents[w.Map.MapSize.X, w.Map.MapSize.Y]; resourceTypes = w.WorldActor.Info.Traits.WithInterface().ToArray(); foreach (var rt in resourceTypes) @@ -81,11 +73,11 @@ namespace OpenRA.Traits var map = w.Map; - for (int y = map.YOffset; y < map.YOffset + map.Height; y++) - for (int x = map.XOffset; x < map.XOffset + map.Width; x++) + for (int x = map.XOffset; x < map.XOffset + map.Width; x++) + for (int y = map.YOffset; y < map.YOffset + map.Height; y++) { content[x,y].type = resourceTypes.FirstOrDefault( - r => r.Overlays.Contains(w.Map.MapTiles[x, y].overlay)); + r => r.ResourceType == w.Map.MapResources[x,y].type); if (content[x, y].type != null) content[x, y].image = ChooseContent(content[x, y].type); } @@ -157,17 +149,14 @@ namespace OpenRA.Traits public void Grow(ResourceTypeInfo info) { var map = w.Map; - var mini = map.XOffset; var maxi = map.XOffset + map.Width; - var minj = map.YOffset; var maxj = map.YOffset + map.Height; - - var newDensity = new byte[map.MapSize, map.MapSize]; - for (int j = minj; j < maxj; j++) - for (int i = mini; i < maxi; i++) + var newDensity = new byte[map.MapSize.X, map.MapSize.Y]; + for (int i = map.TopLeft.X; i < map.BottomRight.X; i++) + for (int j = map.TopLeft.Y; j < map.BottomRight.Y; j++) if (content[i, j].type == info) newDensity[i, j] = (byte)GetIdealDensity(i, j); - for (int j = minj; j < maxj; j++) - for (int i = mini; i < maxi; i++) + for (int i = map.TopLeft.X; i < map.BottomRight.X; i++) + for (int j = map.TopLeft.Y; j < map.BottomRight.Y; j++) if (content[i, j].type == info && content[i, j].density < newDensity[i, j]) ++content[i, j].density; } @@ -179,16 +168,16 @@ namespace OpenRA.Traits var mini = map.XOffset; var maxi = map.XOffset + map.Width; var minj = map.YOffset; var maxj = map.YOffset + map.Height; - var growMask = new bool[map.MapSize, map.MapSize]; - for (int j = minj; j < maxj; j++) - for (int i = mini; i < maxi; i++) + var growMask = new bool[map.MapSize.X, map.MapSize.Y]; + for (int i = map.TopLeft.X; i < map.BottomRight.X; i++) + for (int j = map.TopLeft.Y; j < map.BottomRight.Y; j++) if (content[i,j].type == null && GetAdjacentCellsWith(info, i,j ) > 0 && w.IsCellBuildable(new int2(i, j), false)) growMask[i, j] = true; - for (int j = minj; j < maxj; j++) - for (int i = mini; i < maxi; i++) + for (int i = map.TopLeft.X; i < map.BottomRight.X; i++) + for (int j = map.TopLeft.Y; j < map.BottomRight.Y; j++) if (growMask[i, j]) { content[i, j].type = info; @@ -206,6 +195,5 @@ namespace OpenRA.Traits public Sprite[] image; public int density; } - */ } } diff --git a/OpenRA.Game/Traits/World/ResourceType.cs b/OpenRA.Game/Traits/World/ResourceType.cs index d2cec0017a..ae97171614 100644 --- a/OpenRA.Game/Traits/World/ResourceType.cs +++ b/OpenRA.Game/Traits/World/ResourceType.cs @@ -24,9 +24,9 @@ namespace OpenRA.Traits { public class ResourceTypeInfo : ITraitInfo { - public readonly string[] Overlays = { }; public readonly string[] SpriteNames = { }; public readonly string Palette = "terrain"; + public readonly int ResourceType = 1; public readonly int ValuePerUnit = 0; public readonly string Name = null; diff --git a/mods/cnc/system.yaml b/mods/cnc/system.yaml index 416be02de6..9dc036983e 100644 --- a/mods/cnc/system.yaml +++ b/mods/cnc/system.yaml @@ -209,7 +209,7 @@ World: OverlayTypes: barb ResourceLayer: ResourceType@green-tib: - Overlays: ti1,ti2,ti3,ti4,ti5,ti6,ti7,ti8,ti9,ti10,ti11,ti12 + ResourceType: 1 Palette: terrain SpriteNames: ti1,ti2,ti3,ti4,ti5,ti6,ti7,ti8,ti9,ti10,ti11,ti12 ValuePerUnit: 30 diff --git a/mods/ra/system.yaml b/mods/ra/system.yaml index 503d487a38..672d879acf 100644 --- a/mods/ra/system.yaml +++ b/mods/ra/system.yaml @@ -232,7 +232,7 @@ World: OverlayTypes: barb ResourceLayer: ResourceType@ore: - Overlays: gold01,gold02,gold03,gold04 + ResourceType: 1 Palette: terrain SpriteNames: gold01,gold02,gold03,gold04 ValuePerUnit: 25 @@ -240,7 +240,7 @@ World: GrowthInterval: 1.2 SpreadInterval: 2.0 ResourceType@gem: - Overlays: gem01,gem02,gem03,gem04 + ResourceType: 1 Palette: terrain SpriteNames: gem01,gem02,gem03,gem04 ValuePerUnit: 50