67 lines
1.9 KiB
C#
Raw Normal View History

2021-04-12 10:37:20 +01:00
using OWML.Utils;
2021-12-01 21:34:02 -08:00
using QSB.AuthoritySync;
2021-04-12 10:37:20 +01:00
using QSB.Events;
using QSB.Messaging;
using QSB.Player;
2021-04-16 11:40:13 +01:00
using QSB.ShipSync.TransformSync;
2021-04-12 10:37:20 +01:00
using UnityEngine;
namespace QSB.ShipSync.Events
{
2021-05-15 21:31:29 +01:00
internal class FlyShipEvent : QSBEvent<BoolMessage>
2021-04-12 10:37:20 +01:00
{
public override bool RequireWorldObjectsReady() => true;
2021-04-12 10:37:20 +01:00
public override void SetupListener()
{
GlobalMessenger<OWRigidbody>.AddListener(EventNames.EnterFlightConsole, (OWRigidbody rigidbody) => Handler(true));
GlobalMessenger.AddListener(EventNames.ExitFlightConsole, () => Handler(false));
}
public override void CloseListener()
{
GlobalMessenger<OWRigidbody>.RemoveListener(EventNames.EnterFlightConsole, (OWRigidbody rigidbody) => Handler(true));
GlobalMessenger.RemoveListener(EventNames.ExitFlightConsole, () => Handler(false));
}
private void Handler(bool flying) => SendEvent(CreateMessage(flying));
2021-11-20 19:49:50 +00:00
private BoolMessage CreateMessage(bool flying) => new()
2021-04-12 10:37:20 +01:00
{
AboutId = LocalPlayerId,
Value = flying
};
2021-05-15 21:31:29 +01:00
public override void OnReceiveLocal(bool server, BoolMessage message) => SetCurrentFlyer(message.Value, message.AboutId);
2021-04-12 10:37:20 +01:00
public override void OnReceiveRemote(bool server, BoolMessage message)
{
SetCurrentFlyer(message.Value, message.AboutId);
var shipCockpitController = GameObject.Find("ShipCockpitController").GetComponent<ShipCockpitController>();
2021-04-12 11:31:21 +01:00
var interactVolume = shipCockpitController.GetValue<SingleInteractionVolume>("_interactVolume");
2021-04-12 10:37:20 +01:00
if (message.Value)
{
interactVolume.DisableInteraction();
}
else
{
interactVolume.EnableInteraction();
}
}
private void SetCurrentFlyer(bool isFlying, uint id)
{
2021-06-19 11:26:05 +01:00
ShipManager.Instance.CurrentFlyer = isFlying
? id
2021-04-12 10:37:20 +01:00
: uint.MaxValue;
2021-04-16 11:40:13 +01:00
2021-08-08 19:53:55 +01:00
if (QSBCore.IsHost)
2021-04-16 11:40:13 +01:00
{
2021-12-01 21:34:02 -08:00
ShipTransformSync.LocalInstance.NetIdentity.SetAuthority(isFlying
? id
: QSBPlayerManager.LocalPlayerId);
2021-04-16 11:40:13 +01:00
}
2021-04-12 10:37:20 +01:00
}
}
}