- Fixed creature disable list only taking config files in the Content/Characters folder into account (making it impossible to disable spawning of custom monsters outside the folder)

- Removed hard-coded ruin structure, particle & decal config paths and moved them to content package (custom ones can be added now without modifying the original files).
This commit is contained in:
Joonas Rikkonen
2018-02-25 15:03:29 +02:00
parent e02a1dc6ae
commit 9e2966e9cb
8 changed files with 68 additions and 57 deletions
@@ -313,9 +313,9 @@ namespace Barotrauma
yield return CoroutineStatus.Running;
ParticleManager = new ParticleManager("Content/Particles/ParticlePrefabs.xml", GameScreen.Cam);
ParticleManager = new ParticleManager(GameScreen.Cam);
ParticleManager.LoadPrefabs();
DecalManager = new DecalManager("Content/Particles/DecalPrefabs.xml");
DecalManager = new DecalManager();
yield return CoroutineStatus.Running;
LocationType.Init();
@@ -8,22 +8,25 @@ namespace Barotrauma.Particles
{
private Dictionary<string, DecalPrefab> prefabs;
public DecalManager(string configFile)
public DecalManager()
{
XDocument doc = XMLExtensions.TryLoadXml(configFile);
if (doc == null || doc.Root == null) return;
prefabs = new Dictionary<string, DecalPrefab>();
foreach (XElement element in doc.Root.Elements())
foreach (string configFile in GameMain.Config.SelectedContentPackage.GetFilesOfType(ContentType.Decals))
{
if (prefabs.ContainsKey(element.Name.ToString()))
XDocument doc = XMLExtensions.TryLoadXml(configFile);
if (doc == null || doc.Root == null) continue;
foreach (XElement element in doc.Root.Elements())
{
DebugConsole.ThrowError("Error in " + configFile + "! Each decal prefab must have a unique name.");
continue;
if (prefabs.ContainsKey(element.Name.ToString()))
{
DebugConsole.ThrowError("Error in " + configFile + "! Each decal prefab must have a unique name.");
continue;
}
prefabs.Add(element.Name.ToString(), new DecalPrefab(element));
}
prefabs.Add(element.Name.ToString(), new DecalPrefab(element));
}
}
public Decal CreateDecal(string decalName, float scale, Vector2 worldPosition, Hull hull)
@@ -14,7 +14,6 @@ namespace Barotrauma.Particles
class ParticleManager
{
public readonly string ConfigFile;
public static int particleCount;
private const int MaxOutOfViewDist = 500;
@@ -26,9 +25,8 @@ namespace Barotrauma.Particles
private Camera cam;
public ParticleManager(string configFile, Camera cam)
public ParticleManager(Camera cam)
{
ConfigFile = configFile;
this.cam = cam;
particles = new Particle[MaxParticles];
@@ -36,20 +34,22 @@ namespace Barotrauma.Particles
public void LoadPrefabs()
{
XDocument doc = XMLExtensions.TryLoadXml(ConfigFile);
if (doc == null || doc.Root == null) return;
prefabs = new Dictionary<string, ParticlePrefab>();
foreach (XElement element in doc.Root.Elements())
foreach (string configFile in GameMain.Config.SelectedContentPackage.GetFilesOfType(ContentType.Particles))
{
if (prefabs.ContainsKey(element.Name.ToString()))
XDocument doc = XMLExtensions.TryLoadXml(configFile);
if (doc == null || doc.Root == null) continue;
foreach (XElement element in doc.Root.Elements())
{
DebugConsole.ThrowError("Error in " + ConfigFile + "! Each particle prefab must have a unique name.");
continue;
if (prefabs.ContainsKey(element.Name.ToString()))
{
DebugConsole.ThrowError("Error in " + configFile + "! Each particle prefab must have a unique name.");
continue;
}
prefabs.Add(element.Name.ToString(), new ParticlePrefab(element));
}
prefabs.Add(element.Name.ToString(), new ParticlePrefab(element));
}
}
}
public Particle CreateParticle(string prefabName, Vector2 position, float angle, float speed, Hull hullGuess = null)
@@ -162,29 +162,31 @@ namespace Barotrauma
private void SerializeAll()
{
XDocument doc = XMLExtensions.TryLoadXml(GameMain.ParticleManager.ConfigFile);
if (doc == null || doc.Root == null) return;
var prefabList = GameMain.ParticleManager.GetPrefabList();
foreach (ParticlePrefab prefab in prefabList)
foreach (string configFile in GameMain.Config.SelectedContentPackage.GetFilesOfType(ContentType.Particles))
{
foreach (XElement element in doc.Root.Elements())
XDocument doc = XMLExtensions.TryLoadXml(configFile);
if (doc == null || doc.Root == null) continue;
var prefabList = GameMain.ParticleManager.GetPrefabList();
foreach (ParticlePrefab prefab in prefabList)
{
if (element.Name.ToString().ToLowerInvariant() != prefab.Name.ToLowerInvariant()) continue;
SerializableProperty.SerializeProperties(prefab, element, true);
foreach (XElement element in doc.Root.Elements())
{
if (element.Name.ToString().ToLowerInvariant() != prefab.Name.ToLowerInvariant()) continue;
SerializableProperty.SerializeProperties(prefab, element, true);
}
}
}
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
settings.NewLineOnAttributes = true;
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
settings.NewLineOnAttributes = true;
using (var writer = XmlWriter.Create(GameMain.ParticleManager.ConfigFile, settings))
{
doc.WriteTo(writer);
writer.Flush();
using (var writer = XmlWriter.Create(configFile, settings))
{
doc.WriteTo(writer);
writer.Flush();
}
}
}