Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/IdCard.cs
T
2021-08-26 21:08:21 +09:00

117 lines
3.2 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 (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;
}
}
}