private void InternalSaveStaticBitmaps(RepeatedField <uint> sprites, DrawBitmapsDelegate drawFunc, int parts, int spriteType, int localStart, Assets.ContentSprites sprParser, int width, int height)
        {
            int singleSize = width * height;

            AsyncGraphics gfx = new AsyncGraphics(new Bitmap(Program.SEGMENT_DIMENTION, Program.SEGMENT_DIMENTION));
            string        filename;

            int x = 0, y = 0, z = 0;

            for (int i = 0; i < sprites.Count;)
            {
                Bitmap[] bitmapParts = new Bitmap[parts];
                for (int m = 0; m < parts; m++)
                {
                    if (i + m >= sprites.Count)
                    {
                        break;
                    }

                    bitmapParts[m] = sprParser.GetSprite(sprites[i + m]);
                }

                if (y >= Program.SEGMENT_DIMENTION)
                {
                    filename = string.Format("sprites-{0}-{1}.png", localStart, localStart + (Program.BITMAP_SIZE / singleSize) - 1);
                    m_Tasks.Add(gfx.SaveAndDispose(Path.Combine(m_ClientVersion.ToString(), "result", "sprites", filename)));

                    m_JsonTokens.Add(new SpritesToken()
                    {
                        file          = filename,
                        spritetype    = spriteType,
                        firstspriteid = localStart,
                        lastspriteid  = localStart + (Program.BITMAP_SIZE / singleSize) - 1
                    });

                    localStart += Program.BITMAP_SIZE / singleSize;

                    gfx = new AsyncGraphics(new Bitmap(Program.SEGMENT_DIMENTION, Program.SEGMENT_DIMENTION));
                    x   = y = z = 0;
                }

                var tmpSmallBitmaps = bitmapParts;
                drawFunc(gfx, bitmapParts, x, y);
                m_Tasks.Add(gfx.DisposeOnDone(bitmapParts));

                x += width;
                if (x >= Program.SEGMENT_DIMENTION)
                {
                    y += height;
                    x  = 0;
                }

                if (i == sprites.Count)
                {
                    break;
                }

                i = Math.Min(i + parts, sprites.Count);
                z++;
            }

            // save the last gfx
            int end = localStart + z;

            filename = string.Format("sprites-{0}-{1}.png", localStart, end - 1);
            m_Tasks.Add(gfx.SaveAndDispose(Path.Combine(m_ClientVersion.ToString(), "result", "sprites", filename)));

            m_JsonTokens.Add(new SpritesToken()
            {
                file          = filename,
                spritetype    = spriteType,
                firstspriteid = localStart,
                lastspriteid  = end - 1
            });
        }
예제 #2
0
        static void InternalSaveStaticBitmaps(RepeatedField <uint> sprites, DrawBitmapsDelegate drawFunc, int layers, int spriteType, int localStart, Core.Sprites.ContentSprites sprParser, int dX, int dY, int clientVersion)
        {
            int singleSize = dX * dY;

            AsyncGraphics gfx = new AsyncGraphics(new Bitmap(SEGMENT_DIMENTION, SEGMENT_DIMENTION));
            string        filename;

            int x = 0, y = 0, z = 0;

            for (int i = 0; i < sprites.Count;)
            {
                Bitmap[] smallBitmaps = new Bitmap[layers];
                for (int m = 0; m < layers; m++)
                {
                    if (i + m >= sprites.Count)
                    {
                        break;
                    }

                    smallBitmaps[m] = sprParser.GetSprite(sprites[i + m]);
                }

                if (y >= SEGMENT_DIMENTION)
                {
                    filename = string.Format("sprites-{0}-{1}.png", localStart, localStart + (BITMAP_SIZE / singleSize) - 1);
                    tasks.Add(gfx.SaveAndDispose(Path.Combine(clientVersion.ToString() + "/sprites", filename)));

                    jsonTokens.Add(new SpritesToken()
                    {
                        file          = filename,
                        spritetype    = spriteType,
                        firstspriteid = localStart,
                        lastspriteid  = localStart + (BITMAP_SIZE / singleSize) - 1
                    });

                    localStart += BITMAP_SIZE / singleSize;

                    gfx = new AsyncGraphics(new Bitmap(SEGMENT_DIMENTION, SEGMENT_DIMENTION));
                    x   = y = z = 0;
                }

                var tmpSmallBitmaps = smallBitmaps;
                drawFunc(gfx, smallBitmaps, x, y);
                tasks.Add(gfx.DisposeOnDone(smallBitmaps));

                x += dX;
                if (x >= SEGMENT_DIMENTION)
                {
                    y += dY;
                    x  = 0;
                }

                if (i == sprites.Count)
                {
                    break;
                }

                i = Math.Min(i + layers, sprites.Count);
                z++;
            }

            // save the last gfx
            int end = localStart + z;

            filename = string.Format("sprites-{0}-{1}.png", localStart, end - 1);
            tasks.Add(gfx.SaveAndDispose(Path.Combine(clientVersion.ToString(), "sprites", filename)));

            jsonTokens.Add(new SpritesToken()
            {
                file          = filename,
                spritetype    = spriteType,
                firstspriteid = localStart,
                lastspriteid  = end - 1
            });
        }