git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1186 993157c7-ee19-0410-b2c4-bb4e9862e678

This commit is contained in:
chrisf
2007-07-13 02:00:34 +00:00
parent 791fc7029d
commit ee52ca58f1
4 changed files with 89 additions and 11 deletions

View File

@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Text;
using BluntDirectX.Direct3D;
using System.Drawing;
using System.IO;
using OpenRa.FileFormats;
namespace OpenRa.Game
{
class HardwarePalette
{
const int maxEntries = 16; // dont need anything like this many,
// but the hardware likes square textures better
Bitmap bitmap = new Bitmap(256, maxEntries);
GraphicsDevice device;
int allocated = 0;
Texture paletteTexture;
public HardwarePalette(GraphicsDevice device)
{
this.device = device;
}
public void Resolve()
{
const string filename = "../../../palette-cache.png";
bitmap.Save(filename);
using (Stream s = File.OpenRead(filename))
paletteTexture = Texture.Create(s, device);
}
public Texture PaletteTexture
{
get
{
if (paletteTexture == null)
Resolve();
return paletteTexture;
}
}
public int AddPalette(Palette p)
{
for (int i = 0; i < 256; i++)
bitmap.SetPixel(i, allocated, p.GetColor(i));
return allocated++;
}
}
}

View File

@@ -72,7 +72,13 @@ namespace OpenRa.Game
foreach (TreeReference treeReference in map.Trees) foreach (TreeReference treeReference in map.Trees)
world.Add(new Tree(treeReference, treeCache, map)); world.Add(new Tree(treeReference, treeCache, map));
UnitSheetBuilder.AddUnit( "mcv", renderer.Device, playerPal ); UnitSheetBuilder.AddUnit( "mcv", playerPal );
UnitSheetBuilder.AddUnit("1tnk", playerPal);
UnitSheetBuilder.AddUnit("2tnk", playerPal);
UnitSheetBuilder.AddUnit("3tnk", playerPal);
UnitSheetBuilder.Resolve(renderer.Device);
world.Add( new Mcv( new PointF( 24 * 5, 24 * 5 ) ) ); world.Add( new Mcv( new PointF( 24 * 5, 24 * 5 ) ) );
} }
@@ -217,6 +223,15 @@ namespace OpenRa.Game
playerPal = new Palette(pal, new PaletteRemap(File.OpenRead("../../../red.rem"))); playerPal = new Palette(pal, new PaletteRemap(File.OpenRead("../../../red.rem")));
HardwarePalette hardwarePalette = new HardwarePalette(renderer.Device);
hardwarePalette.AddPalette(pal);
foreach (string remap in new string[] { "blue", "red", "orange", "teal", "salmon", "green", "gray" })
hardwarePalette.AddPalette(new Palette(pal, new PaletteRemap(
File.OpenRead("../../../" + remap + ".rem"))));
hardwarePalette.Resolve();
return new TileSet(TileMix, TileSuffix, pal); return new TileSet(TileMix, TileSuffix, pal);
} }
} }

View File

@@ -42,6 +42,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="Actor.cs" /> <Compile Include="Actor.cs" />
<Compile Include="Clock.cs" /> <Compile Include="Clock.cs" />
<Compile Include="HardwarePalette.cs" />
<Compile Include="MainWindow.cs"> <Compile Include="MainWindow.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>

View File

@@ -12,20 +12,30 @@ namespace OpenRa.Game
static readonly Package unitsPackage = new Package( "../../../conquer.mix" ); static readonly Package unitsPackage = new Package( "../../../conquer.mix" );
public static readonly List<SheetRectangle<Sheet>> McvSheet = new List<SheetRectangle<Sheet>>(); public static readonly List<SheetRectangle<Sheet>> McvSheet = new List<SheetRectangle<Sheet>>();
public static void AddUnit( string name, GraphicsDevice device, Palette pal ) static TileSheetBuilder<Sheet> builder;
{ static List<Sheet> sheets = new List<Sheet>();
List<Sheet> sheets = new List<Sheet>(); static Size pageSize = new Size(1024, 512);
Size pageSize = new Size( 1024, 512 );
static UnitSheetBuilder()
{
Provider<Sheet> sheetProvider = delegate Provider<Sheet> sheetProvider = delegate
{ {
Sheet sheet = new Sheet( new Bitmap( pageSize.Width, pageSize.Height ) ); Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height));
sheets.Add( sheet ); sheets.Add(sheet);
return sheet; return sheet;
}; };
TileSheetBuilder<Sheet> builder = new TileSheetBuilder<Sheet>( pageSize, sheetProvider ); builder = new TileSheetBuilder<Sheet>(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" ) ); ShpReader reader = new ShpReader( unitsPackage.GetContent( name + ".shp" ) );
foreach( ImageHeader h in reader ) foreach( ImageHeader h in reader )
{ {
@@ -37,9 +47,6 @@ namespace OpenRa.Game
McvSheet.Add( rect ); McvSheet.Add( rect );
} }
foreach( Sheet sheet in sheets )
sheet.LoadTexture( device );
} }
} }
} }