mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-20 15:41:01 +00:00
just sync prelaunch/launch, stop worrying about impact and collisions for now
This commit is contained in:
parent
4e4bad6885
commit
5f4368c1e7
@ -95,7 +95,6 @@
|
||||
public static string QSBAnglerChangeState = "QSBAnglerChangeState";
|
||||
public static string QSBMeteorPreLaunch = "QSBMeteorPreLaunch";
|
||||
public static string QSBMeteorLaunch = "QSBMeteorLaunch";
|
||||
public static string QSBMeteorImpact = "QSBMeteorImpact";
|
||||
public static string QSBMeteorResync = "QSBMeteorResync";
|
||||
}
|
||||
}
|
||||
|
@ -139,7 +139,6 @@
|
||||
|
||||
MeteorPreLaunch,
|
||||
MeteorLaunch,
|
||||
MeteorImpact,
|
||||
MeteorResync
|
||||
}
|
||||
}
|
||||
|
@ -96,7 +96,6 @@ namespace QSB.Events
|
||||
new AnglerChangeStateEvent(),
|
||||
new MeteorPreLaunchEvent(),
|
||||
new MeteorLaunchEvent(),
|
||||
new MeteorImpactEvent(),
|
||||
new MeteorResyncEvent(),
|
||||
// Conversation/dialogue/exploration
|
||||
new ConversationEvent(),
|
||||
|
@ -1,41 +0,0 @@
|
||||
using QSB.Events;
|
||||
using QSB.MeteorSync.WorldObjects;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using UnityEngine;
|
||||
using EventType = QSB.Events.EventType;
|
||||
|
||||
namespace QSB.MeteorSync.Events
|
||||
{
|
||||
public class MeteorImpactEvent : QSBEvent<MeteorImpactMessage>
|
||||
{
|
||||
public override EventType Type => EventType.MeteorImpact;
|
||||
|
||||
public override void SetupListener()
|
||||
=> GlobalMessenger<int, Vector3, Quaternion, float>.AddListener(EventNames.QSBMeteorImpact, Handler);
|
||||
|
||||
public override void CloseListener()
|
||||
=> GlobalMessenger<int, Vector3, Quaternion, float>.RemoveListener(EventNames.QSBMeteorImpact, Handler);
|
||||
|
||||
private void Handler(int id, Vector3 pos, Quaternion rot, float damage) => SendEvent(CreateMessage(id, pos, rot, damage));
|
||||
|
||||
private MeteorImpactMessage CreateMessage(int id, Vector3 pos, Quaternion rot, float damage) => new MeteorImpactMessage
|
||||
{
|
||||
ObjectId = id,
|
||||
Pos = pos,
|
||||
Rot = rot,
|
||||
Damage = damage
|
||||
};
|
||||
|
||||
public override void OnReceiveRemote(bool isHost, MeteorImpactMessage message)
|
||||
{
|
||||
if (!MeteorManager.MeteorsReady)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var qsbMeteor = QSBWorldSync.GetWorldFromId<QSBMeteor>(message.ObjectId);
|
||||
qsbMeteor.Impact(message.Pos, message.Rot, message.Damage);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
using QSB.WorldSync.Events;
|
||||
using QuantumUNET.Transport;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.MeteorSync.Events
|
||||
{
|
||||
public class MeteorImpactMessage : WorldObjectMessage
|
||||
{
|
||||
public Vector3 Pos;
|
||||
public Quaternion Rot;
|
||||
public float Damage;
|
||||
|
||||
public override void Deserialize(QNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
Pos = reader.ReadVector3();
|
||||
Rot = reader.ReadQuaternion();
|
||||
Damage = reader.ReadSingle();
|
||||
}
|
||||
|
||||
public override void Serialize(QNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(Pos);
|
||||
writer.Write(Rot);
|
||||
writer.Write(Damage);
|
||||
}
|
||||
}
|
||||
}
|
@ -11,19 +11,20 @@ namespace QSB.MeteorSync.Events
|
||||
public override EventType Type => EventType.MeteorLaunch;
|
||||
|
||||
public override void SetupListener()
|
||||
=> GlobalMessenger<int, int, float>.AddListener(EventNames.QSBMeteorLaunch, Handler);
|
||||
=> GlobalMessenger<QSBMeteorLauncher>.AddListener(EventNames.QSBMeteorLaunch, Handler);
|
||||
|
||||
public override void CloseListener()
|
||||
=> GlobalMessenger<int, int, float>.RemoveListener(EventNames.QSBMeteorLaunch, Handler);
|
||||
=> GlobalMessenger<QSBMeteorLauncher>.RemoveListener(EventNames.QSBMeteorLaunch, Handler);
|
||||
|
||||
private void Handler(int id, int meteorId, float launchSpeed) =>
|
||||
SendEvent(CreateMessage(id, meteorId, launchSpeed));
|
||||
private void Handler(QSBMeteorLauncher qsbMeteorLauncher) =>
|
||||
SendEvent(CreateMessage(qsbMeteorLauncher));
|
||||
|
||||
private MeteorLaunchMessage CreateMessage(int id, int meteorId, float launchSpeed) => new MeteorLaunchMessage
|
||||
private MeteorLaunchMessage CreateMessage(QSBMeteorLauncher qsbMeteorLauncher) => new MeteorLaunchMessage
|
||||
{
|
||||
ObjectId = id,
|
||||
MeteorId = meteorId,
|
||||
LaunchSpeed = launchSpeed
|
||||
ObjectId = qsbMeteorLauncher.ObjectId,
|
||||
MeteorId = qsbMeteorLauncher.MeteorId,
|
||||
LaunchSpeed = qsbMeteorLauncher.LaunchSpeed,
|
||||
Damage = qsbMeteorLauncher.Damage
|
||||
};
|
||||
|
||||
public override void OnReceiveRemote(bool isHost, MeteorLaunchMessage message)
|
||||
@ -34,7 +35,7 @@ namespace QSB.MeteorSync.Events
|
||||
}
|
||||
|
||||
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromId<QSBMeteorLauncher>(message.ObjectId);
|
||||
qsbMeteorLauncher.LaunchMeteor(message.MeteorId, message.LaunchSpeed);
|
||||
qsbMeteorLauncher.LaunchMeteor(message.MeteorId, message.LaunchSpeed, message.Damage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,12 +7,14 @@ namespace QSB.MeteorSync.Events
|
||||
{
|
||||
public int MeteorId;
|
||||
public float LaunchSpeed;
|
||||
public float Damage;
|
||||
|
||||
public override void Deserialize(QNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
MeteorId = reader.ReadInt32();
|
||||
LaunchSpeed = reader.ReadSingle();
|
||||
Damage = reader.ReadSingle();
|
||||
}
|
||||
|
||||
public override void Serialize(QNetworkWriter writer)
|
||||
@ -20,6 +22,7 @@ namespace QSB.MeteorSync.Events
|
||||
base.Serialize(writer);
|
||||
writer.Write(MeteorId);
|
||||
writer.Write(LaunchSpeed);
|
||||
writer.Write(Damage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,16 +11,16 @@ namespace QSB.MeteorSync.Events
|
||||
public override EventType Type => EventType.MeteorPreLaunch;
|
||||
|
||||
public override void SetupListener()
|
||||
=> GlobalMessenger<int>.AddListener(EventNames.QSBMeteorPreLaunch, Handler);
|
||||
=> GlobalMessenger<QSBMeteorLauncher>.AddListener(EventNames.QSBMeteorPreLaunch, Handler);
|
||||
|
||||
public override void CloseListener()
|
||||
=> GlobalMessenger<int>.RemoveListener(EventNames.QSBMeteorPreLaunch, Handler);
|
||||
=> GlobalMessenger<QSBMeteorLauncher>.RemoveListener(EventNames.QSBMeteorPreLaunch, Handler);
|
||||
|
||||
private void Handler(int id) => SendEvent(CreateMessage(id));
|
||||
private void Handler(QSBMeteorLauncher qsbMeteorLauncher) => SendEvent(CreateMessage(qsbMeteorLauncher));
|
||||
|
||||
private WorldObjectMessage CreateMessage(int id) => new WorldObjectMessage
|
||||
private WorldObjectMessage CreateMessage(QSBMeteorLauncher qsbMeteorLauncher) => new WorldObjectMessage
|
||||
{
|
||||
ObjectId = id
|
||||
ObjectId = qsbMeteorLauncher.ObjectId
|
||||
};
|
||||
|
||||
public override void OnReceiveRemote(bool isHost, WorldObjectMessage message)
|
||||
|
@ -37,7 +37,7 @@ namespace QSB.MeteorSync.Events
|
||||
var qsbMeteor = QSBWorldSync.GetWorldFromId<QSBMeteor>(message.ObjectId);
|
||||
// todo
|
||||
|
||||
DebugLog.DebugWrite($"{qsbMeteor.LogName} - resync requested");
|
||||
// DebugLog.DebugWrite($"{qsbMeteor.LogName} - resync requested");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using HarmonyLib;
|
||||
using OWML.Common;
|
||||
using QSB.MeteorSync.WorldObjects;
|
||||
@ -95,8 +94,9 @@ namespace QSB.MeteorSync.Patches
|
||||
}
|
||||
if (meteorController != null)
|
||||
{
|
||||
var launchSpeed = qsbMeteorLauncher.LaunchSpeed;
|
||||
var linearVelocity = __instance._parentBody.GetPointVelocity(__instance.transform.position) + __instance.transform.TransformDirection(__instance._launchDirection) * launchSpeed;
|
||||
qsbMeteor.Damage = qsbMeteorLauncher.Damage;
|
||||
|
||||
var linearVelocity = __instance._parentBody.GetPointVelocity(__instance.transform.position) + __instance.transform.TransformDirection(__instance._launchDirection) * qsbMeteorLauncher.LaunchSpeed;
|
||||
var angularVelocity = __instance.transform.forward * 2f;
|
||||
meteorController.Launch(null, __instance.transform.position, __instance.transform.rotation, linearVelocity, angularVelocity);
|
||||
if (__instance._audioSector.ContainsOccupant(DynamicOccupant.Player))
|
||||
@ -104,37 +104,18 @@ namespace QSB.MeteorSync.Patches
|
||||
__instance._launchSource.pitch = Random.Range(0.4f, 0.6f);
|
||||
__instance._launchSource.PlayOneShot(AudioType.BH_MeteorLaunch);
|
||||
}
|
||||
DebugLog.DebugWrite($"{qsbMeteorLauncher.LogName} - launch {qsbMeteor.LogName} {launchSpeed}");
|
||||
|
||||
DebugLog.DebugWrite($"{qsbMeteorLauncher.LogName} - launch {qsbMeteor.LogName} {qsbMeteorLauncher.LaunchSpeed} {qsbMeteor.Damage}");
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog.ToConsole($"{qsbMeteorLauncher.LogName} - could not find meteor {qsbMeteorLauncher.MeteorId} in pool", MessageType.Warning);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(MeteorController), nameof(MeteorController.Launch))]
|
||||
public static void Launch(MeteorController __instance,
|
||||
Transform parent, Vector3 worldPosition, Quaternion worldRotation, Vector3 linearVelocity, Vector3 angularVelocity)
|
||||
{
|
||||
__instance.gameObject.SetActive(true);
|
||||
__instance.transform.SetParent(parent);
|
||||
__instance.transform.SetPositionAndRotation(worldPosition, worldRotation);
|
||||
__instance._owRigidbody.MakeNonKinematic();
|
||||
__instance._owRigidbody.SetVelocity(linearVelocity);
|
||||
__instance._owRigidbody.SetAngularVelocity(angularVelocity);
|
||||
__instance._intactRenderer.enabled = true;
|
||||
__instance._glowLight.intensity = __instance._lightStartIntensity;
|
||||
__instance._smokeTrail.enabled = true;
|
||||
__instance._smokeTrail.GetParticleSystem().Play();
|
||||
__instance._suspended = false;
|
||||
__instance._hasLaunched = true;
|
||||
__instance._launchTime = Time.time;
|
||||
__instance._hasImpacted = false;
|
||||
__instance._impactTime = 0f;
|
||||
__instance._heat = 1f;
|
||||
}
|
||||
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(MeteorController), nameof(MeteorController.Impact))]
|
||||
public static bool Impact(MeteorController __instance,
|
||||
@ -178,15 +159,7 @@ namespace QSB.MeteorSync.Patches
|
||||
__instance._hasImpacted = true;
|
||||
__instance._impactTime = Time.time;
|
||||
|
||||
if (qsbMeteor.ShouldImpact)
|
||||
{
|
||||
DebugLog.DebugWrite($"{qsbMeteor.LogName} - impact! {hitObject.name} {impactPoint} {impactVel} {damage}");
|
||||
qsbMeteor.ShouldImpact = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog.ToConsole($"{qsbMeteor.LogName} - impacted locally, but not on server. THIS SHOULD BE IMPOSSIBLE", MessageType.Error);
|
||||
}
|
||||
DebugLog.DebugWrite($"{qsbMeteor.LogName} - impact! {hitObject.name} {impactPoint} {impactVel} {damage}");
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -202,11 +175,6 @@ namespace QSB.MeteorSync.Patches
|
||||
}
|
||||
|
||||
var qsbMeteor = QSBWorldSync.GetWorldFromUnity<QSBMeteor>(__instance);
|
||||
if (qsbMeteor.ShouldImpact)
|
||||
{
|
||||
DebugLog.ToConsole($"{qsbMeteor.LogName} - impacted on server, but not locally", MessageType.Error);
|
||||
qsbMeteor.ShouldImpact = false;
|
||||
}
|
||||
DebugLog.DebugWrite($"{qsbMeteor.LogName} - suspended");
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ namespace QSB.MeteorSync.Patches
|
||||
}
|
||||
|
||||
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
||||
QSBEventManager.FireEvent(EventNames.QSBMeteorPreLaunch, qsbMeteorLauncher.ObjectId);
|
||||
QSBEventManager.FireEvent(EventNames.QSBMeteorPreLaunch, qsbMeteorLauncher);
|
||||
}
|
||||
if (Time.time > __instance._lastLaunchTime + __instance._launchDelay + 2.3f)
|
||||
{
|
||||
@ -115,8 +115,15 @@ namespace QSB.MeteorSync.Patches
|
||||
}
|
||||
if (meteorController != null)
|
||||
{
|
||||
var launchSpeed = Random.Range(__instance._minLaunchSpeed, __instance._maxLaunchSpeed);
|
||||
var linearVelocity = __instance._parentBody.GetPointVelocity(__instance.transform.position) + __instance.transform.TransformDirection(__instance._launchDirection) * launchSpeed;
|
||||
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
||||
var qsbMeteor = QSBWorldSync.GetWorldFromUnity<QSBMeteor>(meteorController);
|
||||
|
||||
qsbMeteorLauncher.MeteorId = qsbMeteor.ObjectId;
|
||||
qsbMeteorLauncher.LaunchSpeed = Random.Range(__instance._minLaunchSpeed, __instance._maxLaunchSpeed);
|
||||
qsbMeteorLauncher.Damage = Random.Range(meteorController._minDamage, meteorController._maxDamage);
|
||||
qsbMeteor.Damage = qsbMeteorLauncher.Damage;
|
||||
|
||||
var linearVelocity = __instance._parentBody.GetPointVelocity(__instance.transform.position) + __instance.transform.TransformDirection(__instance._launchDirection) * qsbMeteorLauncher.LaunchSpeed;
|
||||
var angularVelocity = __instance.transform.forward * 2f;
|
||||
meteorController.Launch(null, __instance.transform.position, __instance.transform.rotation, linearVelocity, angularVelocity);
|
||||
if (__instance._audioSector.ContainsOccupant(DynamicOccupant.Player))
|
||||
@ -125,10 +132,8 @@ namespace QSB.MeteorSync.Patches
|
||||
__instance._launchSource.PlayOneShot(AudioType.BH_MeteorLaunch);
|
||||
}
|
||||
|
||||
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
||||
var qsbMeteor = QSBWorldSync.GetWorldFromUnity<QSBMeteor>(meteorController);
|
||||
QSBEventManager.FireEvent(EventNames.QSBMeteorLaunch, qsbMeteorLauncher.ObjectId, qsbMeteor.ObjectId, launchSpeed);
|
||||
DebugLog.DebugWrite($"{qsbMeteorLauncher.LogName} - launch {qsbMeteor.LogName} {launchSpeed}");
|
||||
QSBEventManager.FireEvent(EventNames.QSBMeteorLaunch, qsbMeteorLauncher);
|
||||
DebugLog.DebugWrite($"{qsbMeteorLauncher.LogName} - launch {qsbMeteor.LogName} {qsbMeteorLauncher.LaunchSpeed} {qsbMeteor.Damage}");
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -140,8 +145,10 @@ namespace QSB.MeteorSync.Patches
|
||||
public static bool Impact(MeteorController __instance,
|
||||
GameObject hitObject, Vector3 impactPoint, Vector3 impactVel)
|
||||
{
|
||||
var qsbMeteor = QSBWorldSync.GetWorldFromUnity<QSBMeteor>(__instance);
|
||||
|
||||
var componentInParent = hitObject.GetComponentInParent<FragmentIntegrity>();
|
||||
var damage = Random.Range(__instance._minDamage, __instance._maxDamage);
|
||||
var damage = qsbMeteor.Damage;
|
||||
if (componentInParent != null)
|
||||
{
|
||||
if (!componentInParent.GetIgnoreMeteorDamage())
|
||||
@ -176,10 +183,6 @@ namespace QSB.MeteorSync.Patches
|
||||
__instance._hasImpacted = true;
|
||||
__instance._impactTime = Time.time;
|
||||
|
||||
var qsbMeteor = QSBWorldSync.GetWorldFromUnity<QSBMeteor>(__instance);
|
||||
var pos = Locator._brittleHollow.transform.InverseTransformPoint(__instance.owRigidbody.GetPosition());
|
||||
var rot = Locator._brittleHollow.transform.InverseTransformRotation(__instance.owRigidbody.GetRotation());
|
||||
QSBEventManager.FireEvent(EventNames.QSBMeteorImpact, qsbMeteor.ObjectId, pos, rot, damage);
|
||||
DebugLog.DebugWrite($"{qsbMeteor.LogName} - impact! {hitObject.name} {impactPoint} {impactVel} {damage}");
|
||||
|
||||
return false;
|
||||
|
@ -1,6 +1,4 @@
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using UnityEngine;
|
||||
using QSB.WorldSync;
|
||||
|
||||
namespace QSB.MeteorSync.WorldObjects
|
||||
{
|
||||
@ -34,29 +32,6 @@ namespace QSB.MeteorSync.WorldObjects
|
||||
}
|
||||
|
||||
|
||||
public bool ShouldImpact;
|
||||
public float Damage;
|
||||
|
||||
public void Impact(Vector3 pos, Quaternion rot, float damage)
|
||||
{
|
||||
pos = Locator._brittleHollow.transform.TransformPoint(pos);
|
||||
rot = Locator._brittleHollow.transform.TransformRotation(rot);
|
||||
Damage = damage;
|
||||
|
||||
AttachedObject.owRigidbody.SetPosition(pos);
|
||||
AttachedObject.owRigidbody.SetRotation(rot);
|
||||
|
||||
foreach (var owCollider in AttachedObject._owColliders)
|
||||
{
|
||||
owCollider.SetActivation(!OWLayerMask.IsLayerInMask(owCollider.gameObject.layer, OWLayerMask.physicalMask));
|
||||
}
|
||||
FragmentSurfaceProxy.TrackMeteor(AttachedObject);
|
||||
FragmentCollisionProxy.TrackMeteor(AttachedObject);
|
||||
|
||||
AttachedObject._hasImpacted = true;
|
||||
AttachedObject._impactTime = Time.time;
|
||||
|
||||
ShouldImpact = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ namespace QSB.MeteorSync.WorldObjects
|
||||
|
||||
public int MeteorId;
|
||||
public float LaunchSpeed;
|
||||
public float Damage;
|
||||
|
||||
public void PreLaunchMeteor()
|
||||
{
|
||||
@ -22,10 +23,11 @@ namespace QSB.MeteorSync.WorldObjects
|
||||
}
|
||||
}
|
||||
|
||||
public void LaunchMeteor(int meteorId, float launchSpeed)
|
||||
public void LaunchMeteor(int meteorId, float launchSpeed, float damage)
|
||||
{
|
||||
MeteorId = meteorId;
|
||||
LaunchSpeed = launchSpeed;
|
||||
Damage = damage;
|
||||
|
||||
AttachedObject.LaunchMeteor();
|
||||
foreach (var particleSystem in AttachedObject._launchParticles)
|
||||
|
@ -124,8 +124,6 @@
|
||||
<Compile Include="Menus\IMenuAPI.cs" />
|
||||
<Compile Include="Menus\MenuManager.cs" />
|
||||
<Compile Include="Messaging\BoolMessage.cs" />
|
||||
<Compile Include="MeteorSync\Events\MeteorImpactEvent.cs" />
|
||||
<Compile Include="MeteorSync\Events\MeteorImpactMessage.cs" />
|
||||
<Compile Include="MeteorSync\Events\MeteorLaunchEvent.cs" />
|
||||
<Compile Include="MeteorSync\Events\MeteorLaunchMessage.cs" />
|
||||
<Compile Include="MeteorSync\Events\MeteorPreLaunchEvent.cs" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user