2022-02-25 06:02:33 -08:00
|
|
|
|
using HarmonyLib;
|
|
|
|
|
using QSB.AuthoritySync;
|
2022-02-27 13:07:42 -08:00
|
|
|
|
using QSB.EchoesOfTheEye.RaftSync.Messages;
|
2022-02-25 06:02:33 -08:00
|
|
|
|
using QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
2022-02-27 13:07:42 -08:00
|
|
|
|
using QSB.Messaging;
|
2022-02-25 06:02:33 -08:00
|
|
|
|
using QSB.Patches;
|
|
|
|
|
using QSB.Utility;
|
|
|
|
|
using QSB.WorldSync;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
2022-03-02 19:46:33 -08:00
|
|
|
|
namespace QSB.EchoesOfTheEye.RaftSync.Patches;
|
|
|
|
|
|
|
|
|
|
public class RaftPatches : QSBPatch
|
2022-02-25 06:02:33 -08:00
|
|
|
|
{
|
2022-03-02 19:46:33 -08:00
|
|
|
|
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
|
|
|
|
|
|
|
|
|
[HarmonyPrefix]
|
|
|
|
|
[HarmonyPatch(typeof(RaftController), nameof(RaftController.OnPressInteract))]
|
2022-03-11 06:40:00 -08:00
|
|
|
|
private static bool RaftController_OnPressInteract(RaftController __instance)
|
2022-02-25 06:02:33 -08:00
|
|
|
|
{
|
2022-03-02 19:46:33 -08:00
|
|
|
|
__instance._interactReceiver.SetInteractionEnabled(false);
|
2022-02-25 06:02:33 -08:00
|
|
|
|
|
2022-03-02 19:46:33 -08:00
|
|
|
|
var qsbRaft = __instance.GetWorldObject<QSBRaft>();
|
|
|
|
|
qsbRaft.TransformSync.netIdentity.UpdateAuthQueue(AuthQueueAction.Force);
|
|
|
|
|
Delay.RunWhen(() => qsbRaft.TransformSync.hasAuthority, () =>
|
2022-02-25 06:02:33 -08:00
|
|
|
|
{
|
2022-03-02 19:46:33 -08:00
|
|
|
|
var normalized = Vector3.ProjectOnPlane(Locator.GetPlayerCamera().transform.forward, __instance.transform.up).normalized;
|
|
|
|
|
__instance._raftBody.AddVelocityChange(normalized * 5f);
|
|
|
|
|
__instance._effectsController.PlayRaftPush();
|
|
|
|
|
__instance._pushTime = Time.time;
|
|
|
|
|
});
|
2022-02-27 04:40:44 -08:00
|
|
|
|
|
2022-03-02 19:46:33 -08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2022-02-27 13:07:42 -08:00
|
|
|
|
|
2022-03-11 09:04:22 -08:00
|
|
|
|
[HarmonyPostfix]
|
|
|
|
|
[HarmonyPatch(typeof(RaftDock), nameof(RaftDock.OnEntry))]
|
|
|
|
|
private static void RaftDock_OnEntry(RaftDock __instance)
|
|
|
|
|
{
|
|
|
|
|
if (__instance._state == RaftCarrier.DockState.AligningBelow)
|
|
|
|
|
{
|
|
|
|
|
__instance.GetWorldObject<QSBRaftDock>()
|
2022-03-11 09:20:27 -08:00
|
|
|
|
.SendMessage(new DockRaftMessage(__instance._raft.GetWorldObject<QSBRaft>()));
|
2022-03-11 09:04:22 -08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-11 05:57:48 -08:00
|
|
|
|
[HarmonyPostfix]
|
2022-03-02 19:46:33 -08:00
|
|
|
|
[HarmonyPatch(typeof(RaftDock), nameof(RaftDock.OnPressInteract))]
|
2022-03-11 06:40:00 -08:00
|
|
|
|
private static void RaftDock_OnPressInteract(RaftDock __instance) =>
|
2022-03-11 08:43:38 -08:00
|
|
|
|
__instance.GetWorldObject<QSBRaftDock>().SendMessage(new UndockRaftMessage());
|
2022-03-11 09:04:22 -08:00
|
|
|
|
|
|
|
|
|
[HarmonyPostfix]
|
|
|
|
|
[HarmonyPatch(typeof(DamRaftLift), nameof(DamRaftLift.OnEntry))]
|
|
|
|
|
private static void DamRaftLift_OnEntry(DamRaftLift __instance)
|
|
|
|
|
{
|
|
|
|
|
if (__instance._state == RaftCarrier.DockState.AligningBelow)
|
|
|
|
|
{
|
|
|
|
|
new StartLiftingRaftMessage(__instance._raft.GetWorldObject<QSBRaft>()).Send();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HarmonyPostfix]
|
|
|
|
|
[HarmonyPatch(typeof(DamRaftLift), nameof(DamRaftLift.MoveRaftToNextNode))]
|
|
|
|
|
private static void DamRaftLift_MoveRaftToNextNode(DamRaftLift __instance)
|
|
|
|
|
{
|
|
|
|
|
if (__instance._state == RaftCarrier.DockState.ResettingHook)
|
|
|
|
|
{
|
2022-03-11 09:39:47 -08:00
|
|
|
|
new StopLiftingRaftMessage(false).Send();
|
2022-03-11 09:04:22 -08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HarmonyPrefix]
|
|
|
|
|
[HarmonyPatch(typeof(DamRaftLift), nameof(DamRaftLift.OnDamBroken))]
|
|
|
|
|
private static void DamRaftLift_OnDamBroken(DamRaftLift __instance)
|
|
|
|
|
{
|
|
|
|
|
if (__instance._raft != null)
|
|
|
|
|
{
|
2022-03-11 09:39:47 -08:00
|
|
|
|
new StopLiftingRaftMessage(true).Send();
|
2022-03-11 09:04:22 -08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-03-11 05:57:48 -08:00
|
|
|
|
}
|