Unstable 0.17.0.0

This commit is contained in:
Markus Isberg
2022-02-26 02:43:01 +09:00
parent a83f375681
commit 3974067915
913 changed files with 32472 additions and 32364 deletions
@@ -55,7 +55,7 @@ namespace Barotrauma.Items.Components
item.SpriteColor * 0.5f,
0.0f, item.Scale, SpriteEffects.None, 0.0f);
GUI.DrawRectangle(spriteBatch, new Vector2(attachPos.X - 2, -attachPos.Y - 2), Vector2.One * 5, GUI.Style.Red, thickness: 3);
GUI.DrawRectangle(spriteBatch, new Vector2(attachPos.X - 2, -attachPos.Y - 2), Vector2.One * 5, GUIStyle.Red, thickness: 3);
}
public void ClientWrite(IWriteMessage msg, object[] extraData = null)
@@ -21,107 +21,44 @@ namespace Barotrauma.Items.Components
public Color FacialHairColor;
public Color SkinColor;
public void ExtractJobPrefab(string[] tags)
public void ExtractJobPrefab(IReadOnlyDictionary<Identifier, string> tags)
{
string jobIdTag = tags.FirstOrDefault(s => s.StartsWith("jobid:"));
if (jobIdTag != null && jobIdTag.Length > 6)
if (!tags.TryGetValue("jobid".ToIdentifier(), out string jobId)) { return; }
if (!jobId.IsNullOrEmpty())
{
string jobId = jobIdTag.Substring(6);
if (jobId != string.Empty)
{
JobPrefab = JobPrefab.Get(jobId);
}
JobPrefab = JobPrefab.Get(jobId);
}
}
public void ExtractAppearance(CharacterInfo characterInfo, string[] tags)
public void ExtractAppearance(CharacterInfo characterInfo, IdCard idCard)
{
Gender disguisedGender = Gender.None;
Race disguisedRace = Race.None;
int disguisedHeadSpriteId = -1;
int disguisedHairIndex = -1;
int disguisedBeardIndex = -1;
int disguisedMoustacheIndex = -1;
int disguisedFaceAttachmentIndex = -1;
Color hairColor = Color.Black;
Color facialHairColor = Color.Black;
Color skinColor = Color.Black;
int disguisedHairIndex = idCard.OwnerHairIndex;
int disguisedBeardIndex = idCard.OwnerBeardIndex;
int disguisedMoustacheIndex = idCard.OwnerMoustacheIndex;
int disguisedFaceAttachmentIndex = idCard.OwnerFaceAttachmentIndex;
Color hairColor = idCard.OwnerHairColor;
Color facialHairColor = idCard.OwnerFacialHairColor;
Color skinColor = idCard.OwnerSkinColor;
var tags = idCard.OwnerTagSet;
foreach (string tag in tags)
{
string[] s = tag.Split(':');
switch (s[0].ToLowerInvariant())
{
case "haircolor":
hairColor = XMLExtensions.ParseColor(s[1]);
break;
case "facialhaircolor":
facialHairColor = XMLExtensions.ParseColor(s[1]);
break;
case "skincolor":
skinColor = XMLExtensions.ParseColor(s[1]);
break;
case "gender":
Enum.TryParse(s[1], ignoreCase: true, out disguisedGender);
break;
case "race":
Enum.TryParse(s[1], ignoreCase: true, out disguisedRace);
break;
case "headspriteid":
int.TryParse(s[1], NumberStyles.Any, CultureInfo.InvariantCulture, out disguisedHeadSpriteId);
break;
case "hairindex":
disguisedHairIndex = int.Parse(s[1]);
break;
case "beardindex":
disguisedBeardIndex = int.Parse(s[1]);
break;
case "moustacheindex":
disguisedMoustacheIndex = int.Parse(s[1]);
break;
case "faceattachmentindex":
disguisedFaceAttachmentIndex = int.Parse(s[1]);
break;
case "sheetindex":
string[] vectorValues = s[1].Split(";");
SheetIndex = new Vector2(float.Parse(vectorValues[0]), float.Parse(vectorValues[1]));
break;
}
}
if ((characterInfo.HasGenders && disguisedGender == Gender.None)
|| (characterInfo.HasRaces && disguisedRace == Race.None)
|| disguisedHeadSpriteId <= 0)
if ((characterInfo.HasSpecifierTags && !tags.Any()))
{
Portrait = null;
Attachments = null;
return;
}
foreach (XElement limbElement in characterInfo.Ragdoll.MainElement.Elements())
foreach (ContentXElement limbElement in characterInfo.Ragdoll.MainElement.Elements())
{
if (!limbElement.GetAttributeString("type", "").Equals("head", StringComparison.OrdinalIgnoreCase)) { continue; }
XElement spriteElement = limbElement.Element("sprite");
ContentXElement spriteElement = limbElement.GetChildElement("sprite");
if (spriteElement == null) { continue; }
string spritePath = spriteElement.Attribute("texture").Value;
spritePath = spritePath.Replace("[GENDER]", disguisedGender.ToString().ToLowerInvariant());
spritePath = spritePath.Replace("[RACE]", disguisedRace.ToString().ToLowerInvariant());
spritePath = spritePath.Replace("[HEADID]", disguisedHeadSpriteId.ToString());
spritePath = characterInfo.ReplaceVars(spritePath);
string fileName = Path.GetFileNameWithoutExtension(spritePath);
@@ -144,13 +81,11 @@ namespace Barotrauma.Items.Components
if (characterInfo.Wearables != null)
{
float baldnessChance = disguisedGender == Gender.Female ? 0.05f : 0.2f;
float baldnessChance = 0.1f;
List<XElement> createElementList(WearableType wearableType, float emptyCommonness = 1.0f)
List<ContentXElement> createElementList(WearableType wearableType, float emptyCommonness = 1.0f)
=> CharacterInfo.AddEmpty(
characterInfo.FilterByTypeAndHeadID(
characterInfo.FilterElementsByGenderAndRace(characterInfo.Wearables, disguisedGender, disguisedRace),
wearableType, disguisedHeadSpriteId),
characterInfo.FilterElements(characterInfo.Wearables, tags, wearableType),
wearableType, emptyCommonness);
var disguisedHairs = createElementList(WearableType.Hair, baldnessChance);
@@ -158,7 +93,7 @@ namespace Barotrauma.Items.Components
var disguisedMoustaches = createElementList(WearableType.Moustache);
var disguisedFaceAttachments = createElementList(WearableType.FaceAttachment);
XElement getElementFromList(List<XElement> list, int index)
ContentXElement getElementFromList(List<ContentXElement> list, int index)
=> CharacterInfo.IsValidIndex(index, list)
? list[index]
: characterInfo.GetRandomElement(list);
@@ -170,9 +105,9 @@ namespace Barotrauma.Items.Components
Attachments = new List<WearableSprite>();
void loadAttachments(List<WearableSprite> attachments, XElement element, WearableType wearableType)
void loadAttachments(List<WearableSprite> attachments, ContentXElement element, WearableType wearableType)
{
foreach (var s in element?.Elements("sprite") ?? Enumerable.Empty<XElement>())
foreach (var s in element?.GetChildElements("sprite") ?? Enumerable.Empty<ContentXElement>())
{
attachments.Add(new WearableSprite(s, wearableType));
}
@@ -185,7 +120,7 @@ namespace Barotrauma.Items.Components
loadAttachments(Attachments,
characterInfo.OmitJobInPortraitClothing
? JobPrefab.NoJobElement?.Element("PortraitClothing")
? JobPrefab.NoJobElement?.GetChildElement("PortraitClothing")
: JobPrefab?.ClothingElement,
WearableType.JobIndicator);
}
@@ -26,29 +26,28 @@ namespace Barotrauma.Items.Components
private readonly List<ParticleEmitter> particleEmitters = new List<ParticleEmitter>();
private readonly List<ParticleEmitter> particleEmitterCharges = new List<ParticleEmitter>();
[Serialize(1.0f, false, description: "The scale of the crosshair sprite (if there is one).")]
[Serialize(1.0f, IsPropertySaveable.No, description: "The scale of the crosshair sprite (if there is one).")]
public float CrossHairScale
{
get;
private set;
}
partial void InitProjSpecific(XElement element)
partial void InitProjSpecific(ContentXElement element)
{
foreach (XElement subElement in element.Elements())
foreach (var subElement in element.Elements())
{
string textureDir = GetTextureDirectory(subElement);
switch (subElement.Name.ToString().ToLowerInvariant())
{
case "crosshair":
{
string texturePath = subElement.GetAttributeString("texture", "");
crosshairSprite = new Sprite(subElement, texturePath.Contains("/") ? "" : Path.GetDirectoryName(item.Prefab.FilePath));
crosshairSprite = new Sprite(subElement, path: textureDir);
}
break;
case "crosshairpointer":
{
string texturePath = subElement.GetAttributeString("texture", "");
crosshairPointerSprite = new Sprite(subElement, texturePath.Contains("/") ? "" : Path.GetDirectoryName(item.Prefab.FilePath));
crosshairPointerSprite = new Sprite(subElement, path: textureDir);
}
break;
case "particleemitter":
@@ -58,7 +57,7 @@ namespace Barotrauma.Items.Components
particleEmitterCharges.Add(new ParticleEmitter(subElement));
break;
case "chargesound":
chargeSound = Submarine.LoadRoundSound(subElement, false);
chargeSound = RoundSound.Load(subElement, false);
break;
}
}
@@ -30,11 +30,11 @@ namespace Barotrauma.Items.Components
private Color color;
partial void InitProjSpecific(XElement element)
partial void InitProjSpecific(ContentXElement element)
{
currentCrossHairPointerScale = element.GetAttributeFloat("crosshairscale", 0.1f);
foreach (XElement subElement in element.Elements())
foreach (var subElement in element.Elements())
{
switch (subElement.Name.ToString().ToLowerInvariant())
{
@@ -243,7 +243,7 @@ namespace Barotrauma.Items.Components
if (liquidItem == null) { return; }
bool isCleaning = false;
liquidColors.TryGetValue(liquidItem.prefab.Identifier, out color);
liquidColors.TryGetValue(liquidItem.Prefab.Identifier, out color);
// Ethanol or other cleaning solvent
if (color.A == 0) { isCleaning = true; }