106 lines
3.8 KiB
C#
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();
|
|
}
|
|
|
|
}
|
|
}
|