Files
2022-02-26 02:43:01 +09:00

68 lines
2.2 KiB
C#

using System;
using System.Xml.Linq;
namespace Barotrauma
{
sealed class LevelGenerationParametersFile : ContentFile
{
public LevelGenerationParametersFile(ContentPackage contentPackage, ContentPath path) : base(contentPackage, path) { }
private void LoadBiomes(ContentXElement element, bool isOverride)
{
foreach (var subElement in element.Elements())
{
Biome biome = new Biome(subElement, this);
Biome.Prefabs.Add(biome, isOverride);
}
}
private void LoadLevelGenerationParams(ContentXElement element, bool isOverride)
{
LevelGenerationParams lParams = new LevelGenerationParams(element, this);
LevelGenerationParams.LevelParams.Add(lParams, isOverride);
}
private void LoadSubElements(ContentXElement element, bool overridePropagation)
{
foreach (var subElement in element.Elements())
{
if (subElement.IsOverride())
{
LoadSubElements(subElement, true);
}
else if (subElement.NameAsIdentifier() == "clear")
{
LevelGenerationParams.LevelParams.AddOverrideFile(this);
Biome.Prefabs.AddOverrideFile(this);
}
else if (subElement.NameAsIdentifier() == "biomes")
{
LoadBiomes(subElement, overridePropagation);
}
else
{
LoadLevelGenerationParams(subElement, overridePropagation);
}
}
}
public override void LoadFile()
{
XDocument doc = XMLExtensions.TryLoadXml(Path);
if (doc is null) { return; }
LoadSubElements(doc.Root.FromPackage(ContentPackage), false);
}
public override void UnloadFile()
{
LevelGenerationParams.LevelParams.RemoveByFile(this);
Biome.Prefabs.RemoveByFile(this);
}
public override void Sort()
{
LevelGenerationParams.LevelParams.SortAll();
Biome.Prefabs.SortAll();
}
}
}