PlayerPreferences.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Robust.Shared.Serialization;
  2. using Robust.Shared.Utility;
  3. namespace Content.Shared.Preferences
  4. {
  5. /// <summary>
  6. /// Contains all player characters and the index of the currently selected character.
  7. /// Serialized both over the network and to disk.
  8. /// </summary>
  9. [Serializable]
  10. [NetSerializable]
  11. public sealed class PlayerPreferences
  12. {
  13. private Dictionary<int, ICharacterProfile> _characters;
  14. public PlayerPreferences(IEnumerable<KeyValuePair<int, ICharacterProfile>> characters, int selectedCharacterIndex, Color adminOOCColor)
  15. {
  16. _characters = new Dictionary<int, ICharacterProfile>(characters);
  17. SelectedCharacterIndex = selectedCharacterIndex;
  18. AdminOOCColor = adminOOCColor;
  19. }
  20. /// <summary>
  21. /// All player characters.
  22. /// </summary>
  23. public IReadOnlyDictionary<int, ICharacterProfile> Characters => _characters;
  24. public ICharacterProfile GetProfile(int index)
  25. {
  26. return _characters[index];
  27. }
  28. /// <summary>
  29. /// Index of the currently selected character.
  30. /// </summary>
  31. public int SelectedCharacterIndex { get; }
  32. /// <summary>
  33. /// The currently selected character.
  34. /// </summary>
  35. public ICharacterProfile SelectedCharacter => Characters[SelectedCharacterIndex];
  36. public Color AdminOOCColor { get; set; }
  37. public int IndexOfCharacter(ICharacterProfile profile)
  38. {
  39. return _characters.FirstOrNull(p => p.Value == profile)?.Key ?? -1;
  40. }
  41. public bool TryIndexOfCharacter(ICharacterProfile profile, out int index)
  42. {
  43. return (index = IndexOfCharacter(profile)) != -1;
  44. }
  45. }
  46. }