mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-04 03:39:55 +00:00
include flag and pool index when launching meteor
This commit is contained in:
parent
0949924f59
commit
94e5405314
@ -1,5 +1,6 @@
|
|||||||
using QSB.Events;
|
using QSB.Events;
|
||||||
using QSB.MeteorSync.WorldObjects;
|
using QSB.MeteorSync.WorldObjects;
|
||||||
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using EventType = QSB.Events.EventType;
|
using EventType = QSB.Events.EventType;
|
||||||
|
|
||||||
@ -10,16 +11,19 @@ namespace QSB.MeteorSync.Events
|
|||||||
public override EventType Type => EventType.MeteorLaunch;
|
public override EventType Type => EventType.MeteorLaunch;
|
||||||
|
|
||||||
public override void SetupListener()
|
public override void SetupListener()
|
||||||
=> GlobalMessenger<int, float>.AddListener(EventNames.QSBMeteorLaunch, Handler);
|
=> GlobalMessenger<int, bool, int, float>.AddListener(EventNames.QSBMeteorLaunch, Handler);
|
||||||
|
|
||||||
public override void CloseListener()
|
public override void CloseListener()
|
||||||
=> GlobalMessenger<int, float>.RemoveListener(EventNames.QSBMeteorLaunch, Handler);
|
=> GlobalMessenger<int, bool, int, float>.RemoveListener(EventNames.QSBMeteorLaunch, Handler);
|
||||||
|
|
||||||
private void Handler(int id, float launchSpeed) => SendEvent(CreateMessage(id, launchSpeed));
|
private void Handler(int id, bool flag, int poolIndex, float launchSpeed) =>
|
||||||
|
SendEvent(CreateMessage(id, flag, poolIndex, launchSpeed));
|
||||||
|
|
||||||
private MeteorLaunchMessage CreateMessage(int id, float launchSpeed) => new MeteorLaunchMessage
|
private MeteorLaunchMessage CreateMessage(int id, bool flag, int poolIndex, float launchSpeed) => new MeteorLaunchMessage
|
||||||
{
|
{
|
||||||
ObjectId = id,
|
ObjectId = id,
|
||||||
|
Flag = flag,
|
||||||
|
PoolIndex = poolIndex,
|
||||||
LaunchSpeed = launchSpeed
|
LaunchSpeed = launchSpeed
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -31,7 +35,7 @@ namespace QSB.MeteorSync.Events
|
|||||||
}
|
}
|
||||||
|
|
||||||
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromId<QSBMeteorLauncher>(message.ObjectId);
|
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromId<QSBMeteorLauncher>(message.ObjectId);
|
||||||
qsbMeteorLauncher.LaunchMeteor(message.LaunchSpeed);
|
qsbMeteorLauncher.LaunchMeteor(message.Flag, message.PoolIndex, message.LaunchSpeed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,23 @@ namespace QSB.MeteorSync.Events
|
|||||||
{
|
{
|
||||||
public class MeteorLaunchMessage : WorldObjectMessage
|
public class MeteorLaunchMessage : WorldObjectMessage
|
||||||
{
|
{
|
||||||
|
public bool Flag;
|
||||||
|
public int PoolIndex;
|
||||||
public float LaunchSpeed;
|
public float LaunchSpeed;
|
||||||
|
|
||||||
public override void Deserialize(QNetworkReader reader)
|
public override void Deserialize(QNetworkReader reader)
|
||||||
{
|
{
|
||||||
base.Deserialize(reader);
|
base.Deserialize(reader);
|
||||||
|
Flag = reader.ReadBoolean();
|
||||||
|
PoolIndex = reader.ReadInt32();
|
||||||
LaunchSpeed = reader.ReadSingle();
|
LaunchSpeed = reader.ReadSingle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Serialize(QNetworkWriter writer)
|
public override void Serialize(QNetworkWriter writer)
|
||||||
{
|
{
|
||||||
base.Serialize(writer);
|
base.Serialize(writer);
|
||||||
|
writer.Write(Flag);
|
||||||
|
writer.Write(PoolIndex);
|
||||||
writer.Write(LaunchSpeed);
|
writer.Write(LaunchSpeed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,8 +59,11 @@ namespace QSB.MeteorSync.Patches
|
|||||||
[HarmonyPatch(typeof(MeteorLauncher), nameof(MeteorLauncher.LaunchMeteor))]
|
[HarmonyPatch(typeof(MeteorLauncher), nameof(MeteorLauncher.LaunchMeteor))]
|
||||||
public static bool LaunchMeteor(MeteorLauncher __instance)
|
public static bool LaunchMeteor(MeteorLauncher __instance)
|
||||||
{
|
{
|
||||||
var flag = __instance._dynamicMeteorPool != null && (__instance._meteorPool == null || Random.value < __instance._dynamicProbability);
|
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
||||||
|
|
||||||
|
var flag = qsbMeteorLauncher.Flag;
|
||||||
MeteorController meteorController = null;
|
MeteorController meteorController = null;
|
||||||
|
var poolIndex = qsbMeteorLauncher.PoolIndex;
|
||||||
if (!flag)
|
if (!flag)
|
||||||
{
|
{
|
||||||
if (__instance._meteorPool.Count == 0)
|
if (__instance._meteorPool.Count == 0)
|
||||||
@ -69,9 +72,9 @@ namespace QSB.MeteorSync.Patches
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meteorController = __instance._meteorPool[__instance._meteorPool.Count - 1];
|
meteorController = __instance._meteorPool[poolIndex];
|
||||||
meteorController.Initialize(__instance.transform, __instance._detectableField, __instance._detectableFluid);
|
meteorController.Initialize(__instance.transform, __instance._detectableField, __instance._detectableFluid);
|
||||||
__instance._meteorPool.QuickRemoveAt(__instance._meteorPool.Count - 1);
|
__instance._meteorPool.QuickRemoveAt(poolIndex);
|
||||||
__instance._launchedMeteors.Add(meteorController);
|
__instance._launchedMeteors.Add(meteorController);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,15 +84,13 @@ namespace QSB.MeteorSync.Patches
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meteorController = __instance._dynamicMeteorPool[__instance._dynamicMeteorPool.Count - 1];
|
meteorController = __instance._dynamicMeteorPool[poolIndex];
|
||||||
meteorController.Initialize(__instance.transform, null, null);
|
meteorController.Initialize(__instance.transform, null, null);
|
||||||
__instance._dynamicMeteorPool.QuickRemoveAt(__instance._dynamicMeteorPool.Count - 1);
|
__instance._dynamicMeteorPool.QuickRemoveAt(poolIndex);
|
||||||
__instance._launchedDynamicMeteors.Add(meteorController);
|
__instance._launchedDynamicMeteors.Add(meteorController);
|
||||||
}
|
}
|
||||||
if (meteorController != null)
|
if (meteorController != null)
|
||||||
{
|
{
|
||||||
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
|
||||||
|
|
||||||
var launchSpeed = qsbMeteorLauncher.LaunchSpeed;
|
var launchSpeed = qsbMeteorLauncher.LaunchSpeed;
|
||||||
var linearVelocity = __instance._parentBody.GetPointVelocity(__instance.transform.position) + __instance.transform.TransformDirection(__instance._launchDirection) * launchSpeed;
|
var linearVelocity = __instance._parentBody.GetPointVelocity(__instance.transform.position) + __instance.transform.TransformDirection(__instance._launchDirection) * launchSpeed;
|
||||||
var angularVelocity = __instance.transform.forward * 2f;
|
var angularVelocity = __instance.transform.forward * 2f;
|
||||||
|
@ -82,6 +82,7 @@ namespace QSB.MeteorSync.Patches
|
|||||||
{
|
{
|
||||||
var flag = __instance._dynamicMeteorPool != null && (__instance._meteorPool == null || Random.value < __instance._dynamicProbability);
|
var flag = __instance._dynamicMeteorPool != null && (__instance._meteorPool == null || Random.value < __instance._dynamicProbability);
|
||||||
MeteorController meteorController = null;
|
MeteorController meteorController = null;
|
||||||
|
var poolIndex = 0;
|
||||||
if (!flag)
|
if (!flag)
|
||||||
{
|
{
|
||||||
if (__instance._meteorPool.Count == 0)
|
if (__instance._meteorPool.Count == 0)
|
||||||
@ -90,9 +91,10 @@ namespace QSB.MeteorSync.Patches
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meteorController = __instance._meteorPool[__instance._meteorPool.Count - 1];
|
poolIndex = __instance._meteorPool.Count - 1;
|
||||||
|
meteorController = __instance._meteorPool[poolIndex];
|
||||||
meteorController.Initialize(__instance.transform, __instance._detectableField, __instance._detectableFluid);
|
meteorController.Initialize(__instance.transform, __instance._detectableField, __instance._detectableFluid);
|
||||||
__instance._meteorPool.QuickRemoveAt(__instance._meteorPool.Count - 1);
|
__instance._meteorPool.QuickRemoveAt(poolIndex);
|
||||||
__instance._launchedMeteors.Add(meteorController);
|
__instance._launchedMeteors.Add(meteorController);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,9 +104,10 @@ namespace QSB.MeteorSync.Patches
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meteorController = __instance._dynamicMeteorPool[__instance._dynamicMeteorPool.Count - 1];
|
poolIndex = __instance._dynamicMeteorPool.Count - 1;
|
||||||
|
meteorController = __instance._dynamicMeteorPool[poolIndex];
|
||||||
meteorController.Initialize(__instance.transform, null, null);
|
meteorController.Initialize(__instance.transform, null, null);
|
||||||
__instance._dynamicMeteorPool.QuickRemoveAt(__instance._dynamicMeteorPool.Count - 1);
|
__instance._dynamicMeteorPool.QuickRemoveAt(poolIndex);
|
||||||
__instance._launchedDynamicMeteors.Add(meteorController);
|
__instance._launchedDynamicMeteors.Add(meteorController);
|
||||||
}
|
}
|
||||||
if (meteorController != null)
|
if (meteorController != null)
|
||||||
@ -120,7 +123,7 @@ namespace QSB.MeteorSync.Patches
|
|||||||
}
|
}
|
||||||
|
|
||||||
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
||||||
QSBEventManager.FireEvent(EventNames.QSBMeteorLaunch, qsbMeteorLauncher.ObjectId, launchSpeed);
|
QSBEventManager.FireEvent(EventNames.QSBMeteorLaunch, qsbMeteorLauncher.ObjectId, flag, poolIndex, launchSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -12,6 +12,8 @@ namespace QSB.MeteorSync.WorldObjects
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public bool Flag;
|
||||||
|
public int PoolIndex;
|
||||||
public float LaunchSpeed;
|
public float LaunchSpeed;
|
||||||
|
|
||||||
public void PreLaunchMeteor()
|
public void PreLaunchMeteor()
|
||||||
@ -24,8 +26,10 @@ namespace QSB.MeteorSync.WorldObjects
|
|||||||
DebugLog.DebugWrite($"{LogName} - pre launch");
|
DebugLog.DebugWrite($"{LogName} - pre launch");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LaunchMeteor(float launchSpeed)
|
public void LaunchMeteor(bool flag, int poolIndex, float launchSpeed)
|
||||||
{
|
{
|
||||||
|
Flag = flag;
|
||||||
|
PoolIndex = poolIndex;
|
||||||
LaunchSpeed = launchSpeed;
|
LaunchSpeed = launchSpeed;
|
||||||
|
|
||||||
AttachedObject.LaunchMeteor();
|
AttachedObject.LaunchMeteor();
|
||||||
@ -34,7 +38,7 @@ namespace QSB.MeteorSync.WorldObjects
|
|||||||
particleSystem.Stop();
|
particleSystem.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
DebugLog.DebugWrite($"{LogName} - launch {launchSpeed}");
|
DebugLog.DebugWrite($"{LogName} - launch {flag} {poolIndex} {launchSpeed}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user