using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Unity.IL2CPP;
using Bossa.Cinematika;
using Bossa.Cinematika.Controllers;
using Bossa.Dynamika.Character;
using HarmonyLib;
using UnityEngine;
using WildSkies.Input;
using WildSkies.Player;
using WildSkies.ShipParts;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("kruft.ShipCamPro")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+8bce51d70d9a585e721097c8b75d2c3f8f1588af")]
[assembly: AssemblyProduct("kruft.ShipCamPro")]
[assembly: AssemblyTitle("kruft.ShipCamPro")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace ShipCamPro;
internal class ShipCamProPatch
{
private static bool _isOnTurret;
private static bool _thirdPerson;
private static float _angleX;
private static float _angleY;
[HarmonyPostfix]
[HarmonyPatch(typeof(LocalPlayer), "DropInteraction")]
private static void ResetRemoteAiming(LocalPlayer __instance)
{
_isOnTurret = false;
UserControlShip userControlShip = __instance._userControlShip;
userControlShip._isRemoteAiming = false;
ShipWeapon currentRemoteWeapon = userControlShip._currentRemoteWeapon;
if ((Object)(object)currentRemoteWeapon != (Object)null)
{
currentRemoteWeapon.SetPilot((DynamikaCharacter)null);
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(LocalPlayer), "PilotTurret")]
private static void SetOnTurret(LocalPlayer __instance)
{
_isOnTurret = true;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(LocalPlayer), "TakeControlOfShip")]
private static void SyncThirdPersonState(LocalPlayer __instance, Helm helm)
{
_isOnTurret = false;
__instance._cameraManager.GetController<PilotCinematikaController>().ThirdPerson = _thirdPerson;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(PilotCinematikaController), "ThirdPersonToggle")]
private static void ThirdPersonToggle(PilotCinematikaController __instance)
{
_thirdPerson = __instance.ThirdPerson;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(PilotCinematikaController), "UpdateInput")]
private static void StoreTargetAngles(PilotCinematikaController __instance, CameraInputState iState)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
if (_thirdPerson && !_isOnTurret && !iState.LookEnable)
{
_angleX = __instance._targetAngles.x;
_angleY = __instance._targetAngles.y;
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(PilotCinematikaController), "UpdateInput")]
private static void RestoreTargetAngles(PilotCinematikaController __instance, CameraInputState iState)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
if (_thirdPerson && !_isOnTurret && !iState.LookEnable)
{
__instance._targetAngles = new Vector2(_angleX, _angleY);
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(PilotCinematikaController), "UpdateTransform")]
private static void FixCamRotation(PilotCinematikaController __instance, Transform t)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
if (_thirdPerson && !_isOnTurret)
{
t.rotation = Quaternion.LookRotation(((CinematikaController)__instance)._manager.Target.position - t.position, Vector3.up);
}
}
}
[BepInPlugin("org.kruft.plugins.ShipCamPro", "Ship Cam Pro", "0.2.0")]
public class ShipCamProPlugin : BasePlugin
{
public override void Load()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
new Harmony("kruft.ShipCamPro").PatchAll(typeof(ShipCamProPatch));
}
}