diff --git a/AnimationSlotAnal/AnimationSlotAnal.csproj b/AnimationSlotAnal/AnimationSlotAnal.csproj new file mode 100644 index 000000000..208270428 --- /dev/null +++ b/AnimationSlotAnal/AnimationSlotAnal.csproj @@ -0,0 +1,8 @@ + + + + Exe + net5.0 + + + diff --git a/AnimationSlotAnal/Program.cs b/AnimationSlotAnal/Program.cs new file mode 100644 index 000000000..6cf0cdc1a --- /dev/null +++ b/AnimationSlotAnal/Program.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml.Serialization; + +namespace AnimationSlotAnal +{ + class Program + { + static void Main(string[] args) + { + var catagories = LoadXmlFile(@"C:\Users\ole_k\Downloads\animation_categories.xml").Animation_categories; + var slots = LoadXmlFile(@"C:\Users\ole_k\Downloads\animation_slot_categories.xml").Animation_slot_categories; + + var orderedCatagories = catagories + .OrderBy(x => x.Order) + .ToDictionary(x => x.Name, x => x.Order); + + var orderedCatagoriesCount = orderedCatagories + .Select(x => $"{x.Key}_{x.Value}") + .ToList(); + + var slotsOrderedByGroup = slots + .OrderBy(x => orderedCatagories[x.Category]) + .GroupBy(x => x.Category); + + var slotsOrderedByGroupWithCount = slotsOrderedByGroup + .Select(x => $"{x.Key}_{x.Count()}") + .ToList(); + + var slotsOrderedByGroupList = slotsOrderedByGroup.ToList(); + } + + static T LoadXmlFile(string path) where T : class + { + var ser = new XmlSerializer(typeof(T)); + using var fileStream = new FileStream(path, FileMode.Open); + var data = ser.Deserialize(fileStream) as T; + return data; + } + } + + [XmlRoot(ElementName = "animation_categories")] + public class Animation_categories + { + [XmlElement(ElementName = "name")] + public string Name { get; set; } + [XmlElement(ElementName = "order")] + public int Order { get; set; } + [XmlAttribute(AttributeName = "record_uuid")] + public string Record_uuid { get; set; } + [XmlAttribute(AttributeName = "record_timestamp")] + public string Record_timestamp { get; set; } + [XmlAttribute(AttributeName = "record_key")] + public string Record_key { get; set; } + } + + [XmlRoot(ElementName = "dataroot")] + public class Dataroot_Categories + { + [XmlElement(ElementName = "edit_uuid")] + public string Edit_uuid { get; set; } + [XmlElement(ElementName = "animation_categories")] + public List Animation_categories { get; set; } + [XmlAttribute(AttributeName = "od", Namespace = "http://www.w3.org/2000/xmlns/")] + public string Od { get; set; } + [XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")] + public string Xsi { get; set; } + [XmlAttribute(AttributeName = "noNamespaceSchemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] + public string NoNamespaceSchemaLocation { get; set; } + [XmlAttribute(AttributeName = "export_time")] + public string Export_time { get; set; } + [XmlAttribute(AttributeName = "revision")] + public string Revision { get; set; } + [XmlAttribute(AttributeName = "export_branch")] + public string Export_branch { get; set; } + [XmlAttribute(AttributeName = "export_user")] + public string Export_user { get; set; } + } + + [XmlRoot(ElementName = "animation_slot_categories")] + public class Animation_slot_categories + { + [XmlElement(ElementName = "category")] + public string Category { get; set; } + [XmlElement(ElementName = "slot")] + public string Slot { get; set; } + [XmlAttribute(AttributeName = "record_uuid")] + public string Record_uuid { get; set; } + [XmlAttribute(AttributeName = "record_timestamp")] + public string Record_timestamp { get; set; } + [XmlAttribute(AttributeName = "record_key")] + public string Record_key { get; set; } + } + + [XmlRoot(ElementName = "dataroot")] + public class Dataroot_Slots + { + [XmlElement(ElementName = "edit_uuid")] + public string Edit_uuid { get; set; } + [XmlElement(ElementName = "animation_slot_categories")] + public List Animation_slot_categories { get; set; } + [XmlAttribute(AttributeName = "od", Namespace = "http://www.w3.org/2000/xmlns/")] + public string Od { get; set; } + [XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")] + public string Xsi { get; set; } + [XmlAttribute(AttributeName = "noNamespaceSchemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] + public string NoNamespaceSchemaLocation { get; set; } + [XmlAttribute(AttributeName = "export_time")] + public string Export_time { get; set; } + [XmlAttribute(AttributeName = "revision")] + public string Revision { get; set; } + [XmlAttribute(AttributeName = "export_branch")] + public string Export_branch { get; set; } + [XmlAttribute(AttributeName = "export_user")] + public string Export_user { get; set; } + } +} diff --git a/AssetEditor.sln b/AssetEditor.sln index 144d63e84..f581180d5 100644 --- a/AssetEditor.sln +++ b/AssetEditor.sln @@ -36,7 +36,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AnimationEditor", "Animatio EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Experiments", "Experiments", "{FF70C4FA-A9A7-4DEC-87A3-4BF5F23EF336}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wh3AnimPackCreator", "Wh3AnimPackCreator\Wh3AnimPackCreator.csproj", "{3A205F23-1862-4F06-B9D8-DF82810515B3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wh3AnimPackCreator", "Wh3AnimPackCreator\Wh3AnimPackCreator.csproj", "{3A205F23-1862-4F06-B9D8-DF82810515B3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnimationSlotAnal", "AnimationSlotAnal\AnimationSlotAnal.csproj", "{59AE0CFC-9721-44E6-927C-0611556259EA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -88,6 +90,10 @@ Global {3A205F23-1862-4F06-B9D8-DF82810515B3}.Debug|Any CPU.Build.0 = Debug|Any CPU {3A205F23-1862-4F06-B9D8-DF82810515B3}.Release|Any CPU.ActiveCfg = Release|Any CPU {3A205F23-1862-4F06-B9D8-DF82810515B3}.Release|Any CPU.Build.0 = Release|Any CPU + {59AE0CFC-9721-44E6-927C-0611556259EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59AE0CFC-9721-44E6-927C-0611556259EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59AE0CFC-9721-44E6-927C-0611556259EA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59AE0CFC-9721-44E6-927C-0611556259EA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -101,6 +107,7 @@ Global {70708A4D-A71A-487A-87DE-47E526F2E142} = {07AC615B-A8FC-4E1A-BDD5-BC11452429A0} {0FCB6133-32A4-4115-BD53-474C703E7B34} = {07AC615B-A8FC-4E1A-BDD5-BC11452429A0} {3A205F23-1862-4F06-B9D8-DF82810515B3} = {FF70C4FA-A9A7-4DEC-87A3-4BF5F23EF336} + {59AE0CFC-9721-44E6-927C-0611556259EA} = {FF70C4FA-A9A7-4DEC-87A3-4BF5F23EF336} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AB5968F3-98ED-4AFF-98EA-0DBEDCACADF2}