using HarmonyLib; using UnityEngine; namespace CruiseAssist.Patches; [HarmonyPatch(typeof(PlayerMove_Sail))] internal class Patch_PlayerMoveSail { [HarmonyPatch("GameTick")] [HarmonyPrefix] public static void GameTick_Prefix(PlayerMove_Sail __instance) { if (!CruiseAssistPlugin.Enable) return; if (!CruiseAssistPlugin.TargetSelected) return; var player = __instance.player; if (!player.sailing) return; var controller = player.controller; if (controller.input0 != Vector4.zero || controller.input1 != Vector4.zero) { CruiseAssistPlugin.Interrupt = true; CruiseAssistPlugin.Extensions.ForEach(delegate(ICruiseAssistExtensionAPI extension) { extension.CancelOperate(); }); } else { if (CruiseAssistPlugin.TargetPlanet != null) { CruiseAssistPlugin.TargetUPos = CruiseAssistPlugin.TargetPlanet.uPosition; } else { if (CruiseAssistPlugin.TargetStar == null) { return; } CruiseAssistPlugin.TargetUPos = CruiseAssistPlugin.TargetStar.uPosition; } var operate = false; CruiseAssistPlugin.Extensions.ForEach(delegate(ICruiseAssistExtensionAPI extension) { operate |= extension.OperateSail(__instance); }); if (operate) return; var vec = CruiseAssistPlugin.TargetUPos - player.uPosition; var magnitude = controller.actionSail.visual_uvel.magnitude; player.uVelocity = Vector3.Slerp(player.uVelocity, vec.normalized * magnitude, 1.6f / Mathf.Max(10f, Vector3.Angle(vec, player.uVelocity))); } } }