2021-02-28 14:43:05 +00:00
|
|
|
|
using QSB.Player;
|
2021-12-05 14:06:15 +00:00
|
|
|
|
using QSB.Player.TransformSync;
|
|
|
|
|
using QSB.Utility;
|
2021-02-28 14:43:05 +00:00
|
|
|
|
using System.Collections;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
2022-03-03 03:46:33 +00:00
|
|
|
|
namespace QSB.StatueSync;
|
|
|
|
|
|
2023-07-28 18:30:57 +00:00
|
|
|
|
public class StatueManager : MonoBehaviour, IAddComponentOnStart
|
2021-02-28 14:43:05 +00:00
|
|
|
|
{
|
2022-03-03 03:46:33 +00:00
|
|
|
|
public static StatueManager Instance { get; private set; }
|
|
|
|
|
public bool HasStartedStatueLocally;
|
|
|
|
|
|
|
|
|
|
private void Awake()
|
2021-02-28 14:43:05 +00:00
|
|
|
|
{
|
2022-03-03 03:46:33 +00:00
|
|
|
|
Instance = this;
|
|
|
|
|
QSBSceneManager.OnUniverseSceneLoaded += OnUniverseSceneLoaded;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnDestroy()
|
|
|
|
|
=> QSBSceneManager.OnUniverseSceneLoaded -= OnUniverseSceneLoaded;
|
2021-02-28 14:43:05 +00:00
|
|
|
|
|
2022-03-03 03:46:33 +00:00
|
|
|
|
private void OnUniverseSceneLoaded(OWScene oldScene, OWScene newScene)
|
|
|
|
|
{
|
|
|
|
|
if (!QSBCore.IsInMultiplayer)
|
2021-03-07 09:27:23 +00:00
|
|
|
|
{
|
2022-03-03 03:46:33 +00:00
|
|
|
|
return;
|
2021-03-07 09:27:23 +00:00
|
|
|
|
}
|
2021-02-28 15:38:17 +00:00
|
|
|
|
|
2022-03-03 03:46:33 +00:00
|
|
|
|
if (PlayerTransformSync.LocalInstance == null)
|
2021-11-21 13:52:29 +00:00
|
|
|
|
{
|
2022-03-03 03:46:33 +00:00
|
|
|
|
DebugLog.ToConsole($"Error - Tried to run OnUniverseSceneLoaded when PlayerTransformSync.LocalInstance was null!", OWML.Common.MessageType.Error);
|
|
|
|
|
return;
|
2022-02-27 12:40:44 +00:00
|
|
|
|
}
|
2022-02-25 06:04:54 +00:00
|
|
|
|
|
2022-03-03 03:46:33 +00:00
|
|
|
|
QSBPlayerManager.ShowAllPlayers();
|
|
|
|
|
QSBPlayerManager.LocalPlayer.UpdateStatesFromObjects();
|
|
|
|
|
}
|
2022-02-27 12:40:44 +00:00
|
|
|
|
|
2022-03-03 03:46:33 +00:00
|
|
|
|
public void BeginSequence(Vector3 position, Quaternion rotation, float cameraDegrees) => StartCoroutine(BeginRemoteUplinkSequence(position, rotation, cameraDegrees));
|
|
|
|
|
|
|
|
|
|
private IEnumerator BeginRemoteUplinkSequence(Vector3 position, Quaternion rotation, float cameraDegrees)
|
|
|
|
|
{
|
|
|
|
|
HasStartedStatueLocally = true;
|
|
|
|
|
var cameraEffectController = Locator.GetPlayerCamera().GetComponent<PlayerCameraEffectController>();
|
|
|
|
|
cameraEffectController.CloseEyes(0.5f);
|
|
|
|
|
OWInput.ChangeInputMode(InputMode.None);
|
|
|
|
|
Locator.GetPauseCommandListener().AddPauseCommandLock();
|
|
|
|
|
Locator.GetToolModeSwapper().UnequipTool();
|
|
|
|
|
Locator.GetFlashlight().TurnOff(false);
|
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
|
|
|
// go to position
|
|
|
|
|
QSBPlayerManager.HideAllPlayers();
|
|
|
|
|
var timberHearth = Locator.GetAstroObject(AstroObject.Name.TimberHearth).GetAttachedOWRigidbody();
|
|
|
|
|
Locator.GetPlayerBody().transform.position = timberHearth.transform.TransformPoint(position);
|
|
|
|
|
Locator.GetPlayerBody().transform.rotation = timberHearth.transform.rotation * rotation;
|
|
|
|
|
Locator.GetPlayerCamera().GetComponent<PlayerCameraController>().SetDegreesY(cameraDegrees);
|
|
|
|
|
cameraEffectController.OpenEyes(1f, true);
|
|
|
|
|
var uplinkTrigger = FindObjectOfType<MemoryUplinkTrigger>();
|
|
|
|
|
uplinkTrigger.StartCoroutine("BeginUplinkSequence");
|
|
|
|
|
yield break;
|
2021-02-28 14:43:05 +00:00
|
|
|
|
}
|
2022-02-25 06:04:54 +00:00
|
|
|
|
}
|