git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1186 993157c7-ee19-0410-b2c4-bb4e9862e678
This commit is contained in:
55
OpenRa.Game/HardwarePalette.cs
Normal file
55
OpenRa.Game/HardwarePalette.cs
Normal 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++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user