*RepairedMessage

This commit is contained in:
JohnCorby 2021-12-24 20:07:50 -08:00
parent 9987802c8e
commit 111601fdb5
10 changed files with 51 additions and 112 deletions

View File

@ -52,10 +52,8 @@
public const string QSBHullImpact = nameof(QSBHullImpact); public const string QSBHullImpact = nameof(QSBHullImpact);
public const string QSBHullDamaged = nameof(QSBHullDamaged); public const string QSBHullDamaged = nameof(QSBHullDamaged);
public const string QSBHullChangeIntegrity = nameof(QSBHullChangeIntegrity); public const string QSBHullChangeIntegrity = nameof(QSBHullChangeIntegrity);
public const string QSBHullRepaired = nameof(QSBHullRepaired);
public const string QSBHullRepairTick = nameof(QSBHullRepairTick); public const string QSBHullRepairTick = nameof(QSBHullRepairTick);
public const string QSBComponentDamaged = nameof(QSBComponentDamaged); public const string QSBComponentDamaged = nameof(QSBComponentDamaged);
public const string QSBComponentRepaired = nameof(QSBComponentRepaired);
public const string QSBComponentRepairTick = nameof(QSBComponentRepairTick); public const string QSBComponentRepairTick = nameof(QSBComponentRepairTick);
public const string QSBProbeEvent = nameof(QSBProbeEvent); public const string QSBProbeEvent = nameof(QSBProbeEvent);
public const string QSBProbeStartRetrieve = nameof(QSBProbeStartRetrieve); public const string QSBProbeStartRetrieve = nameof(QSBProbeStartRetrieve);
@ -68,6 +66,5 @@
public const string QSBExitSatelliteCamera = nameof(QSBExitSatelliteCamera); public const string QSBExitSatelliteCamera = nameof(QSBExitSatelliteCamera);
public const string QSBSatelliteSnapshot = nameof(QSBSatelliteSnapshot); public const string QSBSatelliteSnapshot = nameof(QSBSatelliteSnapshot);
public const string QSBSatelliteRepairTick = nameof(QSBSatelliteRepairTick); public const string QSBSatelliteRepairTick = nameof(QSBSatelliteRepairTick);
public const string QSBSatelliteRepaired = nameof(QSBSatelliteRepairTick);
} }
} }

View File

@ -1,33 +0,0 @@
using QSB.Events;
using QSB.ShipSync.WorldObjects;
using QSB.WorldSync;
using QSB.WorldSync.Events;
namespace QSB.ShipSync.Messages.Component
{
internal class ComponentRepairedEvent : QSBEvent<WorldObjectMessage>
{
public override bool RequireWorldObjectsReady => true;
public override void SetupListener() => GlobalMessenger<ShipComponent>.AddListener(EventNames.QSBComponentRepaired, Handler);
public override void CloseListener() => GlobalMessenger<ShipComponent>.RemoveListener(EventNames.QSBComponentRepaired, Handler);
private void Handler(ShipComponent hull) => SendEvent(CreateMessage(hull));
private WorldObjectMessage CreateMessage(ShipComponent hull)
{
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent>(hull);
return new WorldObjectMessage
{
AboutId = LocalPlayerId,
ObjectId = worldObject.ObjectId
};
}
public override void OnReceiveRemote(bool server, WorldObjectMessage message)
{
var worldObject = QSBWorldSync.GetWorldFromId<QSBShipComponent>(message.ObjectId);
worldObject.SetRepaired();
}
}
}

View File

@ -0,0 +1,10 @@
using QSB.Messaging;
using QSB.ShipSync.WorldObjects;
namespace QSB.ShipSync.Messages.Component
{
internal class ComponentRepairedMessage : QSBWorldObjectMessage<QSBShipComponent>
{
public override void OnReceiveRemote() => WorldObject.SetRepaired();
}
}

View File

@ -1,33 +0,0 @@
using QSB.Events;
using QSB.ShipSync.WorldObjects;
using QSB.WorldSync;
using QSB.WorldSync.Events;
namespace QSB.ShipSync.Messages.Hull
{
internal class HullRepairedEvent : QSBEvent<WorldObjectMessage>
{
public override bool RequireWorldObjectsReady => true;
public override void SetupListener() => GlobalMessenger<ShipHull>.AddListener(EventNames.QSBHullRepaired, Handler);
public override void CloseListener() => GlobalMessenger<ShipHull>.RemoveListener(EventNames.QSBHullRepaired, Handler);
private void Handler(ShipHull hull) => SendEvent(CreateMessage(hull));
private WorldObjectMessage CreateMessage(ShipHull hull)
{
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipHull>(hull);
return new WorldObjectMessage
{
AboutId = LocalPlayerId,
ObjectId = worldObject.ObjectId
};
}
public override void OnReceiveRemote(bool server, WorldObjectMessage message)
{
var worldObject = QSBWorldSync.GetWorldFromId<QSBShipHull>(message.ObjectId);
worldObject.SetRepaired();
}
}
}

View File

@ -0,0 +1,10 @@
using QSB.Messaging;
using QSB.ShipSync.WorldObjects;
namespace QSB.ShipSync.Messages.Hull
{
internal class HullRepairedMessage : QSBWorldObjectMessage<QSBShipHull>
{
public override void OnReceiveRemote() => WorldObject.SetRepaired();
}
}

View File

@ -5,18 +5,18 @@ namespace QSB.ShipSync.Messages
{ {
internal class RepairTickMessage : WorldObjectMessage internal class RepairTickMessage : WorldObjectMessage
{ {
public float RepairNumber { get; set; } public float RepairNumber;
public override void Deserialize(QNetworkReader reader)
{
base.Deserialize(reader);
RepairNumber = reader.ReadSingle();
}
public override void Serialize(QNetworkWriter writer) public override void Serialize(QNetworkWriter writer)
{ {
base.Serialize(writer); base.Serialize(writer);
writer.Write(RepairNumber); writer.Write(RepairNumber);
} }
public override void Deserialize(QNetworkReader reader)
{
base.Deserialize(reader);
RepairNumber = reader.ReadSingle();
}
} }
} }

View File

@ -1,8 +1,12 @@
using HarmonyLib; using HarmonyLib;
using OWML.Utils; using OWML.Utils;
using QSB.Events; using QSB.Events;
using QSB.Messaging;
using QSB.Patches; using QSB.Patches;
using QSB.ShipSync.Messages.Component;
using QSB.ShipSync.Messages.Hull;
using QSB.ShipSync.TransformSync; using QSB.ShipSync.TransformSync;
using QSB.ShipSync.WorldObjects;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using System; using System;
@ -140,7 +144,8 @@ namespace QSB.ShipSync.Patches
__instance._repairFraction = 1f; __instance._repairFraction = 1f;
__instance.GetType().GetAnyMethod("OnComponentRepaired").Invoke(__instance, null); __instance.GetType().GetAnyMethod("OnComponentRepaired").Invoke(__instance, null);
__instance.RaiseEvent("OnRepaired", __instance); __instance.RaiseEvent("OnRepaired", __instance);
QSBEventManager.FireEvent(EventNames.QSBComponentRepaired, __instance); QSBWorldSync.GetWorldFromUnity<QSBShipComponent>(__instance)
.SendMessage(new ComponentRepairedMessage());
} }
__instance.GetType().GetAnyMethod("UpdateColliderState").Invoke(__instance, null); __instance.GetType().GetAnyMethod("UpdateColliderState").Invoke(__instance, null);
@ -233,7 +238,8 @@ namespace QSB.ShipSync.Patches
{ {
____damaged = false; ____damaged = false;
__instance.RaiseEvent("OnRepaired", __instance); __instance.RaiseEvent("OnRepaired", __instance);
QSBEventManager.FireEvent(EventNames.QSBHullRepaired, __instance); QSBWorldSync.GetWorldFromUnity<QSBShipHull>(__instance)
.SendMessage(new HullRepairedMessage());
} }
if (____damageEffect != null) if (____damageEffect != null)

View File

@ -1,33 +0,0 @@
using QSB.Events;
using QSB.WorldSync;
using QSB.WorldSync.Events;
using QSB.ZeroGCaveSync.WorldObjects;
namespace QSB.ZeroGCaveSync.Messages
{
internal class SatelliteNodeRepaired : QSBEvent<WorldObjectMessage>
{
public override bool RequireWorldObjectsReady => true;
public override void SetupListener() => GlobalMessenger<SatelliteNode>.AddListener(EventNames.QSBSatelliteRepaired, Handler);
public override void CloseListener() => GlobalMessenger<SatelliteNode>.RemoveListener(EventNames.QSBSatelliteRepaired, Handler);
private void Handler(SatelliteNode node) => SendEvent(CreateMessage(node));
private WorldObjectMessage CreateMessage(SatelliteNode node)
{
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBSatelliteNode>(node);
return new WorldObjectMessage
{
AboutId = LocalPlayerId,
ObjectId = worldObject.ObjectId
};
}
public override void OnReceiveRemote(bool server, WorldObjectMessage message)
{
var worldObject = QSBWorldSync.GetWorldFromId<QSBSatelliteNode>(message.ObjectId);
worldObject.SetRepaired();
}
}
}

View File

@ -0,0 +1,10 @@
using QSB.Messaging;
using QSB.ZeroGCaveSync.WorldObjects;
namespace QSB.ZeroGCaveSync.Messages
{
internal class SatelliteNodeRepairedMessage : QSBWorldObjectMessage<QSBSatelliteNode>
{
public override void OnReceiveRemote() => WorldObject.SetRepaired();
}
}

View File

@ -1,7 +1,11 @@
using HarmonyLib; using HarmonyLib;
using QSB.Events; using QSB.Events;
using QSB.Messaging;
using QSB.Patches; using QSB.Patches;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync;
using QSB.ZeroGCaveSync.Messages;
using QSB.ZeroGCaveSync.WorldObjects;
using UnityEngine; using UnityEngine;
namespace QSB.ZeroGCaveSync.Patches namespace QSB.ZeroGCaveSync.Patches
@ -23,7 +27,8 @@ namespace QSB.ZeroGCaveSync.Patches
__instance._repairFraction = Mathf.Clamp01(__instance._repairFraction + (Time.deltaTime / __instance._repairTime)); __instance._repairFraction = Mathf.Clamp01(__instance._repairFraction + (Time.deltaTime / __instance._repairTime));
if (__instance._repairFraction >= 1f) if (__instance._repairFraction >= 1f)
{ {
QSBEventManager.FireEvent(EventNames.QSBSatelliteRepaired, __instance); QSBWorldSync.GetWorldFromUnity<QSBSatelliteNode>(__instance)
.SendMessage(new SatelliteNodeRepairedMessage());
__instance._damaged = false; __instance._damaged = false;
var component = Locator.GetPlayerTransform().GetComponent<ReferenceFrameTracker>(); var component = Locator.GetPlayerTransform().GetComponent<ReferenceFrameTracker>();
if (component.GetReferenceFrame(true) == __instance._rfVolume.GetReferenceFrame()) if (component.GetReferenceFrame(true) == __instance._rfVolume.GetReferenceFrame())