using OWML.Utils; using QSB.Events; using QSB.Patches; using System.Linq; using UnityEngine; namespace QSB.ShipSync.Patches { class ShipPatches : QSBPatch { public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; public override void DoPatches() { QSBCore.HarmonyHelper.AddPrefix("OnPressInteract", typeof(ShipPatches), nameof(HatchController_OnPressInteract)); QSBCore.HarmonyHelper.AddPrefix("OnEntry", typeof(ShipPatches), nameof(HatchController_OnEntry)); QSBCore.HarmonyHelper.AddPrefix("OnTriggerExit", typeof(ShipPatches), nameof(ShipTractorBeamSwitch_OnTriggerExit)); } public override void DoUnpatches() { QSBCore.HarmonyHelper.Unpatch("OnPressInteract"); QSBCore.HarmonyHelper.Unpatch("OnEntry"); QSBCore.HarmonyHelper.Unpatch("OnTriggerExit"); } public static bool HatchController_OnPressInteract() { if (!PlayerState.IsInsideShip()) { Resources.FindObjectsOfTypeAll().First().ActivateTractorBeam(); } QSBEventManager.FireEvent(EventNames.QSBHatchState, true); return true; } public static bool HatchController_OnEntry(GameObject hitObj) { if (hitObj.CompareTag("PlayerDetector")) { QSBEventManager.FireEvent(EventNames.QSBHatchState, false); } return true; } public static bool ShipTractorBeamSwitch_OnTriggerExit(Collider hitCollider, bool ____isPlayerInShip, bool ____functional) { var shipTransform = Locator.GetShipTransform(); var hatchController = shipTransform.GetComponentInChildren(); if (!____isPlayerInShip && ____functional && hitCollider.CompareTag("PlayerDetector") && !hatchController.GetValue("_hatchObject").activeSelf) { hatchController.Invoke("CloseHatch"); QSBEventManager.FireEvent(EventNames.QSBHatchState, false); } return false; } } }