fix crash in engine for missing rules sections (music, etc)
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Drawing;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using OpenRA.FileFormats;
|
using OpenRA.FileFormats;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
|
||||||
namespace OpenRA.Editor
|
namespace OpenRA.Editor
|
||||||
{
|
{
|
||||||
@@ -22,13 +23,13 @@ namespace OpenRA.Editor
|
|||||||
foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg);
|
foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg);
|
||||||
|
|
||||||
// load the map
|
// load the map
|
||||||
var map = new Map(new Folder("mods/ra/maps/mjolnir"));
|
var map = new Map(new Folder("mods/ra/maps/scm01ea"));
|
||||||
|
|
||||||
// we're also going to need a tileset...
|
// we're also going to need a tileset...
|
||||||
var tsinfo = fileMapping[Pair.New(mods[0], map.Theater)];
|
var tsinfo = fileMapping[Pair.New(mods[0], map.Theater)];
|
||||||
var tileset = new TileSet("tileset.til", "templates.ini", tsinfo.First);
|
var tileset = new TileSet("tileset.til", "templates.ini", tsinfo.First);
|
||||||
|
|
||||||
var palette = new Palette( FileSystem.Open( map.Theater.ToLowerInvariant() + ".pal" ), true);
|
var palette = new Palette(FileSystem.Open(map.Theater.ToLowerInvariant() + ".pal"), true);
|
||||||
|
|
||||||
surface1.TileSet = tileset;
|
surface1.TileSet = tileset;
|
||||||
surface1.Map = map;
|
surface1.Map = map;
|
||||||
@@ -36,7 +37,7 @@ namespace OpenRA.Editor
|
|||||||
|
|
||||||
// construct the palette of tiles
|
// construct the palette of tiles
|
||||||
|
|
||||||
foreach( var n in tileset.tiles.Keys )
|
foreach (var n in tileset.tiles.Keys)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -94,18 +95,27 @@ namespace OpenRA.Editor
|
|||||||
var tile = ts.tiles[n];
|
var tile = ts.tiles[n];
|
||||||
|
|
||||||
var bitmap = new Bitmap(24 * template.Size.X, 24 * template.Size.Y);
|
var bitmap = new Bitmap(24 * template.Size.X, 24 * template.Size.Y);
|
||||||
|
var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
||||||
|
ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
||||||
|
|
||||||
for( var u = 0; u < template.Size.X; u++ )
|
unsafe
|
||||||
for( var v = 0; v < template.Size.Y; v++ )
|
{
|
||||||
if (template.TerrainType.ContainsKey(u + v * template.Size.X))
|
int* q = (int*)data.Scan0.ToPointer();
|
||||||
{
|
var stride = data.Stride >> 2;
|
||||||
var rawImage = tile.TileBitmapBytes[u + v * template.Size.X];
|
|
||||||
for (var i = 0; i < 24; i++)
|
|
||||||
for (var j = 0; j < 24; j++)
|
|
||||||
bitmap.SetPixel(u * 24 + i, v * 24 + j, p.GetColor(rawImage[i + 24 * j]));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
for (var u = 0; u < template.Size.X; u++)
|
||||||
|
for (var v = 0; v < template.Size.Y; v++)
|
||||||
|
if (template.TerrainType.ContainsKey(u + v * template.Size.X))
|
||||||
|
{
|
||||||
|
var rawImage = tile.TileBitmapBytes[u + v * template.Size.X];
|
||||||
|
for (var i = 0; i < 24; i++)
|
||||||
|
for (var j = 0; j < 24; j++)
|
||||||
|
q[(v * 24 + j) * stride + u * 24 + i] = p.GetColor(rawImage[i + 24 * j]).ToArgb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bitmap.UnlockBits(data);
|
||||||
return bitmap;
|
return bitmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ namespace OpenRA.Editor
|
|||||||
UpdateStyles();
|
UpdateStyles();
|
||||||
}
|
}
|
||||||
|
|
||||||
static readonly Pen RedPen = new Pen(Color.Red);
|
static readonly Pen CordonPen = new Pen(Color.Red);
|
||||||
int2 MousePos;
|
int2 MousePos;
|
||||||
|
|
||||||
protected override void OnMouseMove(MouseEventArgs e)
|
protected override void OnMouseMove(MouseEventArgs e)
|
||||||
@@ -86,9 +86,6 @@ namespace OpenRA.Editor
|
|||||||
var bitmap = new Bitmap(ChunkSize * 24, ChunkSize * 24);
|
var bitmap = new Bitmap(ChunkSize * 24, ChunkSize * 24);
|
||||||
bitmap.SetPixel(0, 0, Color.Green);
|
bitmap.SetPixel(0, 0, Color.Green);
|
||||||
|
|
||||||
var hx = Math.Min(Map.Width - u * ChunkSize, ChunkSize);
|
|
||||||
var hy = Math.Min(Map.Height - v * ChunkSize, ChunkSize);
|
|
||||||
|
|
||||||
var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
||||||
ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
||||||
|
|
||||||
@@ -97,8 +94,8 @@ namespace OpenRA.Editor
|
|||||||
int* p = (int*)data.Scan0.ToPointer();
|
int* p = (int*)data.Scan0.ToPointer();
|
||||||
var stride = data.Stride >> 2;
|
var stride = data.Stride >> 2;
|
||||||
|
|
||||||
for (var i = 0; i < hx; i++)
|
for (var i = 0; i < ChunkSize; i++)
|
||||||
for (var j = 0; j < hy; j++)
|
for (var j = 0; j < ChunkSize; j++)
|
||||||
{
|
{
|
||||||
var tr = Map.MapTiles[u * ChunkSize + i, v * ChunkSize + j];
|
var tr = Map.MapTiles[u * ChunkSize + i, v * ChunkSize + j];
|
||||||
var tile = TileSet.tiles[tr.type];
|
var tile = TileSet.tiles[tr.type];
|
||||||
@@ -126,14 +123,17 @@ namespace OpenRA.Editor
|
|||||||
if (Map == null) return;
|
if (Map == null) return;
|
||||||
if (TileSet == null) return;
|
if (TileSet == null) return;
|
||||||
|
|
||||||
for( var u = Map.TopLeft.X - Map.TopLeft.X % ChunkSize; u < Map.BottomRight.X; u += ChunkSize )
|
for( var u = Map.TopLeft.X - Map.TopLeft.X % ChunkSize; u <= Map.BottomRight.X; u += ChunkSize )
|
||||||
for (var v = Map.TopLeft.Y - Map.TopLeft.Y % ChunkSize; v < Map.BottomRight.Y; v += ChunkSize)
|
for (var v = Map.TopLeft.Y - Map.TopLeft.Y % ChunkSize; v <= Map.BottomRight.Y; v += ChunkSize)
|
||||||
{
|
{
|
||||||
var x = new int2(u/ChunkSize,v/ChunkSize);
|
var x = new int2(u/ChunkSize,v/ChunkSize);
|
||||||
if (!Chunks.ContainsKey(x)) Chunks[x] = RenderChunk(u / ChunkSize, v / ChunkSize);
|
if (!Chunks.ContainsKey(x)) Chunks[x] = RenderChunk(u / ChunkSize, v / ChunkSize);
|
||||||
e.Graphics.DrawImage(Chunks[x], (24 * ChunkSize * x + Offset).ToPoint());
|
e.Graphics.DrawImage(Chunks[x], (24 * ChunkSize * x + Offset).ToPoint());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e.Graphics.DrawRectangle(CordonPen,
|
||||||
|
new Rectangle(Map.XOffset * 24 + Offset.X, Map.YOffset * 24 + Offset.Y, Map.Width * 24, Map.Height * 24));
|
||||||
|
|
||||||
if (Brush.Second != null)
|
if (Brush.Second != null)
|
||||||
e.Graphics.DrawImage(Brush.Second,
|
e.Graphics.DrawImage(Brush.Second,
|
||||||
(24 * GetBrushLocation() + Offset).ToPoint());
|
(24 * GetBrushLocation() + Offset).ToPoint());
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ namespace OpenRA.FileFormats
|
|||||||
ShellmapUid = yaml["ShellmapUid"].Value;
|
ShellmapUid = yaml["ShellmapUid"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static string[] YamlList(Dictionary<string, MiniYaml> ys, string key) { return ys[key].Nodes.Keys.ToArray(); }
|
static string[] YamlList(Dictionary<string, MiniYaml> ys, string key)
|
||||||
|
{
|
||||||
|
return ys.ContainsKey(key) ? ys[key].Nodes.Keys.ToArray() : new string[] { };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user