mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-20 15:41:01 +00:00
refactored PlayerRegistry and PlayerInfo (#108)
This commit is contained in:
parent
11811283d4
commit
c2763b186d
@ -44,41 +44,42 @@ namespace QSB.Events
|
||||
|
||||
private void OnClientReceiveMessage(EventMessage message)
|
||||
{
|
||||
if (message.SenderId == PlayerTransformSync.LocalInstance.netId.Value)
|
||||
if (message.SenderId == PlayerRegistry.LocalPlayer.NetId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var player = PlayerRegistry.GetPlayer(message.SenderId);
|
||||
switch ((EventType)message.EventType)
|
||||
{
|
||||
case EventType.TurnOnFlashlight:
|
||||
PlayerRegistry.GetPlayerFlashlight(message.SenderId).TurnOn();
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Flashlight, true);
|
||||
player.FlashLight.TurnOn();
|
||||
player.UpdateState(State.Flashlight, true);
|
||||
break;
|
||||
case EventType.TurnOffFlashlight:
|
||||
PlayerRegistry.GetPlayerFlashlight(message.SenderId).TurnOff();
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Flashlight, false);
|
||||
player.FlashLight.TurnOn();
|
||||
player.UpdateState(State.Flashlight, false);
|
||||
break;
|
||||
case EventType.SuitUp:
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Suit, true);
|
||||
player.UpdateState(State.Suit, true);
|
||||
break;
|
||||
case EventType.RemoveSuit:
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Suit, false);
|
||||
player.UpdateState(State.Suit, false);
|
||||
break;
|
||||
case EventType.EquipSignalscope:
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Signalscope, true);
|
||||
PlayerRegistry.GetPlayerSignalscope(message.SenderId).EquipTool();
|
||||
player.UpdateState(State.Signalscope, true);
|
||||
player.Signalscope.EquipTool();
|
||||
break;
|
||||
case EventType.UnequipSignalscope:
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Signalscope, false);
|
||||
PlayerRegistry.GetPlayerSignalscope(message.SenderId).UnequipTool();
|
||||
player.UpdateState(State.Signalscope, false);
|
||||
player.Signalscope.UnequipTool();
|
||||
break;
|
||||
case EventType.EquipTranslator:
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Translator, true);
|
||||
PlayerRegistry.GetPlayerTranslator(message.SenderId).EquipTool();
|
||||
player.UpdateState(State.Translator, true);
|
||||
player.Translator.EquipTool();
|
||||
break;
|
||||
case EventType.UnequipTranslator:
|
||||
PlayerRegistry.UpdateState(message.SenderId, State.Translator, false);
|
||||
PlayerRegistry.GetPlayerTranslator(message.SenderId).UnequipTool();
|
||||
player.UpdateState(State.Translator, false);
|
||||
player.Translator.UnequipTool();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -45,8 +45,9 @@ namespace QSB.Events
|
||||
|
||||
private void OnClientReceiveMessage(JoinMessage message)
|
||||
{
|
||||
PlayerRegistry.CreatePlayer(message.SenderId, message.PlayerName);
|
||||
PlayerRegistry.SetReadiness(message.SenderId, true);
|
||||
var player = PlayerRegistry.CreatePlayer(message.SenderId);
|
||||
player.Name = message.PlayerName;
|
||||
player.IsReady = true;
|
||||
DebugLog.ToAll(message.PlayerName, "joined!");
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ namespace QSB.Events
|
||||
|
||||
private void OnClientReceiveMessage(LeaveMessage message)
|
||||
{
|
||||
var playerName = PlayerRegistry.GetPlayerName(message.SenderId);
|
||||
var playerName = PlayerRegistry.GetPlayer(message.SenderId).Name;
|
||||
DebugLog.ToAll(playerName, "disconnected.");
|
||||
PlayerRegistry.RemovePlayer(message.SenderId);
|
||||
foreach (var objectId in message.ObjectIds)
|
||||
|
@ -1,15 +1,46 @@
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
using QSB.Animation;
|
||||
using QSB.Utility;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB
|
||||
{
|
||||
public class PlayerInfo
|
||||
{
|
||||
public uint NetId { get; set; }
|
||||
public uint NetId { get; }
|
||||
public GameObject Body { get; set; }
|
||||
public GameObject Camera { get; set; }
|
||||
public QSBFlashlight FlashLight => Camera.GetComponentInChildren<QSBFlashlight>();
|
||||
public QSBTool Signalscope => GetToolByType(ToolType.Signalscope);
|
||||
public QSBTool Translator => GetToolByType(ToolType.Translator);
|
||||
public string Name { get; set; }
|
||||
public bool Ready { get; set; }
|
||||
public bool IsReady { get; set; }
|
||||
public Transform ReferenceSector { get; set; }
|
||||
public State State { get; set; }
|
||||
public State State { get; private set; }
|
||||
|
||||
public PlayerInfo(uint id)
|
||||
{
|
||||
NetId = id;
|
||||
}
|
||||
|
||||
public void UpdateState(State state, bool value)
|
||||
{
|
||||
var states = State;
|
||||
if (value)
|
||||
{
|
||||
FlagsHelper.Set(ref states, state);
|
||||
}
|
||||
else
|
||||
{
|
||||
FlagsHelper.Unset(ref states, state);
|
||||
}
|
||||
State = states;
|
||||
}
|
||||
|
||||
private QSBTool GetToolByType(ToolType type)
|
||||
{
|
||||
return Camera.GetComponentsInChildren<QSBTool>().First(x => x.Type == type);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,160 +1,46 @@
|
||||
using OWML.Common;
|
||||
using QSB.Animation;
|
||||
using QSB.Events;
|
||||
using QSB.Utility;
|
||||
using QSB.Events;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using QSB.TransformSync;
|
||||
|
||||
namespace QSB
|
||||
{
|
||||
public static class PlayerRegistry
|
||||
{
|
||||
public static PlayerInfo LocalPlayer => GetPlayer(PlayerTransformSync.LocalInstance.netId.Value);
|
||||
|
||||
public static List<PlayerInfo> PlayerList { get; } = new List<PlayerInfo>();
|
||||
|
||||
// Methods relating to the PlayerList :
|
||||
|
||||
public static void CreatePlayer(uint id, string name)
|
||||
public static PlayerInfo CreatePlayer(uint id)
|
||||
{
|
||||
if (PlayerExists(id))
|
||||
{
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
var player = new PlayerInfo
|
||||
{
|
||||
NetId = id,
|
||||
Name = name
|
||||
};
|
||||
var player = new PlayerInfo(id);
|
||||
PlayerList.Add(player);
|
||||
return player;
|
||||
}
|
||||
|
||||
private static PlayerInfo GetPlayer(uint id)
|
||||
public static PlayerInfo GetPlayer(uint id)
|
||||
{
|
||||
return PlayerList.Find(x => x.NetId == id);
|
||||
return PlayerList.FirstOrDefault(x => x.NetId == id);
|
||||
}
|
||||
|
||||
public static bool PlayerExists(uint id)
|
||||
{
|
||||
return PlayerList.Any(x => x.NetId == id);
|
||||
return GetPlayer(id) != null;
|
||||
}
|
||||
|
||||
public static void RemovePlayer(uint id)
|
||||
{
|
||||
PlayerList.Remove(PlayerList.Find(x => x.NetId == id));
|
||||
PlayerList.Remove(GetPlayer(id));
|
||||
}
|
||||
|
||||
public static Dictionary<uint, string> GetPlayerNames()
|
||||
{
|
||||
var dict = new Dictionary<uint, string>();
|
||||
PlayerList.ForEach(x => dict.Add(x.NetId, x.Name));
|
||||
return dict;
|
||||
}
|
||||
|
||||
// Registering player objects :
|
||||
|
||||
public static void RegisterPlayerBody(uint id, GameObject body)
|
||||
{
|
||||
GetPlayer(id).Body = body;
|
||||
}
|
||||
|
||||
public static void RegisterPlayerCamera(uint id, GameObject camera)
|
||||
{
|
||||
GetPlayer(id).Camera = camera;
|
||||
}
|
||||
|
||||
// Get player objects :
|
||||
|
||||
public static GameObject GetPlayerCamera(uint id)
|
||||
{
|
||||
return GetPlayer(id).Camera;
|
||||
}
|
||||
|
||||
public static QSBFlashlight GetPlayerFlashlight(uint id)
|
||||
{
|
||||
return GetPlayerCamera(id).GetComponentInChildren<QSBFlashlight>();
|
||||
}
|
||||
|
||||
public static QSBTool GetPlayerSignalscope(uint id)
|
||||
{
|
||||
var tools = GetPlayer(id).Camera.GetComponentsInChildren<QSBTool>();
|
||||
if (tools.Length == 0)
|
||||
{
|
||||
DebugLog.ToConsole("Error - Zero items in QSBTool list while trying to get Signalscope", MessageType.Error);
|
||||
return null;
|
||||
}
|
||||
return tools.First(x => x.Type == ToolType.Signalscope);
|
||||
}
|
||||
|
||||
public static QSBTool GetPlayerTranslator(uint id)
|
||||
{
|
||||
var tools = GetPlayer(id).Camera.GetComponentsInChildren<QSBTool>();
|
||||
if (tools.Length == 0)
|
||||
{
|
||||
DebugLog.ToConsole("Error - Zero items in QSBTool list while trying to get Translator", MessageType.Error);
|
||||
return null;
|
||||
}
|
||||
return tools.First(x => x.Type == ToolType.Translator);
|
||||
}
|
||||
|
||||
// Update player data :
|
||||
|
||||
public static void HandleFullStateMessage(FullStateMessage message)
|
||||
{
|
||||
if (!PlayerExists(message.SenderId))
|
||||
{
|
||||
CreatePlayer(message.SenderId, message.PlayerName);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetPlayer(message.SenderId).Name = message.PlayerName;
|
||||
}
|
||||
var player = GetPlayer(message.SenderId) ?? CreatePlayer(message.SenderId);
|
||||
player.Name = message.PlayerName;
|
||||
}
|
||||
|
||||
public static void SetReadiness(uint id, bool ready)
|
||||
{
|
||||
GetPlayer(id).Ready = ready;
|
||||
}
|
||||
|
||||
public static void UpdateSector(uint id, Transform sector)
|
||||
{
|
||||
GetPlayer(id).ReferenceSector = sector;
|
||||
}
|
||||
|
||||
public static void UpdateState(uint id, State state, bool value)
|
||||
{
|
||||
var states = GetPlayer(id).State;
|
||||
if (value)
|
||||
{
|
||||
FlagsHelper.Set(ref states, state);
|
||||
}
|
||||
else
|
||||
{
|
||||
FlagsHelper.Unset(ref states, state);
|
||||
}
|
||||
GetPlayer(id).State = states;
|
||||
}
|
||||
|
||||
// Get player data :
|
||||
|
||||
public static string GetPlayerName(uint id)
|
||||
{
|
||||
return GetPlayer(id).Name;
|
||||
}
|
||||
|
||||
public static bool IsPlayerReady(uint id)
|
||||
{
|
||||
return GetPlayer(id).Ready;
|
||||
}
|
||||
|
||||
public static Transform GetSector(uint id)
|
||||
{
|
||||
return GetPlayer(id).ReferenceSector;
|
||||
}
|
||||
|
||||
public static bool GetState(uint id, State state)
|
||||
{
|
||||
var states = GetPlayer(id).State;
|
||||
return FlagsHelper.IsSet(states, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,8 +77,8 @@ namespace QSB
|
||||
profileManager.Initialize();
|
||||
var profile = profileManager.GetValue<StandaloneProfileManager.ProfileData>("_currentProfile");
|
||||
var profileName = profile?.profileName;
|
||||
return !string.IsNullOrEmpty(profileName)
|
||||
? profileName
|
||||
return !string.IsNullOrEmpty(profileName)
|
||||
? profileName
|
||||
: _defaultNames.OrderBy(x => Guid.NewGuid()).First();
|
||||
}
|
||||
|
||||
|
@ -147,7 +147,7 @@ namespace QSB.TimeSync
|
||||
|
||||
private void OnClientReceiveMessage(DeathMessage message)
|
||||
{
|
||||
var playerName = PlayerRegistry.GetPlayerName(message.SenderId);
|
||||
var playerName = PlayerRegistry.GetPlayer(message.SenderId).Name;
|
||||
var deathMessage = Necronomicon.GetPhrase(message.DeathType);
|
||||
DebugLog.ToAll(string.Format(deathMessage, playerName));
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ namespace QSB.TransformSync
|
||||
|
||||
PlayerToolsManager.Init(body);
|
||||
|
||||
PlayerRegistry.RegisterPlayerCamera(GetAttachedNetId(), body.gameObject);
|
||||
PlayerRegistry.GetPlayer(GetAttachedNetId()).Camera = body.gameObject;
|
||||
|
||||
return body;
|
||||
}
|
||||
@ -41,7 +41,7 @@ namespace QSB.TransformSync
|
||||
|
||||
PlayerToolsManager.Init(body.transform);
|
||||
|
||||
PlayerRegistry.RegisterPlayerCamera(GetAttachedNetId(), body);
|
||||
PlayerRegistry.GetPlayer(GetAttachedNetId()).Camera = body;
|
||||
|
||||
return body.transform;
|
||||
}
|
||||
|
@ -33,11 +33,11 @@ namespace QSB.TransformSync
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!_isReady || !PlayerRegistry.IsPlayerReady(_netId))
|
||||
if (!_isReady || !PlayerRegistry.GetPlayer(_netId).IsReady)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_markerLabel = PlayerRegistry.GetPlayerName(_netId);
|
||||
_markerLabel = PlayerRegistry.GetPlayer(_netId).Name;
|
||||
_isReady = false;
|
||||
|
||||
base.InitCanvasMarker();
|
||||
|
@ -37,7 +37,7 @@ namespace QSB.TransformSync
|
||||
|
||||
GetComponent<AnimationSync>().InitLocal(body);
|
||||
|
||||
PlayerRegistry.RegisterPlayerBody(GetAttachedNetId(), body.gameObject);
|
||||
PlayerRegistry.GetPlayer(GetAttachedNetId()).Body = body.gameObject;
|
||||
|
||||
return body;
|
||||
}
|
||||
@ -53,7 +53,7 @@ namespace QSB.TransformSync
|
||||
var marker = body.gameObject.AddComponent<PlayerHUDMarker>();
|
||||
marker.SetId(netId.Value);
|
||||
|
||||
PlayerRegistry.RegisterPlayerBody(GetAttachedNetId(), body.gameObject);
|
||||
PlayerRegistry.GetPlayer(GetAttachedNetId()).Body = body.gameObject;
|
||||
|
||||
return body;
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ namespace QSB.TransformSync
|
||||
{
|
||||
DebugLog.ToScreen("Gonna set sector");
|
||||
|
||||
PlayerRegistry.UpdateSector(id, FindSectorTransform(sectorName));
|
||||
PlayerRegistry.GetPlayer(id).ReferenceSector = FindSectorTransform(sectorName);
|
||||
|
||||
var msg = new SectorMessage
|
||||
{
|
||||
@ -91,7 +91,7 @@ namespace QSB.TransformSync
|
||||
}
|
||||
|
||||
DebugLog.ToScreen("Found sector", sectorName, ", setting for", message.SenderId);
|
||||
PlayerRegistry.UpdateSector(message.SenderId, sectorTransform);
|
||||
PlayerRegistry.GetPlayer(message.SenderId).ReferenceSector = sectorTransform;
|
||||
}
|
||||
|
||||
private void OnServerReceiveMessage(SectorMessage message)
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Events;
|
||||
using OWML.Common;
|
||||
using QSB.Events;
|
||||
using QSB.Utility;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
@ -55,12 +56,12 @@ namespace QSB.TransformSync
|
||||
private void SetFirstSector()
|
||||
{
|
||||
_isSectorSetUp = true;
|
||||
PlayerRegistry.UpdateSector(PlayerTransformSync.LocalInstance.netId.Value, Locator.GetAstroObject(AstroObject.Name.TimberHearth).transform);
|
||||
PlayerRegistry.LocalPlayer.ReferenceSector = Locator.GetAstroObject(AstroObject.Name.TimberHearth).transform;
|
||||
}
|
||||
|
||||
public void EnterSector(Sector sector)
|
||||
{
|
||||
SectorSync.Instance.SetSector(PlayerTransformSync.LocalInstance.netId.Value, sector.GetName());
|
||||
SectorSync.Instance.SetSector(PlayerRegistry.LocalPlayer.NetId, sector.GetName());
|
||||
}
|
||||
|
||||
private void Update()
|
||||
@ -80,11 +81,11 @@ namespace QSB.TransformSync
|
||||
}
|
||||
|
||||
// Get which sector should be used as a reference point
|
||||
var sectorTransform = PlayerRegistry.GetSector(PlayerTransformSync.LocalInstance.netId.Value);
|
||||
var sectorTransform = PlayerRegistry.LocalPlayer.ReferenceSector;
|
||||
|
||||
if (sectorTransform == null)
|
||||
{
|
||||
DebugLog.ToConsole($"Error - Player ID {PlayerTransformSync.LocalInstance.netId.Value}'s reference sector is null!", OWML.Common.MessageType.Error);
|
||||
DebugLog.ToConsole($"Error - Player ID {PlayerRegistry.LocalPlayer.NetId}'s reference sector is null!", MessageType.Error);
|
||||
}
|
||||
|
||||
if (hasAuthority) // If this script is attached to the client's own body on the client's side.
|
||||
@ -94,7 +95,7 @@ namespace QSB.TransformSync
|
||||
}
|
||||
else // If this script is attached to any other body, eg the representations of other players
|
||||
{
|
||||
if (SyncedTransform.position == Vector3.zero)
|
||||
if (SyncedTransform.position == Vector3.zero)
|
||||
{
|
||||
// Fix bodies staying at 0,0,0 by chucking them into the sun
|
||||
SyncedTransform.position = Locator.GetAstroObject(AstroObject.Name.Sun).transform.position;
|
||||
|
Loading…
x
Reference in New Issue
Block a user