using System; using System.Collections.Generic; using System.Text; using OpenRa.FileFormats; using BluntDirectX.Direct3D; using System.Drawing; namespace OpenRa.Game { class TreeCache { Dictionary> trees = new Dictionary>(); public readonly Sheet sh; public TreeCache(GraphicsDevice device, Map map, Package package, Palette pal) { Size pageSize = new Size(1024, 512); List sheets = new List(); Provider sheetProvider = delegate { Sheet sheet = new Sheet(new Bitmap(pageSize.Width, pageSize.Height), device); sheets.Add(sheet); return sheet; }; TileSheetBuilder builder = new TileSheetBuilder(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 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 GetImage(string tree) { return trees[tree]; } } }