mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-12 13:13:32 +00:00
state change event happens more often
This commit is contained in:
parent
cd48c916fc
commit
9571b27ae0
@ -2,6 +2,7 @@
|
||||
using QSB.Anglerfish.WorldObjects;
|
||||
using QSB.Events;
|
||||
using QSB.Patches;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using UnityEngine;
|
||||
|
||||
@ -26,6 +27,31 @@ namespace QSB.Anglerfish.Patches
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(AnglerfishController), nameof(AnglerfishController.OnSectorOccupantsUpdated))]
|
||||
public static bool OnSectorOccupantsUpdated(AnglerfishController __instance)
|
||||
{
|
||||
var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance);
|
||||
|
||||
if (!__instance.gameObject.activeSelf && __instance._sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe | DynamicOccupant.Ship))
|
||||
{
|
||||
__instance.gameObject.SetActive(true);
|
||||
__instance._anglerBody.Unsuspend();
|
||||
__instance.RaiseEvent(nameof(__instance.OnAnglerUnsuspended), __instance._currentState);
|
||||
QSBEventManager.FireEvent(EventNames.QSBSuspensionChange, qsbAngler.TransformSync.NetIdentity, false);
|
||||
return false;
|
||||
}
|
||||
if (__instance.gameObject.activeSelf && !__instance._sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe | DynamicOccupant.Ship))
|
||||
{
|
||||
__instance._anglerBody.Suspend();
|
||||
__instance.gameObject.SetActive(false);
|
||||
__instance.RaiseEvent(nameof(__instance.OnAnglerSuspended), __instance._currentState);
|
||||
QSBEventManager.FireEvent(EventNames.QSBSuspensionChange, qsbAngler.TransformSync.NetIdentity, true);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(AnglerfishController), nameof(AnglerfishController.OnSectorOccupantRemoved))]
|
||||
public static bool OnSectorOccupantRemoved(AnglerfishController __instance,
|
||||
@ -36,6 +62,7 @@ namespace QSB.Anglerfish.Patches
|
||||
if (qsbAngler.TargetTransform != null && sectorDetector.GetAttachedOWRigidbody().transform == qsbAngler.TargetTransform)
|
||||
{
|
||||
qsbAngler.TargetTransform = null;
|
||||
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -86,7 +113,6 @@ namespace QSB.Anglerfish.Patches
|
||||
{
|
||||
Locator.GetDeathManager().KillPlayer(DeathType.Digestion);
|
||||
__instance._consumeComplete = true;
|
||||
qsbAngler.TransformSync = null;
|
||||
return false;
|
||||
}
|
||||
if (qsbAngler.TargetTransform.CompareTag("Ship"))
|
||||
@ -102,11 +128,15 @@ namespace QSB.Anglerfish.Patches
|
||||
Locator.GetDeathManager().KillPlayer(DeathType.Digestion);
|
||||
}
|
||||
__instance._consumeComplete = true;
|
||||
qsbAngler.TransformSync = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qsbAngler.TargetTransform = null;
|
||||
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
|
||||
}
|
||||
break;
|
||||
case AnglerfishController.AnglerState.Stunned:
|
||||
__instance._stunTimer -= Time.deltaTime;
|
||||
@ -247,9 +277,9 @@ namespace QSB.Anglerfish.Patches
|
||||
if (__instance._currentState != AnglerfishController.AnglerState.Chasing)
|
||||
{
|
||||
__instance.ChangeState(AnglerfishController.AnglerState.Chasing);
|
||||
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
|
||||
return false;
|
||||
}
|
||||
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (__instance._currentState is AnglerfishController.AnglerState.Lurking or AnglerfishController.AnglerState.Investigating)
|
||||
@ -258,8 +288,8 @@ namespace QSB.Anglerfish.Patches
|
||||
if (__instance._currentState != AnglerfishController.AnglerState.Investigating)
|
||||
{
|
||||
__instance.ChangeState(AnglerfishController.AnglerState.Investigating);
|
||||
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
|
||||
}
|
||||
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -1,5 +1,4 @@
|
||||
using QSB.Anglerfish.TransformSync;
|
||||
using QSB.Events;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using QuantumUNET;
|
||||
@ -20,12 +19,6 @@ namespace QSB.Anglerfish.WorldObjects
|
||||
ObjectId = id;
|
||||
AttachedObject = attachedObject;
|
||||
|
||||
QSBCore.UnityEvents.RunWhen(() => TransformSync, () =>
|
||||
{
|
||||
AttachedObject.OnAnglerSuspended += OnSuspend;
|
||||
AttachedObject.OnAnglerUnsuspended += OnUnsuspend;
|
||||
});
|
||||
|
||||
if (QSBCore.IsHost)
|
||||
{
|
||||
Object.Instantiate(QSBNetworkManager.Instance.AnglerPrefab).SpawnWithServerAuthority();
|
||||
@ -34,21 +27,12 @@ namespace QSB.Anglerfish.WorldObjects
|
||||
|
||||
public override void OnRemoval()
|
||||
{
|
||||
AttachedObject.OnAnglerSuspended -= OnSuspend;
|
||||
AttachedObject.OnAnglerUnsuspended -= OnUnsuspend;
|
||||
|
||||
if (QSBCore.IsHost)
|
||||
{
|
||||
QNetworkServer.Destroy(TransformSync.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSuspend(AnglerfishController.AnglerState _) =>
|
||||
QSBEventManager.FireEvent(EventNames.QSBSuspensionChange, TransformSync.NetIdentity, true);
|
||||
|
||||
private void OnUnsuspend(AnglerfishController.AnglerState _) =>
|
||||
QSBEventManager.FireEvent(EventNames.QSBSuspensionChange, TransformSync.NetIdentity, false);
|
||||
|
||||
public void UpdateTargetVelocity()
|
||||
{
|
||||
if (TargetTransform == null)
|
||||
|
@ -1,6 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using QSB.Events;
|
||||
using QSB.Player;
|
||||
using QSB.Utility;
|
||||
using QuantumUNET;
|
||||
using QuantumUNET.Components;
|
||||
@ -91,7 +92,7 @@ namespace QSB.SuspensionAuthoritySync
|
||||
identity.AssignClientAuthority(newConn);
|
||||
}
|
||||
|
||||
DebugLog.DebugWrite($"{identity.NetId}:{identity.gameObject.name} - set authority to {id}");
|
||||
DebugLog.DebugWrite($"{QSBPlayerManager.LocalPlayerId}.{identity.NetId}:{identity.gameObject.name} - set authority to {id}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user