add component repair tick event

This commit is contained in:
Mister_Nebula 2021-06-20 10:17:32 +01:00
parent fc50ec4e38
commit a66892f70b
7 changed files with 75 additions and 2 deletions

View File

@ -75,5 +75,6 @@
public static string QSBHullRepaired = "QSBHullRepaired";
public static string QSBComponentDamaged = "QSBComponentDamaged";
public static string QSBComponentRepaired = "QSBComponentRepaired";
public static string QSBComponentRepairTick = "QSBComponentRepairTick";
}
}

View File

@ -51,6 +51,7 @@
HullChangeIntegrity,
HullRepaired,
ComponentDamaged,
ComponentRepaired
ComponentRepaired,
ComponentRepairTick
}
}

View File

@ -89,7 +89,8 @@ namespace QSB.Events
new HullChangeIntegrityEvent(),
new HullRepairedEvent(),
new ComponentDamagedEvent(),
new ComponentRepairedEvent()
new ComponentRepairedEvent(),
new ComponentRepairTickEvent()
};
if (UnitTestDetector.IsInUnitTest)

View File

@ -243,6 +243,7 @@
<Compile Include="ShipSync\ComponentType.cs" />
<Compile Include="ShipSync\Events\Component\ComponentDamagedEvent.cs" />
<Compile Include="ShipSync\Events\Component\ComponentRepairedEvent.cs" />
<Compile Include="ShipSync\Events\Component\ComponentRepairTickEvent.cs" />
<Compile Include="ShipSync\Events\FunnelEnableEvent.cs" />
<Compile Include="ShipSync\Events\Hull\HullChangeIntegrityEvent.cs" />
<Compile Include="ShipSync\Events\Hull\HullChangeIntegrityMessage.cs" />
@ -251,6 +252,7 @@
<Compile Include="ShipSync\Events\Hull\HullImpactMessage.cs" />
<Compile Include="ShipSync\Events\Hull\HullRepairedEvent.cs" />
<Compile Include="ShipSync\Events\ImpactDataMessage.cs" />
<Compile Include="ShipSync\Events\RepairTickMessage.cs" />
<Compile Include="ShipSync\WorldObjects\QSBShipComponent.cs" />
<Compile Include="ShipSync\WorldObjects\QSBShipHull.cs" />
<Compile Include="Syncs\ISectoredSync.cs" />

View File

@ -0,0 +1,39 @@
using QSB.Events;
using QSB.ShipSync.WorldObjects;
using QSB.Utility;
using QSB.WorldSync;
namespace QSB.ShipSync.Events.Component
{
class ComponentRepairTickEvent : QSBEvent<RepairTickMessage>
{
public override EventType Type => EventType.ComponentRepairTick;
public override void SetupListener() => GlobalMessenger<ShipComponent, float>.AddListener(EventNames.QSBComponentRepairTick, Handler);
public override void CloseListener() => GlobalMessenger<ShipComponent, float>.RemoveListener(EventNames.QSBComponentRepairTick, Handler);
private void Handler(ShipComponent hull, float repairFraction) => SendEvent(CreateMessage(hull, repairFraction));
private RepairTickMessage CreateMessage(ShipComponent hull, float repairFraction)
{
var worldObject = QSBWorldSync.GetWorldFromUnity<QSBShipComponent, ShipComponent>(hull);
return new RepairTickMessage
{
AboutId = LocalPlayerId,
ObjectId = worldObject.ObjectId,
RepairNumber = repairFraction
};
}
public override void OnReceiveLocal(bool server, RepairTickMessage message)
{
DebugLog.DebugWrite($"[S COMPONENT] {message.ObjectId} Repair tick {message.RepairNumber}", OWML.Common.MessageType.Warning);
}
public override void OnReceiveRemote(bool server, RepairTickMessage message)
{
var worldObject = QSBWorldSync.GetWorldFromId<QSBShipComponent>(message.ObjectId);
worldObject.RepairTick(message.RepairNumber);
}
}
}

View File

@ -0,0 +1,22 @@
using QSB.WorldSync.Events;
using QuantumUNET.Transport;
namespace QSB.ShipSync.Events
{
class RepairTickMessage : WorldObjectMessage
{
public float RepairNumber { get; set; }
public override void Deserialize(QNetworkReader reader)
{
base.Deserialize(reader);
RepairNumber = reader.ReadSingle();
}
public override void Serialize(QNetworkWriter writer)
{
base.Serialize(writer);
writer.Write(RepairNumber);
}
}
}

View File

@ -35,5 +35,12 @@ namespace QSB.ShipSync.WorldObjects
var damageEffect = AttachedObject.GetValue<DamageEffect>("_damageEffect");
damageEffect.SetEffectBlend(0f);
}
public void RepairTick(float repairFraction)
{
AttachedObject.SetValue("_repairFraction", repairFraction);
var damageEffect = AttachedObject.GetValue<DamageEffect>("_damageEffect");
damageEffect.SetEffectBlend(1f - repairFraction);
}
}
}