diff --git a/QSB/ElevatorSync/WorldObjects/QSBElevator.cs b/QSB/ElevatorSync/WorldObjects/QSBElevator.cs index 9358ae02..f322af7a 100644 --- a/QSB/ElevatorSync/WorldObjects/QSBElevator.cs +++ b/QSB/ElevatorSync/WorldObjects/QSBElevator.cs @@ -1,5 +1,4 @@ -using OWML.Utils; -using QSB.WorldSync; +using QSB.WorldSync; using UnityEngine; namespace QSB.ElevatorSync.WorldObjects @@ -12,42 +11,65 @@ namespace QSB.ElevatorSync.WorldObjects private SingleInteractionVolume _interactVolume; private OWAudioSource _owAudioSourceOneShot; private OWAudioSource _owAudioSourceLP; + private OWTriggerVolume _elevatorTrigger; public override void Init(Elevator elevator, int id) { AttachedObject = elevator; ObjectId = id; - QSBCore.UnityEvents.RunWhen(() => AttachedObject.GetValue("_interactVolume") != null, InitValues); + QSBCore.UnityEvents.RunWhen(() => AttachedObject._interactVolume != null, InitValues); } private void InitValues() { - _startLocalPos = AttachedObject.GetValue("_startLocalPos"); - _endLocalPos = AttachedObject.GetValue("_endLocalPos"); - _interactVolume = AttachedObject.GetValue("_interactVolume"); - _owAudioSourceOneShot = AttachedObject.GetValue("_owAudioSourceOneShot"); - _owAudioSourceLP = AttachedObject.GetValue("_owAudioSourceLP"); + _startLocalPos = AttachedObject._startLocalPos; + _endLocalPos = AttachedObject._endLocalPos; + _interactVolume = AttachedObject._interactVolume; + _owAudioSourceOneShot = AttachedObject._owAudioSourceOneShot; + _owAudioSourceLP = AttachedObject._owAudioSourceLP; + + var boxShape = AttachedObject.gameObject.AddComponent(); + boxShape.center = new Vector3(0, 1.75f, 0.25f); + boxShape.size = new Vector3(3, 3.5f, 3); + + _elevatorTrigger = AttachedObject.gameObject.GetAddComponent(); } public void RemoteCall(bool isGoingUp) { - SetDirection(isGoingUp); - RemoteStartLift(); + if (_elevatorTrigger.IsTrackingObject(Locator.GetPlayerDetector())) + { + SetDirection(isGoingUp); + + AttachedObject._attachPoint.AttachPlayer(); + + if (Locator.GetPlayerSuit().IsWearingSuit(true) && Locator.GetPlayerSuit().IsTrainingSuit()) + { + Locator.GetPlayerSuit().RemoveSuit(false); + } + + RemoteStartLift(); + } + else + { + SetDirection(isGoingUp); + RemoteStartLift(); + } } private void SetDirection(bool isGoingUp) { - var targetPos = isGoingUp ? _endLocalPos : _startLocalPos; - AttachedObject.SetValue("_goingToTheEnd", isGoingUp); - AttachedObject.SetValue("_targetLocalPos", targetPos); _interactVolume.transform.Rotate(0f, 180f, 0f); + var targetPos = isGoingUp ? _endLocalPos : _startLocalPos; + AttachedObject._targetLocalPos = targetPos; + AttachedObject._goingToTheEnd = isGoingUp; } private void RemoteStartLift() { AttachedObject.enabled = true; - AttachedObject.SetValue("_initLocalPos", AttachedObject.transform.localPosition); - AttachedObject.SetValue("_initLiftTime", Time.time); + AttachedObject._initLocalPos = AttachedObject.transform.localPosition; + AttachedObject._initLiftTime = Time.time; _owAudioSourceOneShot.PlayOneShot(AudioType.TH_LiftActivate); _owAudioSourceLP.FadeIn(0.5f); _interactVolume.DisableInteraction();