using System; using System.Linq; using Content.Client.Interfaces; using Content.Shared.Preferences; using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; namespace Content.Client { /// /// Receives and from the server during the initial /// connection. /// Stores preferences on the server through and . /// public class ClientPreferencesManager : SharedPreferencesManager, IClientPreferencesManager { #pragma warning disable 649 [Dependency] private readonly IClientNetManager _netManager; #pragma warning restore 649 public event Action OnServerDataLoaded; public GameSettings Settings { get; private set; } public PlayerPreferences Preferences { get; private set; } public void Initialize() { _netManager.RegisterNetMessage(nameof(MsgPreferencesAndSettings), HandlePreferencesAndSettings); _netManager.RegisterNetMessage(nameof(MsgUpdateCharacter)); _netManager.RegisterNetMessage(nameof(MsgSelectCharacter)); } public void SelectCharacter(ICharacterProfile profile) { SelectCharacter(Preferences.IndexOfCharacter(profile)); } public void SelectCharacter(int slot) { Preferences = new PlayerPreferences(Preferences.Characters, slot); var msg = _netManager.CreateNetMessage(); msg.SelectedCharacterIndex = slot; _netManager.ClientSendMessage(msg); } public void UpdateCharacter(ICharacterProfile profile, int slot) { var characters = Preferences.Characters.ToArray(); characters[slot] = profile; Preferences = new PlayerPreferences(characters, Preferences.SelectedCharacterIndex); var msg = _netManager.CreateNetMessage(); msg.Profile = profile; msg.Slot = slot; _netManager.ClientSendMessage(msg); } public void CreateCharacter(ICharacterProfile profile) { UpdateCharacter(profile, Preferences.FirstEmptySlot); } public void DeleteCharacter(ICharacterProfile profile) { DeleteCharacter(Preferences.IndexOfCharacter(profile)); } public void DeleteCharacter(int slot) { UpdateCharacter(null, slot); } private void HandlePreferencesAndSettings(MsgPreferencesAndSettings message) { Preferences = message.Preferences; Settings = message.Settings; OnServerDataLoaded?.Invoke(); } } }