JD2022-TU1/main/tools/apps/ResourceViewer/TextureFileConfig.cs

106 lines
3.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using JD.Core;
namespace ResourceViewer
{
public class TextureConfigFileReader : XmlTextReader
{
public TextureConfigFileReader(string fileUrl)
: base(fileUrl)
{
WhitespaceHandling = WhitespaceHandling.None;
}
public IEnumerable<TextureConfiguration> Load()
{
List<TextureConfiguration> textureConfigurations = null;
try
{
while (Read())
{
if (LocalName == "TextureConfiguration" && (NodeType != XmlNodeType.EndElement))
{
if (AttributeCount > 0)
{
string targetName = GetAttribute("TargetName");
PlatformId target;
if (!Enum.TryParse(targetName, out target))
{
target = default(PlatformId);
}
// dest target enum value recasted to string does not fit original ?
if (string.Compare(target.ToString(), targetName, StringComparison.OrdinalIgnoreCase) != 0)
{
// hack to take into account previous data set to CAFE instead of WIIU
if (string.Compare(target.ToString(), "CAFE", StringComparison.OrdinalIgnoreCase) != 0)
target = PlatformId.WIIU;
}
try
{
TextureConfiguration newConfiguration = TextureConfiguration.Create(target, From.File);
newConfiguration.Load(this);
if (textureConfigurations == null)
textureConfigurations = new List<TextureConfiguration>();
textureConfigurations.Add(newConfiguration);
}
catch (Exception)
{
throw new Exception($"No target name in the {BaseURI} config file");
}
}
}
}
}
catch (Exception e)
{
Console.WriteLine(@"{0} Exception caught.", e);
}
finally
{
Close();
}
return textureConfigurations;
}
}
public class TextureConfigFileWriter : XmlTextWriter
{
// enum to choose to flag the texture as unmodified when save (temporary file use for cooking)
public enum ModifyUpdate
{
SetUnchanged = 0,
KeepModified,
};
public TextureConfigFileWriter(string fileUrl)
: base(fileUrl, null)
{
}
public void Save(IEnumerable<TextureConfiguration> textureConfigurations, ModifyUpdate modifyUpdate = ModifyUpdate.SetUnchanged)
{
Formatting = Formatting.Indented;
WriteStartDocument(true);
WriteStartElement("root");
foreach (var textureConfiguration in textureConfigurations)
{
// save configuration only if different from default value
if (textureConfiguration.Equals(TextureConfiguration.DefaultList[textureConfiguration.Target]) == false)
{
textureConfiguration.Save(this, modifyUpdate);
}
}
WriteEndElement();
WriteEndDocument();
Close();
}
}
}