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 (info != null && head != null) { item.AddTag("gender:" + head.gender.ToString().ToLowerInvariant()); item.AddTag("race:" + head.race.ToString()); item.AddTag("headspriteid:" + info.HeadSpriteId.ToString()); item.AddTag("hairindex:" + head.HairIndex); item.AddTag("beardindex:" + head.BeardIndex); item.AddTag("moustacheindex:" + head.MoustacheIndex); item.AddTag("faceattachmentindex:" + head.FaceAttachmentIndex); 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; } } }