Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentFile/OrdersFile.cs
2023-12-14 16:11:27 +02:00

72 lines
2.4 KiB
C#

using System.Xml.Linq;
namespace Barotrauma
{
#warning TODO: this is almost a GenericPrefabFile. Must refactor further.
[RequiredByCorePackage]
sealed class OrdersFile : ContentFile
{
public OrdersFile(ContentPackage contentPackage, ContentPath path) : base(contentPackage, path) { }
public void LoadFromXElement(ContentXElement parentElement, bool overriding)
{
Identifier elemName = new Identifier(parentElement.Name.ToString());
if (parentElement.IsOverride())
{
foreach (var element in parentElement.Elements())
{
LoadFromXElement(element, true);
}
}
else if (elemName == "order")
{
OrderPrefab prefab = new OrderPrefab(parentElement, this);
OrderPrefab.Prefabs.Add(prefab, overriding);
}
else if (elemName == "ordercategory")
{
OrderCategoryIcon prefab = new OrderCategoryIcon(parentElement, this);
OrderCategoryIcon.OrderCategoryIcons.Add(prefab, overriding);
}
else if (elemName == "orders")
{
foreach (var element in parentElement.Elements())
{
LoadFromXElement(element, overriding);
}
}
else if (elemName == "clear")
{
OrderCategoryIcon.OrderCategoryIcons.AddOverrideFile(this);
OrderPrefab.Prefabs.AddOverrideFile(this);
}
else
{
DebugConsole.ThrowError($"OrdersFile: Invalid {GetType().Name} element: {parentElement.Name} in {Path}",
contentPackage: parentElement?.ContentPackage);
}
}
public override sealed void LoadFile()
{
XDocument doc = XMLExtensions.TryLoadXml(Path);
if (doc == null) { return; }
var rootElement = doc.Root.FromPackage(ContentPackage);
LoadFromXElement(rootElement, false);
}
public override sealed void UnloadFile()
{
OrderCategoryIcon.OrderCategoryIcons.RemoveByFile(this);
OrderPrefab.Prefabs.RemoveByFile(this);
}
public override sealed void Sort()
{
OrderCategoryIcon.OrderCategoryIcons.SortAll();
OrderPrefab.Prefabs.SortAll();
}
}
}