using System; using System.Collections.Generic; using System.Text; using OpenRa.FileFormats; using System.Drawing; using BluntDirectX.Direct3D; namespace OpenRa.Game { static class UnitSheetBuilder { static readonly Package unitsPackage = new Package( "../../../conquer.mix" ); public static readonly List> McvSheet = new List>(); static TileSheetBuilder builder; static List sheets = new List(); static Size pageSize = new Size(1024, 512); static UnitSheetBuilder() { Provider sheetProvider = delegate { Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height)); sheets.Add(sheet); return sheet; }; builder = new TileSheetBuilder(pageSize, sheetProvider); } public static void Resolve( GraphicsDevice device ) { foreach (Sheet sheet in sheets) sheet.LoadTexture(device); } public static void AddUnit( string name, Palette pal ) { ShpReader reader = new ShpReader( unitsPackage.GetContent( name + ".shp" ) ); foreach( ImageHeader h in reader ) { Bitmap bitmap = BitmapBuilder.FromBytes( h.Image, reader.Width, reader.Height, pal ); SheetRectangle rect = builder.AddImage( bitmap.Size ); using( Graphics g = Graphics.FromImage( rect.sheet.bitmap ) ) g.DrawImage( bitmap, rect.origin ); McvSheet.Add( rect ); } } } }