Ejemplo n.º 1
0
        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
                });
            }
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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>()
                });
            }
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
 Sprite[] CacheSpriteFrames(string filename)
 {
     using (var stream = GlobalFileSystem.OpenWithExts(filename, exts))
         return(SpriteSource.LoadSpriteSource(stream, filename).Frames
                .Select(a => SheetBuilder.Add(a))
                .ToArray());
 }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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");
            }
        }