|
1 | 1 | using Avalonia.Controls.Selection;
|
2 | 2 | using Avalonia.Media.Imaging;
|
3 | 3 | using Avalonia.Threading;
|
| 4 | +using Common.Json; |
4 | 5 | using DynamicData;
|
5 | 6 | using OpenLoco.Common;
|
6 | 7 | using OpenLoco.Common.Logging;
|
@@ -134,9 +135,9 @@ public ImageTableViewModel(IHasG1Elements g1ElementProvider, IImageTableNameProv
|
134 | 135 | _ = this.WhenAnyValue(o => o.AnimationSpeed)
|
135 | 136 | .Subscribe(_ => UpdateAnimationSpeed());
|
136 | 137 |
|
137 |
| - ImportImagesCommand = ReactiveCommand.Create(ImportImages); |
138 |
| - ExportImagesCommand = ReactiveCommand.Create(ExportImages); |
139 |
| - ReplaceImageCommand = ReactiveCommand.Create(ReplaceImage); |
| 138 | + ImportImagesCommand = ReactiveCommand.CreateFromTask(ImportImages); |
| 139 | + ExportImagesCommand = ReactiveCommand.CreateFromTask(ExportImages); |
| 140 | + ReplaceImageCommand = ReactiveCommand.CreateFromTask(ReplaceImage); |
140 | 141 | CropAllImagesCommand = ReactiveCommand.Create(CropAllImages);
|
141 | 142 |
|
142 | 143 | CreateSelectionModel();
|
@@ -357,12 +358,24 @@ public async Task ExportImages()
|
357 | 358 | Logger.Info($"Saving images to {dirPath}");
|
358 | 359 |
|
359 | 360 | var counter = 0;
|
| 361 | + var offsets = new List<SpriteOffset>(); |
| 362 | + |
360 | 363 | foreach (var image in Images)
|
361 | 364 | {
|
362 |
| - var imageName = counter++.ToString(); // todo: maybe use image name provider below (but number must still exist) |
363 |
| - var path = Path.Combine(dir.Path.LocalPath, $"{imageName}.png"); |
| 365 | + var g1Element = G1Provider.G1Elements[counter]; |
| 366 | + var imageName = counter.ToString(); // todo: maybe use image name provider below (but number must still exist) |
| 367 | + counter++; |
| 368 | + |
| 369 | + var fileName = $"{imageName}.png"; |
| 370 | + var path = Path.Combine(dir.Path.LocalPath, fileName); |
364 | 371 | await image.SaveAsPngAsync(path);
|
| 372 | + |
| 373 | + offsets.Add(new SpriteOffset(fileName, g1Element.XOffset, g1Element.YOffset)); |
365 | 374 | }
|
| 375 | + |
| 376 | + var offsetsFile = Path.Combine(dir.Path.LocalPath, "sprites.json"); |
| 377 | + Logger.Info($"Saving sprite offsets to {offsetsFile}"); |
| 378 | + await JsonFile.SerializeToFileAsync(offsets, offsetsFile); |
366 | 379 | }
|
367 | 380 |
|
368 | 381 | public void CropAllImages()
|
|
0 commit comments