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); }
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); }
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); } } } }
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); } } } }
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); } } }
/// <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); }