Character head & gender settings are saved. Closes #474

This commit is contained in:
Joonas Rikkonen
2018-07-17 13:38:21 +03:00
parent 88abbe28e3
commit 23e0a76f37
2 changed files with 60 additions and 24 deletions
@@ -563,12 +563,16 @@ namespace Barotrauma
playYourself.OnSelected = TogglePlayYourself; playYourself.OnSelected = TogglePlayYourself;
playYourself.UserData = "playyourself"; playYourself.UserData = "playyourself";
GUIButton toggleHead = new GUIButton(new Rectangle(0, 50, 15, 15), "<", "", myPlayerFrame); GUIButton toggleHead = new GUIButton(new Rectangle(0, 50, 15, 15), "<", "", myPlayerFrame)
toggleHead.UserData = -1; {
toggleHead.OnClicked = ToggleHead; UserData = -1,
toggleHead = new GUIButton(new Rectangle(60, 50, 15, 15), ">", "", myPlayerFrame); OnClicked = ToggleHead
toggleHead.UserData = 1; };
toggleHead.OnClicked = ToggleHead; toggleHead = new GUIButton(new Rectangle(60, 50, 15, 15), ">", "", myPlayerFrame)
{
UserData = 1,
OnClicked = ToggleHead
};
new GUITextBlock(new Rectangle(100, 30, 200, 30), TextManager.Get("Gender"), "", myPlayerFrame); new GUITextBlock(new Rectangle(100, 30, 200, 30), TextManager.Get("Gender"), "", myPlayerFrame);
@@ -631,7 +635,10 @@ namespace Barotrauma
{ {
if (tickBox.Selected) if (tickBox.Selected)
{ {
GameMain.NetworkMember.CharacterInfo = new CharacterInfo(Character.HumanConfigFile, GameMain.NetworkMember.Name, Gender.None, null); GameMain.NetworkMember.CharacterInfo =
new CharacterInfo(Character.HumanConfigFile, GameMain.NetworkMember.Name, GameMain.Config.CharacterGender, null);
GameMain.NetworkMember.CharacterInfo.HeadSpriteId = GameMain.Config.CharacterHeadIndex;
UpdatePlayerFrame(GameMain.NetworkMember.CharacterInfo); UpdatePlayerFrame(GameMain.NetworkMember.CharacterInfo);
} }
else else
@@ -1249,14 +1256,12 @@ namespace Barotrauma
private bool ToggleHead(GUIButton button, object userData) private bool ToggleHead(GUIButton button, object userData)
{ {
int dir = (int)userData;
if (GameMain.NetworkMember.CharacterInfo == null) return true; if (GameMain.NetworkMember.CharacterInfo == null) return true;
int dir = (int)userData;
GameMain.NetworkMember.CharacterInfo.HeadSpriteId += dir; GameMain.NetworkMember.CharacterInfo.HeadSpriteId += dir;
GameMain.Config.CharacterHeadIndex = GameMain.NetworkMember.CharacterInfo.HeadSpriteId;
UpdatePlayerHead(GameMain.NetworkMember.CharacterInfo); UpdatePlayerHead(GameMain.NetworkMember.CharacterInfo);
return true; return true;
} }
@@ -1264,7 +1269,7 @@ namespace Barotrauma
{ {
Gender gender = (Gender)obj; Gender gender = (Gender)obj;
GameMain.NetworkMember.CharacterInfo.Gender = gender; GameMain.NetworkMember.CharacterInfo.Gender = gender;
GameMain.Config.CharacterGender = GameMain.NetworkMember.CharacterInfo.Gender;
UpdatePlayerHead(GameMain.NetworkMember.CharacterInfo); UpdatePlayerHead(GameMain.NetworkMember.CharacterInfo);
return true; return true;
} }
@@ -51,8 +51,37 @@ namespace Barotrauma
} }
} }
private bool unsavedSettings; private int characterHeadIndex;
public int CharacterHeadIndex
{
get { return characterHeadIndex; }
set
{
if (value == characterHeadIndex) return;
// Begin saving coroutine. Remove any existing save coroutines if one is running.
if (CoroutineManager.IsCoroutineRunning("saveCoroutine")) { CoroutineManager.StopCoroutines("saveCoroutine"); }
CoroutineManager.StartCoroutine(ApplyUnsavedChanges(), "saveCoroutine");
characterHeadIndex = value;
}
}
private Gender characterGender;
public Gender CharacterGender
{
get { return characterGender; }
set
{
if (value == characterGender) return;
// Begin saving coroutine. Remove any existing save coroutines if one is running.
if (CoroutineManager.IsCoroutineRunning("saveCoroutine")) { CoroutineManager.StopCoroutines("saveCoroutine"); }
CoroutineManager.StartCoroutine(ApplyUnsavedChanges(), "saveCoroutine");
characterGender = value;
}
}
private bool unsavedSettings;
public bool UnsavedSettings public bool UnsavedSettings
{ {
get get
@@ -230,18 +259,15 @@ namespace Barotrauma
case "keymapping": case "keymapping":
foreach (XAttribute attribute in subElement.Attributes()) foreach (XAttribute attribute in subElement.Attributes())
{ {
InputType inputType; if (Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType))
if (Enum.TryParse(attribute.Name.ToString(), true, out inputType))
{ {
int mouseButton; if (int.TryParse(attribute.Value.ToString(), out int mouseButton))
if (int.TryParse(attribute.Value.ToString(), out mouseButton))
{ {
keyMapping[(int)inputType] = new KeyOrMouse(mouseButton); keyMapping[(int)inputType] = new KeyOrMouse(mouseButton);
} }
else else
{ {
Keys key; if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key))
if (Enum.TryParse(attribute.Value.ToString(), true, out key))
{ {
keyMapping[(int)inputType] = new KeyOrMouse(key); keyMapping[(int)inputType] = new KeyOrMouse(key);
} }
@@ -258,6 +284,9 @@ namespace Barotrauma
break; break;
case "player": case "player":
defaultPlayerName = subElement.GetAttributeString("name", ""); defaultPlayerName = subElement.GetAttributeString("name", "");
characterHeadIndex = subElement.GetAttributeInt("headindex", Rand.Int(10));
characterGender = subElement.GetAttributeString("gender", Rand.Range(0.0f, 1.0f) < 0.5f ? "male" : "female")
.ToLowerInvariant() == "male" ? Gender.Male : Gender.Female;
break; break;
} }
} }
@@ -363,8 +392,10 @@ namespace Barotrauma
gameplay.Add(jobPreferences); gameplay.Add(jobPreferences);
doc.Root.Add(gameplay); doc.Root.Add(gameplay);
var playerElement = new XElement("player"); var playerElement = new XElement("player",
playerElement.Add(new XAttribute("name", defaultPlayerName ?? "")); new XAttribute("name", defaultPlayerName ?? ""),
new XAttribute("headindex", characterHeadIndex),
new XAttribute("gender", characterGender));
doc.Root.Add(playerElement); doc.Root.Add(playerElement);
doc.Save(filePath); doc.Save(filePath);