119 lines
3.3 KiB
C#
119 lines
3.3 KiB
C#
using Microsoft.Xna.Framework;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Xml.Linq;
|
|
|
|
namespace Barotrauma.Items.Components
|
|
{
|
|
partial class IdCard : Pickable
|
|
{
|
|
[Serialize(CharacterTeamType.None, true, alwaysUseInstanceValues: true)]
|
|
public CharacterTeamType TeamID
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
[Serialize(0, true, alwaysUseInstanceValues: true)]
|
|
public int SubmarineSpecificID
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
private JobPrefab cachedJobPrefab;
|
|
private string cachedName;
|
|
|
|
public IdCard(Item item, XElement element) : base(item, element)
|
|
{
|
|
|
|
}
|
|
|
|
public void Initialize(CharacterInfo info)
|
|
{
|
|
if (info == null) { return; }
|
|
|
|
if (info.Job?.Prefab != null)
|
|
{
|
|
item.AddTag("jobid:" + info.Job.Prefab.Identifier);
|
|
}
|
|
|
|
TeamID = info.TeamID;
|
|
|
|
var head = info.Head;
|
|
|
|
if (head == null) { return; }
|
|
|
|
if (info.HasGenders) { item.AddTag($"gender:{head.gender.ToString().ToLowerInvariant()}"); }
|
|
if (info.HasRaces) { item.AddTag($"race:{head.race}"); }
|
|
item.AddTag($"headspriteid:{info.HeadSpriteId}");
|
|
item.AddTag($"hairindex:{head.HairIndex}");
|
|
item.AddTag($"beardindex:{head.BeardIndex}");
|
|
item.AddTag($"moustacheindex:{head.MoustacheIndex}");
|
|
item.AddTag($"faceattachmentindex:{head.FaceAttachmentIndex}");
|
|
item.AddTag($"haircolor:{head.HairColor.ToStringHex()}");
|
|
item.AddTag($"facialhaircolor:{head.FacialHairColor.ToStringHex()}");
|
|
item.AddTag($"skincolor:{head.SkinColor.ToStringHex()}");
|
|
|
|
if (head.SheetIndex != null)
|
|
{
|
|
item.AddTag($"sheetindex:{head.SheetIndex.Value.X};{head.SheetIndex.Value.Y}");
|
|
}
|
|
}
|
|
|
|
public override void Equip(Character character)
|
|
{
|
|
base.Equip(character);
|
|
character.Info?.CheckDisguiseStatus(true, this);
|
|
}
|
|
|
|
public override void Unequip(Character character)
|
|
{
|
|
base.Unequip(character);
|
|
character.Info?.CheckDisguiseStatus(true, this);
|
|
}
|
|
|
|
public JobPrefab GetJob()
|
|
{
|
|
if (cachedJobPrefab != null)
|
|
{
|
|
return cachedJobPrefab;
|
|
}
|
|
|
|
foreach (string tag in item.GetTags())
|
|
{
|
|
if (tag.StartsWith("jobid:"))
|
|
{
|
|
string jobIdentifier = tag.Split(':').Last();
|
|
if (JobPrefab.Get(jobIdentifier) is { } jobPrefab)
|
|
{
|
|
cachedJobPrefab = jobPrefab;
|
|
return jobPrefab;
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public string GetName()
|
|
{
|
|
if (cachedName != null)
|
|
{
|
|
return cachedName;
|
|
}
|
|
|
|
foreach (string tag in item.GetTags())
|
|
{
|
|
if (tag.StartsWith("name:"))
|
|
{
|
|
string ownerName = tag.Split(':').Last();
|
|
cachedName = ownerName;
|
|
return ownerName;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
} |