sync player camera fov

fixes #578
This commit is contained in:
_nebula 2023-01-21 11:09:24 +00:00
parent 33a4bb042a
commit 5260896313
2 changed files with 28 additions and 0 deletions

View File

@ -17,6 +17,7 @@ public class PlayerInformationMessage : QSBMessage
private bool TranslatorEquipped; private bool TranslatorEquipped;
private bool ProbeActive; private bool ProbeActive;
private ClientState ClientState; private ClientState ClientState;
private float FieldOfView;
public PlayerInformationMessage() public PlayerInformationMessage()
{ {
@ -30,6 +31,7 @@ public class PlayerInformationMessage : QSBMessage
TranslatorEquipped = player.TranslatorEquipped; TranslatorEquipped = player.TranslatorEquipped;
ProbeActive = player.ProbeActive; ProbeActive = player.ProbeActive;
ClientState = player.State; ClientState = player.State;
FieldOfView = PlayerData.GetGraphicSettings().fieldOfView;
} }
public override void Serialize(NetworkWriter writer) public override void Serialize(NetworkWriter writer)
@ -44,6 +46,7 @@ public class PlayerInformationMessage : QSBMessage
writer.Write(TranslatorEquipped); writer.Write(TranslatorEquipped);
writer.Write(ProbeActive); writer.Write(ProbeActive);
writer.Write(ClientState); writer.Write(ClientState);
writer.Write(FieldOfView);
} }
public override void Deserialize(NetworkReader reader) public override void Deserialize(NetworkReader reader)
@ -58,6 +61,7 @@ public class PlayerInformationMessage : QSBMessage
TranslatorEquipped = reader.Read<bool>(); TranslatorEquipped = reader.Read<bool>();
ProbeActive = reader.Read<bool>(); ProbeActive = reader.Read<bool>();
ClientState = reader.Read<ClientState>(); ClientState = reader.Read<ClientState>();
FieldOfView = reader.ReadFloat();
} }
public override void OnReceiveRemote() public override void OnReceiveRemote()
@ -79,6 +83,10 @@ public class PlayerInformationMessage : QSBMessage
player.UpdateObjectsFromStates(); player.UpdateObjectsFromStates();
} }
Delay.RunWhen(
() => player.Camera != null,
() => player.Camera.fieldOfView = FieldOfView);
player.State = ClientState; player.State = ClientState;
} }
else else

View File

@ -0,0 +1,20 @@
using QSB.Messaging;
using QSB.Utility;
namespace QSB.Player.Messages;
internal class UpdateFOVMessage : QSBMessage<float>
{
static UpdateFOVMessage()
=> GlobalMessenger<GraphicSettings>.AddListener(
"GraphicSettingsUpdated",
(GraphicSettings settings) => new UpdateFOVMessage(settings.fieldOfView).Send());
private UpdateFOVMessage(float fov) : base(fov) { }
public override void OnReceiveRemote()
{
var player = QSBPlayerManager.GetPlayer(From);
player.Camera.fieldOfView = Data;
}
}