Files
OpenRA/OpenRa.Game/TreeCache.cs
chrisf 2a076b34bf reduces duplication; textures get put in hardware on demand now.
git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1187 993157c7-ee19-0410-b2c4-bb4e9862e678
2007-07-13 02:06:38 +00:00

54 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using OpenRa.FileFormats;
using BluntDirectX.Direct3D;
using System.Drawing;
namespace OpenRa.Game
{
class TreeCache
{
Dictionary<string, SheetRectangle<Sheet>> trees = new Dictionary<string, SheetRectangle<Sheet>>();
public readonly Sheet sh;
public TreeCache(GraphicsDevice device, Map map, Package package, Palette pal)
{
Size pageSize = new Size(1024, 512);
List<Sheet> sheets = new List<Sheet>();
Provider<Sheet> sheetProvider = delegate
{
Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height), device);
sheets.Add(sheet);
return sheet;
};
TileSheetBuilder<Sheet> builder = new TileSheetBuilder<Sheet>(pageSize, sheetProvider);
foreach (TreeReference r in map.Trees)
{
if (trees.ContainsKey(r.Image))
continue;
ShpReader reader = new ShpReader(package.GetContent(r.Image + "." + map.Theater.Substring(0, 3)));
Bitmap bitmap = BitmapBuilder.FromBytes(reader[0].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);
trees.Add(r.Image, rect);
}
sh = sheets[0];
}
public SheetRectangle<Sheet> GetImage(string tree)
{
return trees[tree];
}
}
}