public static ResourceTemplate RenderResourceType(ResourceTypeInfo info, string[] exts, IPalette p) { var image = info.EditorSprite; using (var s = GlobalFileSystem.OpenWithExts(image, exts)) { // TODO: Do this properly var shp = new ShpReader(s) as ISpriteSource; var frame = shp.Frames.Last(); var bitmap = new Bitmap(frame.Size.Width, frame.Size.Height, PixelFormat.Format8bppIndexed); bitmap.Palette = p.AsSystemPalette(); var data = bitmap.LockBits(bitmap.Bounds(), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); unsafe { var q = (byte *)data.Scan0.ToPointer(); var stride = data.Stride; for (var i = 0; i < frame.Size.Width; i++) { for (var j = 0; j < frame.Size.Height; j++) { q[j * stride + i] = frame.Data[i + frame.Size.Width * j]; } } } bitmap.UnlockBits(data); return(new ResourceTemplate { Bitmap = bitmap, Info = info, Value = shp.Frames.Count - 1 }); } }
Sprite[] LoadTemplate(string filename, string[] exts, Dictionary <string, ISpriteSource> sourceCache, int[] frames) { ISpriteSource source; if (!sourceCache.ContainsKey(filename)) { using (var s = GlobalFileSystem.OpenWithExts(filename, exts)) source = SpriteSource.LoadSpriteSource(s, filename); if (source.CacheWhenLoadingTileset) { sourceCache.Add(filename, source); } } else { source = sourceCache[filename]; } if (frames != null) { var ret = new List <Sprite>(); var srcFrames = source.Frames.ToArray(); foreach (var i in frames) { ret.Add(sheetBuilder.Add(srcFrames[i])); } return(ret.ToArray()); } return(source.Frames.Select(f => sheetBuilder.Add(f)).ToArray()); }
public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, IPalette p) { var image = RenderSprites.GetImage(info); using (var s = GlobalFileSystem.OpenWithExts(image, tileset.Extensions)) { var shp = new ShpReader(s); var bitmap = RenderShp(shp, p); try { using (var s2 = GlobalFileSystem.OpenWithExts(image + "2", tileset.Extensions)) { var shp2 = new ShpReader(s2); var roofBitmap = RenderShp(shp2, p); using (var g = System.Drawing.Graphics.FromImage(bitmap)) g.DrawImage(roofBitmap, 0, 0); } } catch { } return(new ActorTemplate { Bitmap = bitmap, Info = info, Appearance = info.Traits.GetOrDefault <EditorAppearanceInfo>() }); } }
Voxel LoadFile(Pair <string, string> files) { var vxl = new VxlReader(GlobalFileSystem.OpenWithExts(files.First, ".vxl")); var hva = new HvaReader(GlobalFileSystem.OpenWithExts(files.Second, ".hva")); return(new Voxel(this, vxl, hva)); }
Sprite[] CacheSpriteFrames(string filename) { using (var stream = GlobalFileSystem.OpenWithExts(filename, exts)) return(SpriteSource.LoadSpriteSource(stream, filename).Frames .Select(a => SheetBuilder.Add(a)) .ToArray()); }
Voxel LoadFile(Pair <string, string> files) { VxlReader vxl; HvaReader hva; using (var s = GlobalFileSystem.OpenWithExts(files.First, ".vxl")) vxl = new VxlReader(s); using (var s = GlobalFileSystem.OpenWithExts(files.Second, ".hva")) hva = new HvaReader(s); return(new Voxel(this, vxl, hva)); }
public static ISpriteFrame[] GetFrames(string filename, string[] exts, ISpriteLoader[] loaders) { using (var stream = GlobalFileSystem.OpenWithExts(filename, exts)) { ISpriteFrame[] frames; foreach (var loader in loaders) { if (loader.TryParseSprite(stream, out frames)) { return(frames); } } throw new InvalidDataException(filename + " is not a valid sprite file"); } }