75 lines
1.7 KiB
C#
Raw Normal View History

using Mirror;
using QSB.Anglerfish.WorldObjects;
2021-12-23 15:57:41 -08:00
using QSB.Messaging;
using QSB.Player;
using UnityEngine;
namespace QSB.Anglerfish.Messages
{
/// <summary>
/// angler state, target transform, and local disturbance pos
/// </summary>
public class AnglerDataMessage : QSBEnumWorldObjectMessage<QSBAngler, AnglerfishController.AnglerState>
2021-12-23 15:57:41 -08:00
{
private uint TargetId;
private Vector3 LocalDisturbancePos;
public AnglerDataMessage(QSBAngler qsbAngler)
2021-12-23 15:57:41 -08:00
{
Value = qsbAngler.AttachedObject._currentState;
TargetId = TargetToId(qsbAngler.TargetTransform);
LocalDisturbancePos = qsbAngler.AttachedObject._localDisturbancePos;
}
public override void Serialize(NetworkWriter writer)
2021-12-23 15:57:41 -08:00
{
base.Serialize(writer);
writer.Write(TargetId);
writer.Write(LocalDisturbancePos);
}
public override void Deserialize(NetworkReader reader)
2021-12-23 15:57:41 -08:00
{
base.Deserialize(reader);
TargetId = reader.Read<uint>();
2021-12-23 15:57:41 -08:00
LocalDisturbancePos = reader.ReadVector3();
}
public override void OnReceiveRemote()
{
WorldObject.TargetTransform = IdToTarget(TargetId);
WorldObject.AttachedObject._localDisturbancePos = LocalDisturbancePos;
WorldObject.AttachedObject.ChangeState(Value);
}
private static uint TargetToId(Transform transform)
{
if (transform == null)
{
return uint.MaxValue;
}
if (transform == Locator.GetShipTransform())
{
return uint.MaxValue - 1;
}
return QSBPlayerManager.LocalPlayerId;
}
private static Transform IdToTarget(uint id)
{
if (id == uint.MaxValue)
{
return null;
}
if (id == uint.MaxValue - 1)
{
return Locator.GetShipTransform();
}
return QSBPlayerManager.GetPlayer(id).Body.transform;
}
}
}