Unstable 0.17.0.0
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
using System;
|
||||
using Barotrauma.Extensions;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace Barotrauma
|
||||
{
|
||||
#if CLIENT
|
||||
public sealed class UIStyleFile : HashlessFile
|
||||
{
|
||||
public UIStyleFile(ContentPackage contentPackage, ContentPath path) : base(contentPackage, path) { }
|
||||
|
||||
public void LoadFromXElement(ContentXElement parentElement, bool overriding)
|
||||
{
|
||||
Identifier elemName = parentElement.NameAsIdentifier();
|
||||
Identifier elemNameWithFontSuffix = elemName.AppendIfMissing("Font");
|
||||
if (parentElement.IsOverride())
|
||||
{
|
||||
foreach (var element in parentElement.Elements())
|
||||
{
|
||||
LoadFromXElement(element, true);
|
||||
}
|
||||
}
|
||||
else if (GUIStyle.Fonts.ContainsKey(elemNameWithFontSuffix))
|
||||
{
|
||||
GUIFontPrefab prefab = new GUIFontPrefab(parentElement, this);
|
||||
GUIStyle.Fonts[elemNameWithFontSuffix].Prefabs.Add(prefab, overriding);
|
||||
}
|
||||
else if (GUIStyle.Sprites.ContainsKey(elemName))
|
||||
{
|
||||
GUISpritePrefab prefab = new GUISpritePrefab(parentElement, this);
|
||||
GUIStyle.Sprites[elemName].Prefabs.Add(prefab, overriding);
|
||||
}
|
||||
else if (GUIStyle.SpriteSheets.ContainsKey(elemName))
|
||||
{
|
||||
GUISpriteSheetPrefab prefab = new GUISpriteSheetPrefab(parentElement, this);
|
||||
GUIStyle.SpriteSheets[elemName].Prefabs.Add(prefab, overriding);
|
||||
}
|
||||
else if (GUIStyle.Colors.ContainsKey(elemName))
|
||||
{
|
||||
GUIColorPrefab prefab = new GUIColorPrefab(parentElement, this);
|
||||
GUIStyle.Colors[elemName].Prefabs.Add(prefab, overriding);
|
||||
}
|
||||
else if (elemName == "cursor")
|
||||
{
|
||||
GUICursorPrefab prefab = new GUICursorPrefab(parentElement, this);
|
||||
GUIStyle.CursorSprite.Prefabs.Add(prefab, overriding);
|
||||
}
|
||||
else if (elemName == "style")
|
||||
{
|
||||
foreach (var element in parentElement.Elements())
|
||||
{
|
||||
LoadFromXElement(element, overriding);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GUIComponentStyle prefab = new GUIComponentStyle(parentElement, this);
|
||||
GUIStyle.ComponentStyles.Add(prefab, overriding);
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
GUIStyle.ComponentStyles.RemoveByFile(this);
|
||||
GUIStyle.CursorSprite.Prefabs.RemoveByFile(this);
|
||||
GUIStyle.Fonts.Values.ForEach(p => p.Prefabs.RemoveByFile(this));
|
||||
GUIStyle.Sprites.Values.ForEach(p => p.Prefabs.RemoveByFile(this));
|
||||
GUIStyle.SpriteSheets.Values.ForEach(p => p.Prefabs.RemoveByFile(this));
|
||||
GUIStyle.Colors.Values.ForEach(p => p.Prefabs.RemoveByFile(this));
|
||||
}
|
||||
|
||||
public override sealed void Sort()
|
||||
{
|
||||
GUIStyle.ComponentStyles.SortAll();
|
||||
GUIStyle.CursorSprite.Prefabs.Sort();
|
||||
GUIStyle.Fonts.Values.ForEach(p => p.Prefabs.Sort());
|
||||
GUIStyle.Sprites.Values.ForEach(p => p.Prefabs.Sort());
|
||||
GUIStyle.SpriteSheets.Values.ForEach(p => p.Prefabs.Sort());
|
||||
GUIStyle.Colors.Values.ForEach(p => p.Prefabs.Sort());
|
||||
}
|
||||
}
|
||||
#else
|
||||
public sealed class UIStyleFile : OtherFile
|
||||
{
|
||||
public UIStyleFile(ContentPackage contentPackage, ContentPath path) : base(contentPackage, path) { }
|
||||
}
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user