From fdeaf8111aae431792a848fce9cdcf470e98fca0 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 10 Nov 2021 23:55:39 -0800 Subject: [PATCH] make impacting work --- QSB/MeteorSync/Events/MeteorImpactEvent.cs | 4 +-- QSB/MeteorSync/Events/MeteorImpactMessage.cs | 7 ------ QSB/MeteorSync/Patches/MeteorClientPatches.cs | 25 ++++++++++++++++--- QSB/MeteorSync/WorldObjects/QSBMeteor.cs | 23 +++++++++++------ 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/QSB/MeteorSync/Events/MeteorImpactEvent.cs b/QSB/MeteorSync/Events/MeteorImpactEvent.cs index 8e5e62e9..01964ae4 100644 --- a/QSB/MeteorSync/Events/MeteorImpactEvent.cs +++ b/QSB/MeteorSync/Events/MeteorImpactEvent.cs @@ -22,8 +22,6 @@ namespace QSB.MeteorSync.Events private MeteorImpactMessage CreateMessage(int id, Vector3 pos, Vector3 vel, float damage) => new MeteorImpactMessage { ObjectId = id, - Position = pos, - RelativeVelocity = vel, Damage = damage }; @@ -35,7 +33,7 @@ namespace QSB.MeteorSync.Events } var qsbMeteor = QSBWorldSync.GetWorldFromId(message.ObjectId); - qsbMeteor.Impact(message.Position, message.RelativeVelocity, message.Damage); + qsbMeteor.Impact(message.Damage); } } } diff --git a/QSB/MeteorSync/Events/MeteorImpactMessage.cs b/QSB/MeteorSync/Events/MeteorImpactMessage.cs index 82269d55..bf95ba8c 100644 --- a/QSB/MeteorSync/Events/MeteorImpactMessage.cs +++ b/QSB/MeteorSync/Events/MeteorImpactMessage.cs @@ -1,28 +1,21 @@ using QSB.WorldSync.Events; using QuantumUNET.Transport; -using UnityEngine; namespace QSB.MeteorSync.Events { public class MeteorImpactMessage : WorldObjectMessage { - public Vector3 Position; - public Vector3 RelativeVelocity; public float Damage; public override void Deserialize(QNetworkReader reader) { base.Deserialize(reader); - Position = reader.ReadVector3(); - RelativeVelocity = reader.ReadVector3(); Damage = reader.ReadSingle(); } public override void Serialize(QNetworkWriter writer) { base.Serialize(writer); - writer.Write(Position); - writer.Write(RelativeVelocity); writer.Write(Damage); } } diff --git a/QSB/MeteorSync/Patches/MeteorClientPatches.cs b/QSB/MeteorSync/Patches/MeteorClientPatches.cs index 4c5d8aee..a7e3c574 100644 --- a/QSB/MeteorSync/Patches/MeteorClientPatches.cs +++ b/QSB/MeteorSync/Patches/MeteorClientPatches.cs @@ -1,6 +1,8 @@ -using HarmonyLib; +using System; +using HarmonyLib; using QSB.MeteorSync.WorldObjects; using QSB.Patches; +using QSB.Utility; using QSB.WorldSync; using UnityEngine; @@ -71,10 +73,10 @@ namespace QSB.MeteorSync.Patches var qsbMeteor = QSBWorldSync.GetWorldFromUnity(__instance); var componentInParent = hitObject.GetComponentInParent(); + // get damage from server + var damage = qsbMeteor.Damage; if (componentInParent != null) { - // get damage from server - var damage = qsbMeteor.Damage; if (!componentInParent.GetIgnoreMeteorDamage()) { componentInParent.AddDamage(damage); @@ -107,7 +109,24 @@ namespace QSB.MeteorSync.Patches __instance._hasImpacted = true; __instance._impactTime = Time.time; + DebugLog.DebugWrite($"{qsbMeteor.LogName} - impact! " + + $"{hitObject.name} {impactPoint} {impactVel} {damage}"); + return false; } + + + [HarmonyPostfix] + [HarmonyPatch(typeof(MeteorController), nameof(MeteorController.Suspend), new Type[0])] + public static void Suspend(MeteorController __instance) + { + if (!MeteorManager.MeteorsReady) + { + return; + } + + var qsbMeteor = QSBWorldSync.GetWorldFromUnity(__instance); + DebugLog.DebugWrite($"{qsbMeteor.LogName} - suspended"); + } } } diff --git a/QSB/MeteorSync/WorldObjects/QSBMeteor.cs b/QSB/MeteorSync/WorldObjects/QSBMeteor.cs index 2b23439a..38734deb 100644 --- a/QSB/MeteorSync/WorldObjects/QSBMeteor.cs +++ b/QSB/MeteorSync/WorldObjects/QSBMeteor.cs @@ -1,4 +1,6 @@ -using QSB.MeteorSync.TransformSync; +using System.Linq; +using OWML.Common; +using QSB.MeteorSync.TransformSync; using QSB.Utility; using QSB.WorldSync; using QuantumUNET; @@ -48,16 +50,21 @@ namespace QSB.MeteorSync.WorldObjects } - public float Damage; + public float Damage = float.NaN; - public void Impact(Vector3 position, Vector3 relativeVelocity, float damage) + public void Impact(float damage) { - DebugLog.DebugWrite($"{LogName} - impact! " - + $"{position} {relativeVelocity} {damage}"); - Damage = damage; - // todo get object - // AttachedObject.Impact(null, position, relativeVelocity); + + // just in case, set this up so even if no hit happens, it will reset itself eventually + AttachedObject._hasImpacted = true; + AttachedObject._impactTime = Time.time; + + // let the collision happen naturally + foreach (var owCollider in AttachedObject._owColliders) + { + owCollider.SetActivation(true); + } } } }