quantum-space-buddies/QSB/ShipSync/ShipCustomAttach.cs

101 lines
2.7 KiB
C#
Raw Normal View History

using QSB.Localization;
using UnityEngine;
2022-02-01 00:33:11 +00:00
2022-03-03 03:46:33 +00:00
namespace QSB.ShipSync;
public class ShipCustomAttach : MonoBehaviour
2022-02-01 00:33:11 +00:00
{
private readonly ScreenPrompt _attachPrompt = new(
InputLibrary.interactSecondary,
InputLibrary.interact,
QSBLocalization.Current.AttachToShip + " <CMD>",
ScreenPrompt.MultiCommandType.HOLD_ONE_AND_PRESS_2ND
);
private readonly ScreenPrompt _detachPrompt = new(
InputLibrary.cancel,
QSBLocalization.Current.DetachFromShip + " <CMD>"
);
2022-03-03 03:46:33 +00:00
private PlayerAttachPoint _playerAttachPoint;
/// <summary>
/// uses a static field instead of a persistent condition cuz those are synced
/// </summary>
private static bool _tutorialPrompt = true;
2022-03-03 03:46:33 +00:00
private void Awake()
2022-02-01 00:33:11 +00:00
{
Locator.GetPromptManager().AddScreenPrompt(_attachPrompt, _tutorialPrompt ? PromptPosition.Center : PromptPosition.UpperRight);
Locator.GetPromptManager().AddScreenPrompt(_detachPrompt, PromptPosition.UpperRight);
2022-02-01 00:33:11 +00:00
2022-03-03 03:46:33 +00:00
_playerAttachPoint = gameObject.AddComponent<PlayerAttachPoint>();
_playerAttachPoint._lockPlayerTurning = false;
_playerAttachPoint._matchRotation = false;
_playerAttachPoint._centerCamera = false;
}
private void OnDestroy()
{
if (Locator.GetPromptManager())
2022-02-01 00:33:11 +00:00
{
Locator.GetPromptManager().RemoveScreenPrompt(_attachPrompt);
Locator.GetPromptManager().RemoveScreenPrompt(_detachPrompt);
2022-03-03 03:46:33 +00:00
}
}
2022-02-01 00:33:11 +00:00
2022-03-03 03:46:33 +00:00
private void Update()
{
_attachPrompt.SetVisibility(false);
_detachPrompt.SetVisibility(false);
// dont show prompt if paused or something
if (!OWInput.IsInputMode(InputMode.Character))
{
return;
}
2022-02-01 00:33:11 +00:00
2022-03-03 03:46:33 +00:00
var attachedToUs = _playerAttachPoint.enabled;
_detachPrompt.SetVisibility(attachedToUs);
if (attachedToUs && OWInput.IsNewlyPressed(InputLibrary.cancel, InputMode.Character))
2022-02-01 01:26:35 +00:00
{
2022-03-03 03:46:33 +00:00
_playerAttachPoint.DetachPlayer();
ShipManager.Instance.CockpitController._shipAudioController.PlayUnbuckle();
2022-02-01 01:26:35 +00:00
}
2022-02-01 00:33:11 +00:00
if (!PlayerState.IsInsideShip())
{
return;
}
2022-03-03 03:46:33 +00:00
if (!attachedToUs)
2022-02-01 00:33:11 +00:00
{
2022-03-03 03:46:33 +00:00
if (PlayerState.IsAttached())
2022-02-01 00:33:11 +00:00
{
return;
2022-02-01 00:33:11 +00:00
}
2022-03-03 03:46:33 +00:00
if (Locator.GetPlayerController() && !Locator.GetPlayerController().IsGrounded())
2022-02-08 04:48:17 +00:00
{
2022-03-03 03:46:33 +00:00
return;
2022-02-01 00:33:11 +00:00
}
2022-03-03 03:46:33 +00:00
}
2022-02-01 00:33:11 +00:00
2022-03-03 03:46:33 +00:00
_attachPrompt.SetVisibility(!attachedToUs);
if (!attachedToUs &&
OWInput.IsPressed(InputLibrary.interactSecondary, InputMode.Character) &&
OWInput.IsNewlyPressed(InputLibrary.interact, InputMode.Character))
2022-03-03 03:46:33 +00:00
{
transform.position = Locator.GetPlayerTransform().position;
_playerAttachPoint.AttachPlayer();
ShipManager.Instance.CockpitController._shipAudioController.PlayBuckle();
if (_tutorialPrompt)
{
_tutorialPrompt = false;
Locator.GetPromptManager().RemoveScreenPrompt(_attachPrompt);
Locator.GetPromptManager().AddScreenPrompt(_attachPrompt, PromptPosition.UpperRight);
}
2022-02-01 00:33:11 +00:00
}
}
}