From 23e0a76f37c78998e3e4f971772db9c3d8fb77e7 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 17 Jul 2018 13:38:21 +0300 Subject: [PATCH] Character head & gender settings are saved. Closes #474 --- .../Source/Screens/NetLobbyScreen.cs | 33 +++++++----- .../BarotraumaShared/Source/GameSettings.cs | 51 +++++++++++++++---- 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs index eee9771d2..6f5edabac 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs @@ -561,14 +561,18 @@ namespace Barotrauma var playYourself = new GUITickBox(new Rectangle(0, 0, 20, 20), TextManager.Get("PlayYourself"), Alignment.TopLeft, myPlayerFrame); playYourself.Selected = GameMain.NetworkMember.CharacterInfo != null; playYourself.OnSelected = TogglePlayYourself; - playYourself.UserData = "playyourself"; - - GUIButton toggleHead = new GUIButton(new Rectangle(0, 50, 15, 15), "<", "", myPlayerFrame); - toggleHead.UserData = -1; - toggleHead.OnClicked = ToggleHead; - toggleHead = new GUIButton(new Rectangle(60, 50, 15, 15), ">", "", myPlayerFrame); - toggleHead.UserData = 1; - toggleHead.OnClicked = ToggleHead; + playYourself.UserData = "playyourself"; + + GUIButton toggleHead = new GUIButton(new Rectangle(0, 50, 15, 15), "<", "", myPlayerFrame) + { + UserData = -1, + 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); @@ -631,7 +635,10 @@ namespace Barotrauma { 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); } else @@ -1249,14 +1256,12 @@ namespace Barotrauma private bool ToggleHead(GUIButton button, object userData) { - int dir = (int)userData; - if (GameMain.NetworkMember.CharacterInfo == null) return true; + int dir = (int)userData; GameMain.NetworkMember.CharacterInfo.HeadSpriteId += dir; - + GameMain.Config.CharacterHeadIndex = GameMain.NetworkMember.CharacterInfo.HeadSpriteId; UpdatePlayerHead(GameMain.NetworkMember.CharacterInfo); - return true; } @@ -1264,7 +1269,7 @@ namespace Barotrauma { Gender gender = (Gender)obj; GameMain.NetworkMember.CharacterInfo.Gender = gender; - + GameMain.Config.CharacterGender = GameMain.NetworkMember.CharacterInfo.Gender; UpdatePlayerHead(GameMain.NetworkMember.CharacterInfo); return true; } diff --git a/Barotrauma/BarotraumaShared/Source/GameSettings.cs b/Barotrauma/BarotraumaShared/Source/GameSettings.cs index 718e320bf..a476f143f 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSettings.cs @@ -25,7 +25,7 @@ namespace Barotrauma public bool EnableSplashScreen { get; set; } //public bool FullScreenEnabled { get; set; } - + private KeyOrMouse[] keyMapping; private WindowMode windowMode; @@ -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 { get @@ -230,18 +259,15 @@ namespace Barotrauma case "keymapping": foreach (XAttribute attribute in subElement.Attributes()) { - InputType inputType; - if (Enum.TryParse(attribute.Name.ToString(), true, out inputType)) + if (Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType)) { - int mouseButton; - if (int.TryParse(attribute.Value.ToString(), out mouseButton)) + if (int.TryParse(attribute.Value.ToString(), out int mouseButton)) { keyMapping[(int)inputType] = new KeyOrMouse(mouseButton); } else { - Keys key; - if (Enum.TryParse(attribute.Value.ToString(), true, out key)) + if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key)) { keyMapping[(int)inputType] = new KeyOrMouse(key); } @@ -258,6 +284,9 @@ namespace Barotrauma break; case "player": 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; } } @@ -363,8 +392,10 @@ namespace Barotrauma gameplay.Add(jobPreferences); doc.Root.Add(gameplay); - var playerElement = new XElement("player"); - playerElement.Add(new XAttribute("name", defaultPlayerName ?? "")); + var playerElement = new XElement("player", + new XAttribute("name", defaultPlayerName ?? ""), + new XAttribute("headindex", characterHeadIndex), + new XAttribute("gender", characterGender)); doc.Root.Add(playerElement); doc.Save(filePath);