Skip to content

Commit

Permalink
AnimationFixes
Browse files Browse the repository at this point in the history
  • Loading branch information
donkeyProgramming committed Apr 8, 2022
1 parent 296a330 commit 638013e
Show file tree
Hide file tree
Showing 22 changed files with 2,681 additions and 2,389 deletions.
56 changes: 28 additions & 28 deletions AnimationEditor/Common/ReferenceModel/FragAndSlotViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ public class SelectFragAndSlotViewModel : NotifyPropertyChangedImpl
string _currentSkeletonName = "";
AssetViewModel _asset;

public FilterCollection<AnimationFragmentFile> FragmentList { get; set; }
public FilterCollection<IAnimationBinGenericFormat> FragmentList { get; set; }

public FilterCollection<AnimationSetEntry> FragmentSlotList { get; set; }
public FilterCollection<AnimationBinEntryGenericFormat> FragmentSlotList { get; set; }

PackFileService _pfs;
SkeletonAnimationLookUpHelper _skeletonAnimationLookUpHelper;
Expand All @@ -30,13 +30,13 @@ public SelectFragAndSlotViewModel(PackFileService pfs, SkeletonAnimationLookUpHe
_asset = asset;
_metaViewModel = metaViewModel;

FragmentList = new FilterCollection<AnimationFragmentFile>(null, (value) => FragmentSelected(value, FragmentSlotList, _asset.SkeletonName.Value))
FragmentList = new FilterCollection<IAnimationBinGenericFormat>(null, (value) => FragmentSelected(value, FragmentSlotList, _asset.SkeletonName.Value))
{
SearchFilter = (value, rx) => { return rx.Match(value.FileName).Success; }
SearchFilter = (value, rx) => { return rx.Match(value.FullPath).Success; }
};
FragmentSlotList = new FilterCollection<AnimationSetEntry>(null, FragmentSlotSelected)
FragmentSlotList = new FilterCollection<AnimationBinEntryGenericFormat>(null, FragmentSlotSelected)
{
SearchFilter = (value, rx) => { return rx.Match(value.Slot.Value).Success; }
SearchFilter = (value, rx) => { return rx.Match(value.SlotName).Success; }
};

OnSkeletonChange(_asset.Skeleton);
Expand All @@ -48,9 +48,9 @@ public void PreviewSelectedSlot()
{
if (FragmentList.SelectedItem != null && FragmentList.SelectedItem != null)
{
var animPack = FragmentList.SelectedItem.Parent;
CommonControls.Editors.AnimationPack.AnimPackViewModel.ShowPreviewWinodow(animPack, _pfs, _skeletonAnimationLookUpHelper, FragmentList.SelectedItem.FileName);
}
var animPack = FragmentList.SelectedItem.PackFileReference;
CommonControls.Editors.AnimationPack.AnimPackViewModel.ShowPreviewWinodow(animPack, _pfs, _skeletonAnimationLookUpHelper, FragmentList.SelectedItem.FullPath);
}
}

void Subscribe()
Expand All @@ -68,8 +68,8 @@ private void OnSkeletonChange(View3D.Animation.GameSkeleton newValue)

if (newValue == null)
{
FragmentList.UpdatePossibleValues(new List<AnimationFragmentFile>());
FragmentSlotList.UpdatePossibleValues(new List<AnimationSetEntry>());
FragmentList.UpdatePossibleValues(new List<IAnimationBinGenericFormat>());
FragmentSlotList.UpdatePossibleValues(new List<AnimationBinEntryGenericFormat>());
_currentSkeletonName = "";
return;
}
Expand Down Expand Up @@ -97,10 +97,10 @@ void Unsubscribe()
_asset.SkeletonChanged += OnSkeletonChange;
}

public List<AnimationFragmentFile> LoadFragmentsForSkeleton(string skeletonName, bool onlyPacksThatCanBeSaved = false)
public List<IAnimationBinGenericFormat> LoadFragmentsForSkeleton(string skeletonName, bool onlyPacksThatCanBeSaved = false)
{
var outputFragments = new List<AnimationFragmentFile>();
var animPacks = _pfs.FindAllWithExtention(@".animpack");
var outputFragments = new List<IAnimationBinGenericFormat>();
var animPacks = _pfs.GetAllAnimPacks();
foreach (var animPack in animPacks)
{
if (onlyPacksThatCanBeSaved == true)
Expand All @@ -110,33 +110,33 @@ public List<AnimationFragmentFile> LoadFragmentsForSkeleton(string skeletonName,
}

var animPackFile = AnimationPackSerializer.Load(animPack, _pfs);
var fragments = animPackFile.GetAnimationSets(skeletonName);
var fragments = animPackFile.GetGenericAnimationSets(skeletonName);
foreach (var fragment in fragments)
outputFragments.Add(fragment);
}
return outputFragments;
}

void FragmentSelected(AnimationFragmentFile value, FilterCollection<AnimationSetEntry> collection, string skeletonName)
void FragmentSelected(IAnimationBinGenericFormat value, FilterCollection<AnimationBinEntryGenericFormat> animationSlotsCollection, string skeletonName)
{
if (value == null)
{
collection.UpdatePossibleValues(null);
animationSlotsCollection.UpdatePossibleValues(null);
return;
}

var newSkeletonName = value.Skeletons.Values.FirstOrDefault();
var newSkeletonName = value.SkeletonName;
var existingSkeletonName = Path.GetFileNameWithoutExtension(skeletonName);
if (newSkeletonName != existingSkeletonName)
{
MessageBox.Show("This fragment does not fit the current skeleton");
return;
}

collection.UpdatePossibleValues(value.Fragments);
animationSlotsCollection.UpdatePossibleValues(value.Entries);
}

private void FragmentSlotSelected(AnimationSetEntry value)
private void FragmentSlotSelected(AnimationBinEntryGenericFormat value)
{
if(value == null)
{
Expand All @@ -156,22 +156,22 @@ private void FragmentSlotSelected(AnimationSetEntry value)
_asset.SetAnimation(null);
}

if (string.IsNullOrWhiteSpace(value.MetaDataFile) == false)
_metaViewModel.SelectedMetaFile = _pfs.FindFile(value.MetaDataFile);
if (string.IsNullOrWhiteSpace(value.MetaFile) == false)
_metaViewModel.SelectedMetaFile = _pfs.FindFile(value.MetaFile);
else
_metaViewModel.SelectedMetaFile = null;

var persist = FragmentSlotList.PossibleValues.FirstOrDefault(x => x.Slot.Value == "PERSISTENT_METADATA_ALIVE");
if (persist != null && string.IsNullOrWhiteSpace(persist.MetaDataFile) == false)
_metaViewModel.SelectedPersistMetaFile = _pfs.FindFile(persist.MetaDataFile);
var persist = FragmentSlotList.PossibleValues.FirstOrDefault(x => x.SlotName == "PERSISTENT_METADATA_ALIVE");
if (persist != null && string.IsNullOrWhiteSpace(persist.MetaFile) == false)
_metaViewModel.SelectedPersistMetaFile = _pfs.FindFile(persist.MetaFile);
else
_metaViewModel.SelectedPersistMetaFile = null;

if (_metaViewModel.SelectedPersistMetaFile == null)
{
var persistFlying = FragmentSlotList.PossibleValues.FirstOrDefault(x => x.Slot.Value == "PERSISTENT_METADATA_FLYING");
if (persistFlying != null && string.IsNullOrWhiteSpace(persistFlying.MetaDataFile) == false)
_metaViewModel.SelectedPersistMetaFile = _pfs.FindFile(persistFlying.MetaDataFile);
var persistFlying = FragmentSlotList.PossibleValues.FirstOrDefault(x => x.SlotName == "PERSISTENT_METADATA_FLYING");
if (persistFlying != null && string.IsNullOrWhiteSpace(persistFlying.MetaFile) == false)
_metaViewModel.SelectedPersistMetaFile = _pfs.FindFile(persistFlying.MetaFile);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@
<ComboBox
IsEditable="True"
IsTextSearchEnabled="false"
DisplayMemberPath="Slot.Value"
DisplayMemberPath="SlotName"
Text="{Binding FragAndSlotSelection.FragmentSlotList.Filter, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ItemsSource="{Binding FragAndSlotSelection.FragmentSlotList.Values}"
SelectedItem="{Binding FragAndSlotSelection.FragmentSlotList.SelectedItem, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
Expand Down
3 changes: 2 additions & 1 deletion AnimationEditor/SkeletonEditor/Editor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -340,8 +340,9 @@ public void SaveSkeletonAction()
var skeletonClip = AnimationClip.CreateSkeletonAnimation(_techSkeletonNode.Skeleton);
var animFile = skeletonClip.ConvertToFileFormat(_techSkeletonNode.Skeleton);
animFile.Header.SkeletonName = SourceSkeletonName.Value;
var animationBytes = AnimationFile.ConvertToBytes(animFile);

var result = SaveHelper.Save(_pfs, SkeletonName.Value, null, AnimationFile.ConvertToBytes(animFile));
var result = SaveHelper.Save(_pfs, SkeletonName.Value, null, animationBytes);
SkeletonName.Value = _pfs.GetFullPath(result);

var invMatrixFile = _techSkeletonNode.Skeleton.CreateInvMatrixFile();
Expand Down
6 changes: 3 additions & 3 deletions AnimationEditor/SuperView/Editor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ public void Create(AnimationToolInput input)

if (input.FragmentName != null)
{
viewModel.FragAndSlotSelection.FragmentList.SelectedItem = viewModel.FragAndSlotSelection.FragmentList.PossibleValues.FirstOrDefault(x => x.FileName == input.FragmentName);
viewModel.FragAndSlotSelection.FragmentList.SelectedItem = viewModel.FragAndSlotSelection.FragmentList.PossibleValues.FirstOrDefault(x => x.Name == input.FragmentName);

if (input.AnimationSlot != null)
viewModel.FragAndSlotSelection.FragmentSlotList.SelectedItem = viewModel.FragAndSlotSelection.FragmentSlotList.PossibleValues.FirstOrDefault(x => x.Slot.Id == input.AnimationSlot.Id);
//if (input.AnimationSlot != null)
// viewModel.FragAndSlotSelection.FragmentSlotList.SelectedItem = viewModel.FragAndSlotSelection.FragmentSlotList.PossibleValues.FirstOrDefault(x => x.SlotName == input.AnimationSlot);
}

asset.MetaDataChanged += Asset_MetaDataChanged;
Expand Down
8 changes: 4 additions & 4 deletions AssetEditor/AssetEditor.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
<ApplicationIcon>hnet.com-image (1).ico</ApplicationIcon>
<AssemblyName>AssetEditor v0.33</AssemblyName>
<AssemblyName>AssetEditor v0.34</AssemblyName>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
Expand Down Expand Up @@ -46,9 +46,9 @@
<PackageProjectUrl>https://github.com/olekristianhomelien/TheAssetEditor</PackageProjectUrl>
<RepositoryUrl>https://github.com/olekristianhomelien/TheAssetEditor</RepositoryUrl>
<RepositoryType>GIT</RepositoryType>
<AssemblyVersion>0.33.0.0</AssemblyVersion>
<FileVersion>0.33.0.0</FileVersion>
<PackageId>AssetEditor v0.33</PackageId>
<AssemblyVersion>0.34.0.0</AssemblyVersion>
<FileVersion>0.34.0.0</FileVersion>
<PackageId>AssetEditor v0.34</PackageId>
</PropertyGroup>

</Project>
7 changes: 6 additions & 1 deletion AssetEditor/ViewModels/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Input;
using TextureEditor.ViewModels;
Expand Down Expand Up @@ -101,8 +104,10 @@ public MainViewModel(MenuBarViewModel menuViewModel, IServiceProvider servicePro

if (settingsService.CurrentSettings.IsDeveloperRun)
{


//var reportService = new FileListReportGenerator(packfileService, settingsService);
//reportService.CompareFiles(@"C:\Users\ole_k\AssetEditor\Reports\FileList\Warhammer III 1.0.1.0 PackFiles.csv", @"C:\Users\ole_k\AssetEditor\Reports\FileList\Warhammer III 1.0.2.0 PackFiles.csv");
//reportService.CompareFiles(@"C:\Users\ole_k\AssetEditor\Reports\FileList\Warhammer III 1.0.2.0 PackFiles.csv", @"C:\Users\ole_k\AssetEditor\Reports\FileList\Warhammer III 1.1.0.0 PackFiles.csv");

//;
//AnimationEditor.AnimationTransferTool.AnimationTransferTool_Debug.CreateFlyingSquig(this, toolFactory, packfileService);
Expand Down
95 changes: 3 additions & 92 deletions AssetEditor/ViewModels/MenuBarViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using AnimationEditor.SkeletonEditor;
using AssetEditor.Report;
using AnimationEditor.AnimationBuilder;
using CommonControls.Editors.AnimationPack;

namespace AssetEditor.ViewModels
{
Expand Down Expand Up @@ -82,7 +83,6 @@ public class MenuBarViewModel
public ICommand GenerateRmv2ReportCommand { get; set; }
public ICommand GenerateMetaDataReportCommand { get; set; }
public ICommand GenerateFileListReportCommand { get; set; }
public ICommand CreateAnimPackWarhammerCommand { get; set; }
public ICommand CreateAnimPackWarhammer3Command { get; set; }
public ICommand CreateAnimPack3kCommand { get; set; }

Expand All @@ -99,7 +99,6 @@ public MenuBarViewModel(IServiceProvider provider, PackFileService packfileServi
OpenSettingsWindowCommand = new RelayCommand(ShowSettingsDialog);
OpenPackFileCommand = new RelayCommand(OpenPackFile);
CreateNewPackFileCommand = new RelayCommand(CreatePackFile);
CreateAnimPackWarhammerCommand = new RelayCommand(CreateAnimationDbWarhammer);
CreateAnimPackWarhammer3Command = new RelayCommand(CreateAnimationDbWarhammer3);
CreateAnimPack3kCommand = new RelayCommand(CreateAnimationDb3k);
OpenAssetEditorFolderCommand = new RelayCommand(OpenAssetEditorFolder);
Expand Down Expand Up @@ -200,104 +199,16 @@ void CreatePackFile()
}
}


void CreateAnimationDb(bool includeWarhamemrBin)
{
TextInputWindow window = new TextInputWindow("New AnimPack name", "");
if (window.ShowDialog() == true)
{
// Is extention correct
var fileName = SaveHelper.EnsureEnding(window.TextValue, ".animpack");
var filePath = @"animations/animation_tables/" + fileName;

if (!SaveHelper.IsFilenameUnique(_packfileService, filePath))
{
MessageBox.Show("Filename is not unique");
return;
}

// Create dummy data
var animPack = new AnimationPackFile();

var binPath = @"animations/animation_tables/" + SaveHelper.EnsureEnding(fileName, "_tables.bin");
var animDb = AnimationPackFile.CreateExampleWarhammerBin(binPath);
animPack.AddFile(animDb);

// Save
SaveHelper.Save(_packfileService, filePath, null, AnimationPackSerializer.ConvertToBytes(animPack));
}
}

void CreateAnimationDbWarhammer()
{
TextInputWindow window = new TextInputWindow("New AnimPack name", "");
if (window.ShowDialog() == true)
{
var fileName = SaveHelper.EnsureEnding(window.TextValue, ".animpack");
var filePath = @"animations/animation_tables/" + fileName;

if (!SaveHelper.IsFilenameUnique(_packfileService, filePath))
{
MessageBox.Show("Filename is not unique");
return;
}

// Create dummy data
var animPack = new AnimationPackFile();
var binPath = @"animations/animation_tables/" + SaveHelper.EnsureEnding(fileName, "_tables.bin");
var animDb = AnimationPackFile.CreateExampleWarhammerBin(binPath);
animPack.AddFile(animDb);

SaveHelper.Save(_packfileService, filePath, null, AnimationPackSerializer.ConvertToBytes(animPack));
}
}


void CreateAnimationDbWarhammer3()
{
TextInputWindow window = new TextInputWindow("New AnimPack name", "");
if (window.ShowDialog() == true)
{
var fileName = SaveHelper.EnsureEnding(window.TextValue, ".animpack");
var filePath = @"animations/database/battle/bin/" + fileName;

if (!SaveHelper.IsFilenameUnique(_packfileService, filePath))
{
MessageBox.Show("Filename is not unique");
return;
}

// Create dummy data
var animPack = new AnimationPackFile();
var binPath = @"animations/database/battle/bin" + SaveHelper.EnsureEnding(fileName, ".bin");
var exampleFile = AnimationPackFile.CreateExampleWarhammer3(binPath);
animPack.AddFile(exampleFile);
SaveHelper.Save(_packfileService, filePath, null, AnimationPackSerializer.ConvertToBytes(animPack));
}
AnimationPackSampleDataCreator.CreateAnimationDbWarhammer3(_packfileService);
}

void CreateAnimationDb3k()
{
TextInputWindow window = new TextInputWindow("New AnimPack name", "");
if (window.ShowDialog() == true)
{
var fileName = SaveHelper.EnsureEnding(window.TextValue, ".animpack");
var filePath = @"animations/database/battle/bin/" + fileName;
//animations\database\battle\bin\animation_tables.animpack
if (!SaveHelper.IsFilenameUnique(_packfileService, filePath))
{
MessageBox.Show("Filename is not unique");
return;
}

// Create dummy data
var animPack = new AnimationPackFile();
SaveHelper.Save(_packfileService, filePath, null, AnimationPackSerializer.ConvertToBytes(animPack));
}
AnimationPackSampleDataCreator.CreateAnimationDb3k(_packfileService);
}



void OpenAssetEditorFolder()
{
var path = DirectoryHelper.ApplicationDirectory;
Expand Down
1 change: 0 additions & 1 deletion AssetEditor/Views/MenuBarView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
<MenuItem Header="Create">
<MenuItem Header="New Packfile" Command="{Binding MenuBar.CreateNewPackFileCommand}"/>
<Separator/>
<MenuItem Header="New AnimPack (Warhammer 2)" Command="{Binding MenuBar.CreateAnimPackWarhammerCommand}"/>
<MenuItem Header="New AnimPack (Warhammer 3)" Command="{Binding MenuBar.CreateAnimPackWarhammer3Command}"/>
<MenuItem Header="New AnimPack (3k)" Command="{Binding MenuBar.CreateAnimPack3kCommand}"/>
</MenuItem>
Expand Down
Loading

0 comments on commit 638013e

Please sign in to comment.