mirror of
https://github.com/soarqin/DSP_Mods_TO.git
synced 2025-12-14 18:43:29 +08:00
Added CruiseAssist and AutoPilot
This commit is contained in:
51
CruiseAssist/Patches/Patch_PlayerMoveSail.cs
Normal file
51
CruiseAssist/Patches/Patch_PlayerMoveSail.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
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)));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user