(3dc4135ce) v0.9.5.1

This commit is contained in:
Regalis
2019-11-21 18:22:25 +01:00
parent b39922a074
commit 5c95c53118
287 changed files with 12655 additions and 5048 deletions
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Xml.Linq;
using Barotrauma.Extensions;
using System.Linq;
using System.IO;
namespace Barotrauma
{
@@ -31,6 +32,8 @@ namespace Barotrauma
partial class JobPrefab
{
public static Dictionary<string, JobPrefab> List;
public static XElement NoJobElement;
public static JobPrefab Get(string identifier)
{
if (List == null)
@@ -146,8 +149,11 @@ namespace Barotrauma
private set;
}
public XElement Element { get; private set; }
public XElement ClothingElement { get; private set; }
public XElement PreviewElement { get; private set; }
public JobPrefab(XElement element)
{
SerializableProperty.DeserializeProperties(this, element);
@@ -155,6 +161,8 @@ namespace Barotrauma
Description = TextManager.Get("JobDescription." + Identifier);
Identifier = Identifier.ToLowerInvariant();
Element = element;
foreach (XElement subElement in element.Elements())
{
switch (subElement.Name.ToString().ToLowerInvariant())
@@ -220,7 +228,71 @@ namespace Barotrauma
{
ClothingElement = element.Element("portraitclothing");
}
PreviewElement = element.Element("PreviewSprites");
if (PreviewElement == null)
{
PreviewElement = element.Element("previewsprites");
}
}
public class OutfitPreview
{
/// <summary>
/// Pair.First = sprite, Pair.Second = draw offset
/// </summary>
public readonly List<Pair<Sprite, Vector2>> Sprites;
public OutfitPreview()
{
Sprites = new List<Pair<Sprite, Vector2>>();
}
public void AddSprite(Sprite sprite, Vector2 drawOffset)
{
Sprites.Add(new Pair<Sprite, Vector2>(sprite, drawOffset));
}
}
public List<OutfitPreview> GetJobOutfitSprites(Gender gender, out Vector2 dimensions)
{
List<OutfitPreview> outfitPreviews = new List<OutfitPreview>();
dimensions = PreviewElement.GetAttributeVector2("dims", Vector2.One);
if (PreviewElement == null) { return outfitPreviews; }
var equipIdentifiers = Element.Elements("Items").Elements().Where(e => e.GetAttributeBool("outfit", false)).Select(e => e.GetAttributeString("identifier", ""));
var children = PreviewElement.Elements().ToList();
var outfitPrefab = MapEntityPrefab.List.Find(me => me is ItemPrefab itemPrefab && equipIdentifiers.Contains(itemPrefab.Identifier)) as ItemPrefab;
if (outfitPrefab == null) { return null; }
var wearables = outfitPrefab.ConfigElement.Elements("Wearable");
if (!wearables.Any()) { return null; }
int variantCount = wearables.First().GetAttributeInt("variants", 1);
for (int i = 0; i < variantCount; i++)
{
var outfitPreview = new OutfitPreview();
for (int n = 0; n < children.Count; n++)
{
XElement spriteElement = children[n];
string spriteTexture = spriteElement.GetAttributeString("texture", "").Replace("[GENDER]", (gender == Gender.Female) ? "female" : "male");
string textureVariant = spriteTexture.Replace("[VARIANT]", (i + 1).ToString());
if (!File.Exists(textureVariant))
{
textureVariant = spriteTexture.Replace("[VARIANT]", "1");
}
var torsoSprite = new Sprite(spriteElement, path: "", file: textureVariant);
torsoSprite.size = new Vector2(torsoSprite.SourceRect.Width, torsoSprite.SourceRect.Height);
outfitPreview.AddSprite(torsoSprite, children[n].GetAttributeVector2("offset", Vector2.Zero));
}
outfitPreviews.Add(outfitPreview);
}
return outfitPreviews;
}
public static JobPrefab Random(Rand.RandSync sync = Rand.RandSync.Unsynced) => List.Values.GetRandom(sync);
@@ -239,6 +311,7 @@ namespace Barotrauma
}
foreach (XElement element in mainElement.Elements())
{
if (element.Name.ToString().ToLowerInvariant() == "nojob") { continue; }
if (element.IsOverride())
{
var job = new JobPrefab(element.FirstElement());
@@ -262,6 +335,8 @@ namespace Barotrauma
}
}
}
NoJobElement = NoJobElement ?? mainElement.Element("NoJob");
NoJobElement = NoJobElement ?? mainElement.Element("nojob");
}
}
}