mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-02 19:13:34 +00:00
form collapse event
This commit is contained in:
parent
eb44b9e385
commit
85ef887698
@ -102,5 +102,6 @@
|
||||
public const string QSBSatelliteRepaired = nameof(QSBSatelliteRepairTick);
|
||||
public const string QSBAuthorityQueue = nameof(QSBAuthorityQueue);
|
||||
public const string QSBJellyfishRising = nameof(QSBJellyfishRising);
|
||||
public const string QSBTornadoFormCollapse = nameof(QSBTornadoFormCollapse);
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ using QSB.Tools.SignalscopeTool.Events;
|
||||
using QSB.Tools.SignalscopeTool.FrequencySync.Events;
|
||||
using QSB.Tools.TranslatorTool.Events;
|
||||
using QSB.Tools.TranslatorTool.TranslationSync.Events;
|
||||
using QSB.TornadoSync.Events;
|
||||
using QSB.Utility;
|
||||
using QSB.Utility.Events;
|
||||
using QSB.ZeroGCaveSync.Events;
|
||||
@ -106,6 +107,7 @@ namespace QSB.Events
|
||||
new FragmentDamageEvent(),
|
||||
new FragmentResyncEvent(),
|
||||
new JellyfishRisingEvent(),
|
||||
new TornadoFormCollapseEvent(),
|
||||
// Conversation/dialogue/exploration
|
||||
new ConversationEvent(),
|
||||
new ConversationStartEndEvent(),
|
||||
|
32
QSB/TornadoSync/Events/TornadoFormCollapseEvent.cs
Normal file
32
QSB/TornadoSync/Events/TornadoFormCollapseEvent.cs
Normal file
@ -0,0 +1,32 @@
|
||||
using QSB.Events;
|
||||
using QSB.TornadoSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using QSB.WorldSync.Events;
|
||||
|
||||
namespace QSB.TornadoSync.Events
|
||||
{
|
||||
public class TornadoFormCollapseEvent : QSBEvent<BoolWorldObjectMessage>
|
||||
{
|
||||
public override bool RequireWorldObjectsReady => true;
|
||||
|
||||
public override void SetupListener()
|
||||
=> GlobalMessenger<QSBTornado, bool>.AddListener(EventNames.QSBJellyfishRising, Handler);
|
||||
|
||||
public override void CloseListener()
|
||||
=> GlobalMessenger<QSBTornado, bool>.RemoveListener(EventNames.QSBJellyfishRising, Handler);
|
||||
|
||||
private void Handler(QSBTornado qsbTornado, bool formCollapse) => SendEvent(CreateMessage(qsbTornado, formCollapse));
|
||||
|
||||
private BoolWorldObjectMessage CreateMessage(QSBTornado qsbTornado, bool formCollapse) => new()
|
||||
{
|
||||
ObjectId = qsbTornado.ObjectId,
|
||||
State = formCollapse
|
||||
};
|
||||
|
||||
public override void OnReceiveRemote(bool isHost, BoolWorldObjectMessage message)
|
||||
{
|
||||
var qsbTornado = QSBWorldSync.GetWorldFromId<QSBTornado>(message.ObjectId);
|
||||
qsbTornado.FormCollapse(message.State);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,11 @@
|
||||
using QSB.Patches;
|
||||
using HarmonyLib;
|
||||
using QSB.AuthoritySync;
|
||||
using QSB.Events;
|
||||
using QSB.JellyfishSync.WorldObjects;
|
||||
using QSB.Patches;
|
||||
using QSB.TornadoSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.TornadoSync.Patches
|
||||
{
|
||||
@ -6,6 +13,61 @@ namespace QSB.TornadoSync.Patches
|
||||
{
|
||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(TornadoController), nameof(TornadoController.FixedUpdate))]
|
||||
public static bool FixedUpdate(TornadoController __instance)
|
||||
{
|
||||
if (QSBCore.IsHost && __instance._secondsUntilFormation > 0f)
|
||||
{
|
||||
__instance._secondsUntilFormation -= Time.fixedDeltaTime;
|
||||
if (__instance._secondsUntilFormation < 0f)
|
||||
{
|
||||
__instance.StartFormation();
|
||||
var qsbTornado = QSBWorldSync.GetWorldFromUnity<QSBTornado>(__instance);
|
||||
QSBEventManager.FireEvent(EventNames.QSBTornadoFormCollapse, qsbTornado, true);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (__instance._tornadoCollapsing)
|
||||
{
|
||||
__instance.UpdateCollapse();
|
||||
}
|
||||
else if (__instance._tornadoForming)
|
||||
{
|
||||
__instance.UpdateFormation();
|
||||
}
|
||||
if (__instance._isSectorOccupied)
|
||||
{
|
||||
__instance.UpdateAnimation();
|
||||
if (__instance._wander)
|
||||
{
|
||||
var num = Mathf.PerlinNoise(Time.time * __instance._wanderRate, 0f) * 2f - 1f;
|
||||
var num2 = Mathf.PerlinNoise(Time.time * __instance._wanderRate, 5f) * 2f - 1f;
|
||||
var localEulerAngles = new Vector3(num * __instance._wanderDegreesX, 0f, num2 * __instance._wanderDegreesZ);
|
||||
__instance.transform.localEulerAngles = localEulerAngles;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(TornadoController), nameof(TornadoController.OnEnterCollapseTrigger))]
|
||||
public static bool OnEnterCollapseTrigger(TornadoController __instance,
|
||||
GameObject hitObject)
|
||||
{
|
||||
if (QSBCore.IsHost && hitObject.GetComponentInParent<OWRigidbody>().GetMass() > 50f)
|
||||
{
|
||||
__instance.StartCollapse();
|
||||
var qsbTornado = QSBWorldSync.GetWorldFromUnity<QSBTornado>(__instance);
|
||||
QSBEventManager.FireEvent(EventNames.QSBTornadoFormCollapse, qsbTornado, false);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ namespace QSB.TornadoSync
|
||||
{
|
||||
QSBWorldSync.Init<QSBTornado, TornadoController>();
|
||||
|
||||
return;
|
||||
if (!QSBCore.IsHost)
|
||||
{
|
||||
return;
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.WorldSync;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
|
||||
namespace QSB.TornadoSync.WorldObjects
|
||||
{
|
||||
@ -9,5 +10,19 @@ namespace QSB.TornadoSync.WorldObjects
|
||||
ObjectId = id;
|
||||
AttachedObject = attachedObject;
|
||||
}
|
||||
|
||||
public void FormCollapse(bool formCollapse)
|
||||
{
|
||||
if (formCollapse)
|
||||
{
|
||||
AttachedObject.StartFormation();
|
||||
DebugLog.DebugWrite($"{LogName} form");
|
||||
}
|
||||
else
|
||||
{
|
||||
AttachedObject.StartCollapse();
|
||||
DebugLog.DebugWrite($"{LogName} collapse");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user