state change event happens more often

This commit is contained in:
JohnCorby 2021-11-30 18:49:00 -08:00
parent cd48c916fc
commit 9571b27ae0
3 changed files with 37 additions and 22 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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}");
}
}
}