- head sprites can be given "tags", and body is chosen from sprites with the same tag

- black character sprites
This commit is contained in:
Regalis
2016-06-03 14:57:22 +03:00
parent 50bee3da41
commit 6b6af6e72e
10 changed files with 75 additions and 6 deletions

View File

@@ -179,7 +179,7 @@ namespace Barotrauma
new Vector2(GameMain.GraphicsWidth / damageOverlay.size.X, GameMain.GraphicsHeight / damageOverlay.size.Y));
}
if (character.IsUnconscious)
if (character.IsUnconscious && !character.IsDead)
{
if (suicideButton == null)
{

View File

@@ -2,6 +2,8 @@
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
namespace Barotrauma
@@ -45,6 +47,12 @@ namespace Barotrauma
}
}
public List<string> SpriteTags
{
get;
private set;
}
public int HeadSpriteId
{
get { return headSpriteId; }
@@ -92,6 +100,8 @@ namespace Barotrauma
pickedItems = new List<ushort>();
SpriteTags = new List<string>();
//ID = -1;
XDocument doc = ToolBox.TryLoadXml(file);
@@ -171,8 +181,30 @@ namespace Barotrauma
spritePath = spritePath.Replace("[GENDER]", (this.gender == Gender.Female) ? "f" : "");
spritePath = spritePath.Replace("[HEADID]", HeadSpriteId.ToString());
headSprite = new Sprite(spriteElement, "", spritePath);
string fileName = Path.GetFileNameWithoutExtension(spritePath);
//go through the files in the directory to find a matching sprite
var files = Directory.GetFiles(Path.GetDirectoryName(spritePath)).ToList();
foreach (string file in files)
{
string fileWithoutTags = Path.GetFileNameWithoutExtension(file);
fileWithoutTags = fileWithoutTags.Split('[', ']').First();
if (fileWithoutTags != fileName) continue;
headSprite = new Sprite(spriteElement, "", file);
//extract the tags out of the filename
SpriteTags = file.Split('[', ']').Skip(1).ToList();
if (SpriteTags.Any())
{
SpriteTags.RemoveAt(SpriteTags.Count-1);
}
break;
}
break;
}
}

View File

@@ -8,6 +8,8 @@ using Microsoft.Xna.Framework.Graphics;
using Barotrauma.Items.Components;
using System.Collections.Generic;
using Barotrauma.Lights;
using System.Linq;
using System.IO;
namespace Barotrauma
{
@@ -273,14 +275,34 @@ namespace Barotrauma
case "sprite":
string spritePath = subElement.Attribute("texture").Value;
if (character.Info!=null)
string spritePathWithTags = spritePath;
if (character.Info != null)
{
spritePath = spritePath.Replace("[GENDER]", (character.Info.Gender == Gender.Female) ? "f" : "");
spritePath = spritePath.Replace("[HEADID]", character.Info.HeadSpriteId.ToString());
if (character.Info.HeadSprite != null && character.Info.SpriteTags.Any())
{
string tags = "";
character.Info.SpriteTags.ForEach(tag => tags += "[" + tag + "]");
spritePathWithTags = Path.Combine(
Path.GetDirectoryName(spritePath),
Path.GetFileNameWithoutExtension(spritePath) + tags + Path.GetExtension(spritePath));
}
}
if (File.Exists(spritePathWithTags))
{
sprite = new Sprite(subElement, "", spritePathWithTags);
}
else
{
sprite = new Sprite(subElement, "", spritePath);
}
sprite = new Sprite(subElement, "", spritePath);
break;
case "damagedsprite":
string damagedSpritePath = subElement.Attribute("texture").Value;