public ISpriteRun SetPixels(IDataModel model, ModelDelta token, int[][,] tiles) { var tileSize = 8 * Format.BitsPerPixel; var data = new byte[tiles.Length * tileSize]; for (int i = 0; i < tiles.Length; i++) { SpriteRun.SetPixels(data, i * tileSize, tiles[i], Format.BitsPerPixel); } var newModelData = Compress(data, 0, data.Length); var newRun = (LzTilesetRun)model.RelocateForExpansion(token, this, newModelData.Count); for (int i = 0; i < newModelData.Count; i++) { token.ChangeData(model, newRun.Start + i, newModelData[i]); } for (int i = newModelData.Count; i < Length; i++) { token.ChangeData(model, newRun.Start + i, 0xFF); } newRun = new LzTilesetRun(Format, model, newRun.Start, newRun.PointerSources); model.ObserveRunWritten(token, newRun); return(newRun); }
public ISpriteRun SetPixels(IDataModel model, ModelDelta token, int page, int[,] pixels) { // TODO handle the fact that pixels[,] may contain a different number of tiles compared to the existing tileset var data = Decompress(model, Start); for (int x = 0; x < pixels.GetLength(0); x++) { for (int y = 0; y < pixels.GetLength(1); y++) { pixels[x, y] %= (int)Math.Pow(2, TilesetFormat.BitsPerPixel); } } SpriteRun.SetPixels(data, 0, pixels, TilesetFormat.BitsPerPixel); var newModelData = Compress(data, 0, data.Length); var newRun = model.RelocateForExpansion(token, this, newModelData.Count); for (int i = 0; i < newModelData.Count; i++) { token.ChangeData(model, newRun.Start + i, newModelData[i]); } for (int i = newModelData.Count; i < Length; i++) { token.ChangeData(model, newRun.Start + i, 0xFF); } newRun = new LzTilesetRun(TilesetFormat, model, newRun.Start, newRun.PointerSources); model.ObserveRunWritten(token, newRun); return(newRun); }
public ITilesetRun SetPixels(IDataModel model, ModelDelta token, IReadOnlyList <int[, ]> tiles) { return(LzTilesetRun.SetPixels(this, model, token, tiles, (start, sources) => new TilesetRun(TilesetFormat, model, start, sources))); }