Exemplo n.º 1
0
    public MagitekResult AddScatteredArranger(ScatteredArrangerModel arrangerModel, string parentNodePath, string fileLocation)
    {
        var arranger = new ScatteredArranger(arrangerModel.Name, arrangerModel.ColorType, arrangerModel.Layout,
                                             arrangerModel.ArrangerElementSize.Width, arrangerModel.ArrangerElementSize.Height, arrangerModel.ElementPixelSize.Width, arrangerModel.ElementPixelSize.Height);

        for (int x = 0; x < arrangerModel.ElementGrid.GetLength(0); x++)
        {
            for (int y = 0; y < arrangerModel.ElementGrid.GetLength(1); y++)
            {
                var result = CreateElement(arrangerModel, x, y);

                if (result.IsT0)
                {
                    arranger.SetElement(result.AsT0.Result, x, y);
                }
                else if (result.IsT1)
                {
                    return(new MagitekResult.Failed(result.AsT1.Reason));
                }
            }
        }

        var arrangerNode = new ArrangerNode(arranger.Name, arranger)
        {
            DiskLocation = fileLocation,
            Model        = arrangerModel
        };

        Tree.TryGetNode(parentNodePath, out var parentNode);
        parentNode.AttachChildNode(arrangerNode);

        return(MagitekResult.SuccessResult);
    }
Exemplo n.º 2
0
    public static ScatteredArranger CreateIndexedArrangerFromImage(string imageFile, ColorModel colorModel,
                                                                   bool zeroIndexTransparent, ICodecFactory factory, IGraphicsCodec codec)
    {
        var image        = new Bitmap(imageFile);
        var imagePalette = image.Palette;

        var palette      = new Palette("testPalette", new ColorFactory(), colorModel, zeroIndexTransparent, PaletteStorageSource.Project);
        var colorSources = imagePalette.Entries
                           .Select(x => new ProjectNativeColorSource(new ColorRgba32(x.R, x.G, x.B, x.A)));

        palette.SetColorSources(colorSources);

        var file   = new MemoryDataSource("test", image.Width * image.Height);
        var elemsX = image.Width / codec.Width;
        var elemsY = image.Height / codec.Height;

        var arranger = new ScatteredArranger("testArranger", PixelColorType.Indexed, ElementLayout.Tiled, elemsX, elemsY, codec.Width, codec.Height);

        var address = new BitAddress(0);

        for (int y = 0; y < elemsY; y++)
        {
            for (int x = 0; x < elemsX; x++)
            {
                var element = new ArrangerElement(x, y, file, address, factory.CloneCodec(codec), palette);
                address += codec.StorageSize;

                arranger.SetElement(element, x, y);
            }
        }

        return(arranger);
    }
Exemplo n.º 3
0
 static void CopyElementsInternal(ElementCopy source, ScatteredArranger dest, Point sourceStart, Point destStart, int copyWidth, int copyHeight)
 {
     for (int y = 0; y < copyHeight; y++)
     {
         for (int x = 0; x < copyWidth; x++)
         {
             var el = source.Elements[x + sourceStart.X, y + sourceStart.Y];
             if (el is ArrangerElement element)
             {
                 dest.SetElement(element, x + destStart.X, y + destStart.Y);
             }
         }
     }
 }
Exemplo n.º 4
0
    public void Setup()
    {
        _df            = new MemoryDataSource("MemoryDataSource");
        _sourceIndexed = new ScatteredArranger("source", PixelColorType.Indexed, ElementLayout.Tiled, 6, 6, 8, 8);

        for (int y = 0; y < _sourceIndexed.ArrangerElementSize.Height; y++)
        {
            for (int x = 0; x < _sourceIndexed.ArrangerElementSize.Width; x++)
            {
                if (_sourceIndexed.GetElement(x, y) is ArrangerElement element)
                {
                    element = element.WithTarget(_df, new BitAddress(x * y), new Snes3bppCodec(8, 8), null);
                    _sourceIndexed.SetElement(element, x, y);
                }
            }
        }
    }
Exemplo n.º 5
0
    public void Setup(string dataFileName, string arrangerName)
    {
        using (var fs = File.Create(dataFileName))
        {
            Random rng  = new Random();
            var    data = new byte[3 * 16 * 32];
            rng.NextBytes(data);
            fs.Write(data);
        }

        _df = new FileDataSource("FileSource", Path.GetFullPath(dataFileName));

        _arranger = new ScatteredArranger(arrangerName, PixelColorType.Indexed, ElementLayout.Tiled, 16, 32, 8, 8);

        for (int y = 0; y < _arranger.ArrangerElementSize.Height; y++)
        {
            for (int x = 0; x < _arranger.ArrangerElementSize.Width; x++)
            {
                var el = new ArrangerElement(x * 8, y * 8, _df, new BitAddress(24 * x + 24 * x * y), _codec, _pal);
                _arranger.SetElement(el, x, y);
            }
        }
    }
Exemplo n.º 6
0
    /// <summary>
    /// Private method for cloning an Arranger
    /// </summary>
    /// <param name="posX">Left edge of Arranger in pixel coordinates</param>
    /// <param name="posY">Top edge of Arranger in pixel coordinates</param>
    /// <param name="width">Width of Arranger in pixels</param>
    /// <param name="height">Height of Arranger in pixels</param>
    /// <returns></returns>
    protected override Arranger CloneArrangerCore(int posX, int posY, int width, int height)
    {
        var elemX       = posX / ElementPixelSize.Width;
        var elemY       = posY / ElementPixelSize.Height;
        var elemsWidth  = (width + ElementPixelSize.Width - 1) / ElementPixelSize.Width;
        var elemsHeight = (height + ElementPixelSize.Height - 1) / ElementPixelSize.Height;

        var arranger = new ScatteredArranger(Name, ColorType, Layout, elemsWidth, elemsHeight, ElementPixelSize.Width, ElementPixelSize.Height);

        for (int y = 0; y < elemsHeight; y++)
        {
            for (int x = 0; x < elemsWidth; x++)
            {
                var el = ElementGrid[y + elemY, x + elemX]?.WithLocation(x * ElementPixelSize.Width, y * ElementPixelSize.Height);
                if (el is ArrangerElement element)
                {
                    arranger.SetElement(element, x, y);
                }
            }
        }

        return(arranger);
    }