Files
Nitrox/NitroxClient/GameLogic/PlayerLogic/PlayerPreferences/PlayerPreferenceManager.cs
2025-07-06 00:23:46 +02:00

73 lines
2.1 KiB
C#

using NitroxModel.Helper;
using NitroxModel.MultiplayerSession;
using NitroxModel_Subnautica.DataStructures;
using UnityEngine;
namespace NitroxClient.GameLogic.PlayerLogic.PlayerPreferences
{
public class PlayerPreferenceManager
{
private readonly PlayerPreferenceState state;
private readonly IPreferenceStateProvider stateProvider;
public PlayerPreferenceManager(IPreferenceStateProvider stateProvider)
{
this.stateProvider = stateProvider;
state = stateProvider.GetPreferenceState();
}
public void SetPreference(string ipAddress, PlayerPreference playerPreference)
{
Validate.NotNull(ipAddress);
Validate.NotNull(playerPreference);
if (state.Preferences.ContainsKey(ipAddress))
{
PlayerPreference currentPreference = state.Preferences[ipAddress];
if (currentPreference.Equals(playerPreference))
{
return;
}
state.Preferences[ipAddress] = playerPreference;
state.LastSetPlayerPreference = playerPreference;
return;
}
state.Preferences.Add(ipAddress, playerPreference);
state.LastSetPlayerPreference = playerPreference;
}
public PlayerPreference GetPreference(string ipAddress)
{
Validate.NotNull(ipAddress);
if (state.Preferences.TryGetValue(ipAddress, out PlayerPreference preference))
{
return preference.Clone();
}
if (state.LastSetPlayerPreference != null)
{
return state.LastSetPlayerPreference.Clone();
}
Color playerColor = RandomColorGenerator.GenerateColor().ToUnity();
PlayerPreference defaultPlayerPreference = new PlayerPreference(playerColor);
state.LastSetPlayerPreference = defaultPlayerPreference;
return defaultPlayerPreference;
}
public void Save()
{
stateProvider.SavePreferenceState(state);
}
}
}