mirror of
https://github.com/soarqin/DSP_Mods_TO.git
synced 2025-12-12 01:23:31 +08:00
51 lines
1.8 KiB
C#
51 lines
1.8 KiB
C#
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)));
|
|
}
|
|
}
|
|
} |