46 lines
1.3 KiB
C#
46 lines
1.3 KiB
C#
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<SheetRectangle<Sheet>> McvSheet = new List<SheetRectangle<Sheet>>();
|
|
|
|
public static void AddUnit( string name, GraphicsDevice device, Palette pal )
|
|
{
|
|
List<Sheet> sheets = new List<Sheet>();
|
|
Size pageSize = new Size( 1024, 512 );
|
|
|
|
Provider<Sheet> sheetProvider = delegate
|
|
{
|
|
Sheet sheet = new Sheet( new Bitmap( pageSize.Width, pageSize.Height ) );
|
|
sheets.Add( sheet );
|
|
return sheet;
|
|
};
|
|
|
|
TileSheetBuilder<Sheet> builder = new TileSheetBuilder<Sheet>( pageSize, sheetProvider );
|
|
|
|
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<Sheet> rect = builder.AddImage( bitmap.Size );
|
|
using( Graphics g = Graphics.FromImage( rect.sheet.bitmap ) )
|
|
g.DrawImage( bitmap, rect.origin );
|
|
|
|
McvSheet.Add( rect );
|
|
}
|
|
|
|
foreach( Sheet sheet in sheets )
|
|
sheet.LoadTexture( device );
|
|
}
|
|
}
|
|
}
|