Skip to content

Commit f3db18b

Browse files
Turn metadatafactory into a singleton instead of static. Speeds up testing and application start when its not needed.
1 parent c880fc8 commit f3db18b

File tree

16 files changed

+104
-76
lines changed

16 files changed

+104
-76
lines changed

Editors/AnimationMeta/DependencyInjectionContainer.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using AnimationEditor.Common.BaseControl;
22
using Editors.AnimationMeta.MetaEditor.Commands;
33
using Editors.AnimationMeta.Presentation;
4-
using Editors.AnimationMeta.Presentation.Commands;
54
using Editors.AnimationMeta.Presentation.View;
65
using Editors.AnimationMeta.SuperView;
76
using Editors.AnimationMeta.Visualisation;
@@ -19,8 +18,7 @@ public class DependencyInjectionContainer : DependencyContainer
1918
{
2019
public override void Register(IServiceCollection serviceCollection)
2120
{
22-
MetaDataTagDeSerializer.EnsureMappingTableCreated();
23-
21+
serviceCollection.AddSingleton<MetaDataTagDeSerializer>();
2422
serviceCollection.AddTransient<MainEditorView>();
2523
serviceCollection.AddTransient<MetaDataEditorViewModel>();
2624

Editors/AnimationMeta/MetaEditor/Commands/CopyPastCommand.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Windows;
5+
using Editors.AnimationMeta.Presentation;
56
using Shared.Core.Events;
67
using Shared.Core.Misc;
78
using Shared.GameFormats.AnimationMeta.Parsing;
89

9-
namespace Editors.AnimationMeta.Presentation.Commands
10+
namespace Editors.AnimationMeta.MetaEditor.Commands
1011
{
1112
public class MetaDataTagCopyItem : ICopyPastItem
1213
{
@@ -17,10 +18,12 @@ public class MetaDataTagCopyItem : ICopyPastItem
1718
class CopyPastCommand : IUiCommand
1819
{
1920
private readonly CopyPasteManager _copyPasteManager;
21+
private readonly MetaDataTagDeSerializer _metaDataTagDeSerializer;
2022

21-
public CopyPastCommand(CopyPasteManager copyPasteManager)
23+
public CopyPastCommand(CopyPasteManager copyPasteManager, MetaDataTagDeSerializer metaDataTagDeSerializer)
2224
{
2325
_copyPasteManager = copyPasteManager;
26+
_metaDataTagDeSerializer = metaDataTagDeSerializer;
2427
}
2528

2629
public void ExecuteCopy(MetaDataEditorViewModel controller)
@@ -61,17 +64,17 @@ public void ExecutePaste(MetaDataEditorViewModel controller)
6164
{
6265
var pasteObjects = pastObject.Items;
6366
var confirm = MessageBox.Show($"Paste {pasteObjects.Count} metadata objects?", "Meta Copy Paste", MessageBoxButton.YesNo);
64-
if (confirm != MessageBoxResult.Yes)
67+
if (confirm != MessageBoxResult.Yes)
6568
return;
6669

6770
foreach (var item in pasteObjects)
6871
{
6972
try
7073
{
71-
var typed = MetaDataTagDeSerializer.DeSerialize(item, out var errorStr);
74+
var typed = _metaDataTagDeSerializer.DeSerialize(item, out var errorStr);
7275
if (typed == null)
7376
throw new Exception(errorStr);
74-
controller.Tags.Add(new MetaDataEntry(typed));
77+
controller.Tags.Add(new MetaDataEntry(typed, _metaDataTagDeSerializer));
7578
}
7679
catch
7780
{
@@ -84,7 +87,7 @@ public void ExecutePaste(MetaDataEditorViewModel controller)
8487
}
8588

8689

87-
90+
8891

8992
}
9093
}

Editors/AnimationMeta/MetaEditor/Commands/DeleteEntryCommand.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
using System.Linq;
2+
using Editors.AnimationMeta.Presentation;
23
using Shared.Core.Events;
34

4-
namespace Editors.AnimationMeta.Presentation.Commands
5+
namespace Editors.AnimationMeta.MetaEditor.Commands
56
{
67
internal class DeleteEntryCommand : IUiCommand
78
{
8-
99
public void Execute(MetaDataEditorViewModel controller)
1010
{
1111
if (controller.SelectedTag == null)

Editors/AnimationMeta/MetaEditor/Commands/MoveEntryCommand.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
using Shared.Core.Events;
1+
using Editors.AnimationMeta.Presentation;
2+
using Shared.Core.Events;
23

3-
namespace Editors.AnimationMeta.Presentation.Commands
4+
namespace Editors.AnimationMeta.MetaEditor.Commands
45
{
56
internal class MoveEntryCommand : IUiCommand
67
{

Editors/AnimationMeta/MetaEditor/Commands/NewEntryCommand.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,23 @@
33
using Shared.Core.Events;
44
using Shared.GameFormats.AnimationMeta.Parsing;
55
using System.Windows;
6+
using Editors.AnimationMeta.Presentation;
67

7-
namespace Editors.AnimationMeta.Presentation.Commands
8+
namespace Editors.AnimationMeta.MetaEditor.Commands
89
{
910
internal class NewEntryCommand : IUiCommand
1011
{
12+
private readonly MetaDataTagDeSerializer _metaDataTagDeSerializer;
13+
14+
public NewEntryCommand(MetaDataTagDeSerializer metaDataTagDeSerializer)
15+
{
16+
_metaDataTagDeSerializer = metaDataTagDeSerializer;
17+
}
18+
1119
public void Execute(MetaDataEditorViewModel controller)
1220
{
1321
var dialog = new NewMetaDataEntryWindow() { Owner = Application.Current.MainWindow };
14-
var allDefs = MetaDataTagDeSerializer.GetSupportedTypes();
22+
var allDefs = _metaDataTagDeSerializer.GetSupportedTypes();
1523

1624
var model = new NewTagWindowViewModel
1725
{
@@ -22,8 +30,8 @@ public void Execute(MetaDataEditorViewModel controller)
2230
var res = dialog.ShowDialog();
2331
if (res.HasValue && res.Value == true)
2432
{
25-
var newEntry = MetaDataTagDeSerializer.CreateDefault(model.SelectedItem);
26-
var newTagView = new MetaDataEntry(newEntry);
33+
var newEntry = _metaDataTagDeSerializer.CreateDefault(model.SelectedItem);
34+
var newTagView = new MetaDataEntry(newEntry, _metaDataTagDeSerializer);
2735
controller.Tags.Add(newTagView);
2836
}
2937

Editors/AnimationMeta/MetaEditor/MetaDataEditorViewModel.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using CommunityToolkit.Mvvm.ComponentModel;
44
using CommunityToolkit.Mvvm.Input;
55
using Editors.AnimationMeta.MetaEditor.Commands;
6-
using Editors.AnimationMeta.Presentation.Commands;
76
using Shared.Core.Events;
87
using Shared.Core.PackFiles.Models;
98
using Shared.Core.ToolCreation;
@@ -14,6 +13,7 @@ namespace Editors.AnimationMeta.Presentation
1413
public partial class MetaDataEditorViewModel : ObservableObject, IEditorInterface, ISaveableEditor, IFileEditor
1514
{
1615
private readonly IUiCommandFactory _uiCommandFactory;
16+
private readonly MetaDataTagDeSerializer _metaDataTagDeSerializer;
1717

1818
[ObservableProperty] string _displayName = "Metadata Editor";
1919
[ObservableProperty] IMetaDataEntry _selectedTag;
@@ -23,9 +23,10 @@ public partial class MetaDataEditorViewModel : ObservableObject, IEditorInterfac
2323
public bool HasUnsavedChanges { get; set; } = false;
2424
public PackFile CurrentFile { get; set; }
2525

26-
public MetaDataEditorViewModel(IUiCommandFactory uiCommandFactory)
26+
public MetaDataEditorViewModel(IUiCommandFactory uiCommandFactory, MetaDataTagDeSerializer metaDataTagDeSerializer)
2727
{
2828
_uiCommandFactory = uiCommandFactory;
29+
_metaDataTagDeSerializer = metaDataTagDeSerializer;
2930
}
3031

3132
public bool Save() => _uiCommandFactory.Create<SaveCommand>().Execute(this);
@@ -46,15 +47,15 @@ public void LoadFile(PackFile file)
4647
var fileContent = CurrentFile.DataSource.ReadData();
4748

4849
var parser = new MetaDataFileParser();
49-
var loadedMetadataFile = parser.ParseFile(fileContent);
50+
var loadedMetadataFile = parser.ParseFile(fileContent, _metaDataTagDeSerializer);
5051
MetaDataFileVersion = loadedMetadataFile.Version;
5152

5253
foreach (var item in loadedMetadataFile.Items)
5354
{
5455
if (item is UnknownMetaEntry uknMeta)
5556
Tags.Add(new UnkMetaDataEntry(uknMeta));
5657
else if (item is BaseMetaEntry metaBase)
57-
Tags.Add(new MetaDataEntry(metaBase));
58+
Tags.Add(new MetaDataEntry(metaBase, _metaDataTagDeSerializer));
5859
else
5960
throw new Exception($"{item.GetType()} is not a known type for {nameof(MetaDataEditorViewModel)}");
6061
}

Editors/AnimationMeta/MetaEditor/MetaDataEntry.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ public class MetaDataEntry : IMetaDataEntry
5757
private readonly ILogger _logger = Logging.Create<MetaDataEntry>();
5858
private readonly string _originalName;
5959

60-
public MetaDataEntry(BaseMetaEntry typedMetaItem)
60+
public MetaDataEntry(BaseMetaEntry typedMetaItem, MetaDataTagDeSerializer metaDataTagDeSerializer)
6161
{
6262
_originalName = typedMetaItem.Name;
6363
DisplayName = typedMetaItem.DisplayName;
64-
Description = MetaDataTagDeSerializer.GetDescriptionSafe(_originalName);
64+
Description = metaDataTagDeSerializer.GetDescriptionSafe(_originalName);
6565
Version = typedMetaItem.Version;
6666

6767
var orderedPropertiesList = typedMetaItem.GetType().GetProperties()

Editors/AnimationMeta/SuperView/SuperViewViewModel.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Shared.Core.Events;
1010
using Shared.Core.Events.Scoped;
1111
using Shared.Core.PackFiles;
12+
using Shared.GameFormats.AnimationMeta.Parsing;
1213

1314
namespace Editors.AnimationMeta.SuperView
1415
{
@@ -17,6 +18,7 @@ public partial class SuperViewViewModel : EditorHostBase
1718
SceneObjectViewModel _asset;
1819

1920
private readonly SceneObjectEditor _sceneObjectBuilder;
21+
private readonly MetaDataTagDeSerializer _metaDataTagDeSerializer;
2022
private readonly IPackFileService _packFileService;
2123
private readonly IEventHub _eventHub;
2224
private readonly IUiCommandFactory _uiCommandFactory;
@@ -33,15 +35,16 @@ public SuperViewViewModel(
3335
IEventHub eventHub,
3436
IUiCommandFactory uiCommandFactory,
3537
SceneObjectEditor sceneObjectBuilder,
36-
IEditorHostParameters editorHostParameters)
38+
IEditorHostParameters editorHostParameters,
39+
MetaDataTagDeSerializer metaDataTagDeSerializer)
3740
: base(editorHostParameters)
3841
{
3942
DisplayName = "Super view";
4043
_packFileService = packFileService;
4144
_eventHub = eventHub;
4245
_uiCommandFactory = uiCommandFactory;
4346
_sceneObjectBuilder = sceneObjectBuilder;
44-
47+
_metaDataTagDeSerializer = metaDataTagDeSerializer;
4548
Initialize();
4649
eventHub.Register<ScopedFileSavedEvent>(this, OnFileSaved);
4750
eventHub.Register<SceneObjectUpdateEvent>(this, OnSceneObjectUpdated);
@@ -60,8 +63,8 @@ private void OnFileSaved(ScopedFileSavedEvent evnt)
6063

6164
void Initialize()
6265
{
63-
PersistentMetaEditor = new MetaDataEditorViewModel(_uiCommandFactory);
64-
MetaEditor = new MetaDataEditorViewModel(_uiCommandFactory);
66+
PersistentMetaEditor = new MetaDataEditorViewModel(_uiCommandFactory, _metaDataTagDeSerializer);
67+
MetaEditor = new MetaDataEditorViewModel(_uiCommandFactory, _metaDataTagDeSerializer);
6568

6669
var assetViewModel = _sceneObjectViewModelBuilder.CreateAsset("SuperViewRoot", true, "Root", Color.Black,null, true);
6770
SceneObjects.Add(assetViewModel);

Editors/Reports/Animation/AnimMetaDataJsonGenerator.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,20 @@ public class AnimMetaDataJsonGenerator
2525
private readonly ILogger _logger = Logging.Create<AnimMetaDataJsonGenerator>();
2626
private readonly IPackFileService _pfs;
2727
private readonly ApplicationSettingsService _settingsService;
28+
private readonly MetaDataTagDeSerializer _metaDataTagDeSerializer;
2829
private readonly JsonSerializerSettings _jsonOptions;
2930

30-
public AnimMetaDataJsonGenerator(IPackFileService pfs, ApplicationSettingsService settingsService)
31+
public AnimMetaDataJsonGenerator(IPackFileService pfs, ApplicationSettingsService settingsService, MetaDataTagDeSerializer metaDataTagDeSerializer)
3132
{
3233
_pfs = pfs;
3334
_settingsService = settingsService;
35+
_metaDataTagDeSerializer = metaDataTagDeSerializer;
3436
_jsonOptions = new JsonSerializerSettings { Formatting = Formatting.Indented };
3537
}
3638

37-
public static void Generate(IPackFileService pfs, ApplicationSettingsService settingsService)
39+
public static void Generate(IPackFileService pfs, ApplicationSettingsService settingsService, MetaDataTagDeSerializer metaDataTagDeSerializer)
3840
{
39-
var instance = new AnimMetaDataJsonGenerator(pfs, settingsService);
41+
var instance = new AnimMetaDataJsonGenerator(pfs, settingsService, metaDataTagDeSerializer);
4042
instance.Create();
4143
}
4244

@@ -62,7 +64,7 @@ public void Create()
6264
var animPack = packFileContainer[0].FileList["animations\\database\\battle\\bin\\animation_tables.animpack"];
6365
var animPackFile = AnimationPackSerializer.Load(animPack, _pfs);
6466

65-
var converter = new AnimationBinWh3FileToXmlConverter(null);
67+
var converter = new AnimationBinWh3FileToXmlConverter(null, _metaDataTagDeSerializer);
6668
foreach (var animFile in animPackFile.Files)
6769
{
6870
if (animFile is AnimationBinWh3)
@@ -84,7 +86,7 @@ public void Create()
8486
continue;
8587

8688
var parser = new MetaDataFileParser();
87-
var metaData = parser.ParseFile(data);
89+
var metaData = parser.ParseFile(data, _metaDataTagDeSerializer);
8890
DumpAsJson(gameOutputDir, fileName + ".json", metaData);
8991
}
9092
catch (Exception e)

Editors/Reports/Animation/AnimMetaDataReportGenerator.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,18 @@ class FileReport
3131

3232
private readonly IPackFileService _pfs;
3333
private readonly ApplicationSettingsService _settingsService;
34+
private readonly MetaDataTagDeSerializer _metaDataTagDeSerializer;
3435

35-
public AnimMetaDataReportGenerator(IPackFileService pfs, ApplicationSettingsService settingsService)
36+
public AnimMetaDataReportGenerator(IPackFileService pfs, ApplicationSettingsService settingsService, MetaDataTagDeSerializer metaDataTagDeSerializer)
3637
{
3738
_pfs = pfs;
3839
_settingsService = settingsService;
40+
_metaDataTagDeSerializer = metaDataTagDeSerializer;
3941
}
4042

41-
public static void Generate(IPackFileService pfs, ApplicationSettingsService settingsService)
43+
public static void Generate(IPackFileService pfs, ApplicationSettingsService settingsService, MetaDataTagDeSerializer metaDataTagDeSerializer)
4244
{
43-
var instance = new AnimMetaDataReportGenerator(pfs, settingsService);
45+
var instance = new AnimMetaDataReportGenerator(pfs, settingsService, metaDataTagDeSerializer);
4446
instance.Create();
4547
}
4648

@@ -75,7 +77,7 @@ public void Create()
7577
continue;
7678

7779
var parser = new MetaDataFileParser();
78-
var metaData = parser.ParseFile(data);
80+
var metaData = parser.ParseFile(data, _metaDataTagDeSerializer);
7981
metaTable.Add((fileName, metaData));
8082

8183
var completedTags = 0;
@@ -89,7 +91,7 @@ public void Create()
8991

9092
try
9193
{
92-
var variables = MetaDataTagDeSerializer.DeSerializeToStrings(item, out var errorMessage);
94+
var variables = _metaDataTagDeSerializer.DeSerializeToStrings(item, out var errorMessage);
9395
if (variables != null)
9496
{
9597

0 commit comments

Comments
 (0)