more cleanup

This commit is contained in:
Mister_Nebula 2021-11-10 09:28:05 +00:00
parent 2aa2a04473
commit 9f57454ae9
6 changed files with 92 additions and 62 deletions

View File

@ -5,6 +5,7 @@ namespace QSB.Anglerfish
{ {
public class AnglerManager : WorldObjectManager public class AnglerManager : WorldObjectManager
{ {
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBAngler, AnglerfishController>(); protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBAngler, AnglerfishController>();
} }
} }

View File

@ -11,17 +11,22 @@ namespace QSB.Anglerfish.Events
public class AnglerChangeStateEvent : QSBEvent<AnglerChangeStateMessage> public class AnglerChangeStateEvent : QSBEvent<AnglerChangeStateMessage>
{ {
public override EventType Type => EventType.AnglerChangeState; public override EventType Type => EventType.AnglerChangeState;
public override void SetupListener() => GlobalMessenger<QSBAngler>.AddListener(EventNames.QSBAnglerChangeState, Handler);
public override void CloseListener() => GlobalMessenger<QSBAngler>.RemoveListener(EventNames.QSBAnglerChangeState, Handler);
private void Handler(QSBAngler qsbAngler) => public override void SetupListener()
SendEvent(new AnglerChangeStateMessage => GlobalMessenger<QSBAngler>.AddListener(EventNames.QSBAnglerChangeState, Handler);
{
ObjectId = qsbAngler.ObjectId, public override void CloseListener()
EnumValue = qsbAngler.AttachedObject._currentState, => GlobalMessenger<QSBAngler>.RemoveListener(EventNames.QSBAnglerChangeState, Handler);
targetId = TargetToId(qsbAngler.targetTransform),
localDisturbancePos = qsbAngler.AttachedObject._localDisturbancePos private void Handler(QSBAngler qsbAngler) => SendEvent(CreateMessage(qsbAngler));
});
private AnglerChangeStateMessage CreateMessage(QSBAngler qsbAngler) => new AnglerChangeStateMessage
{
ObjectId = qsbAngler.ObjectId,
EnumValue = qsbAngler.AttachedObject._currentState,
TargetId = TargetToId(qsbAngler.TargetTransform),
LocalDisturbancePos = qsbAngler.AttachedObject._localDisturbancePos
};
public override void OnReceiveLocal(bool isHost, AnglerChangeStateMessage message) => OnReceive(isHost, message); public override void OnReceiveLocal(bool isHost, AnglerChangeStateMessage message) => OnReceive(isHost, message);
public override void OnReceiveRemote(bool isHost, AnglerChangeStateMessage message) => OnReceive(isHost, message); public override void OnReceiveRemote(bool isHost, AnglerChangeStateMessage message) => OnReceive(isHost, message);
@ -36,8 +41,8 @@ namespace QSB.Anglerfish.Events
qsbAngler.TransferAuthority(message.FromId); qsbAngler.TransferAuthority(message.FromId);
} }
qsbAngler.targetTransform = IdToTarget(message.targetId); qsbAngler.TargetTransform = IdToTarget(message.TargetId);
qsbAngler.AttachedObject._localDisturbancePos = message.localDisturbancePos; qsbAngler.AttachedObject._localDisturbancePos = message.LocalDisturbancePos;
qsbAngler.AttachedObject.ChangeState(message.EnumValue); qsbAngler.AttachedObject.ChangeState(message.EnumValue);
} }
@ -47,10 +52,12 @@ namespace QSB.Anglerfish.Events
{ {
return uint.MaxValue; return uint.MaxValue;
} }
if (transform == Locator.GetShipTransform()) if (transform == Locator.GetShipTransform())
{ {
return uint.MaxValue - 1; return uint.MaxValue - 1;
} }
return QSBPlayerManager.LocalPlayerId; return QSBPlayerManager.LocalPlayerId;
} }
@ -60,10 +67,12 @@ namespace QSB.Anglerfish.Events
{ {
return null; return null;
} }
if (id == uint.MaxValue - 1) if (id == uint.MaxValue - 1)
{ {
return Locator.GetShipTransform(); return Locator.GetShipTransform();
} }
return QSBPlayerManager.GetPlayer(id).Body.transform; return QSBPlayerManager.GetPlayer(id).Body.transform;
} }
} }

View File

@ -6,21 +6,21 @@ namespace QSB.Anglerfish.Events
{ {
public class AnglerChangeStateMessage : EnumWorldObjectMessage<AnglerfishController.AnglerState> public class AnglerChangeStateMessage : EnumWorldObjectMessage<AnglerfishController.AnglerState>
{ {
public uint targetId; public uint TargetId;
public Vector3 localDisturbancePos; public Vector3 LocalDisturbancePos;
public override void Deserialize(QNetworkReader reader) public override void Deserialize(QNetworkReader reader)
{ {
base.Deserialize(reader); base.Deserialize(reader);
targetId = reader.ReadUInt32(); TargetId = reader.ReadUInt32();
localDisturbancePos = reader.ReadVector3(); LocalDisturbancePos = reader.ReadVector3();
} }
public override void Serialize(QNetworkWriter writer) public override void Serialize(QNetworkWriter writer)
{ {
base.Serialize(writer); base.Serialize(writer);
writer.Write(targetId); writer.Write(TargetId);
writer.Write(localDisturbancePos); writer.Write(LocalDisturbancePos);
} }
} }
} }

View File

@ -17,12 +17,14 @@ namespace QSB.Anglerfish.Patches
public static bool GetTargetPosition(AnglerfishController __instance, ref Vector3 __result) public static bool GetTargetPosition(AnglerfishController __instance, ref Vector3 __result)
{ {
var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance); var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance);
if (qsbAngler == null || qsbAngler.transformSync == null) if (qsbAngler == null || qsbAngler.TransformSync == null)
{ {
return false; return false;
} }
__result = qsbAngler.targetTransform != null ? qsbAngler.targetTransform.position : __instance._brambleBody.transform.TransformPoint(__instance._localDisturbancePos); __result = qsbAngler.TargetTransform != null
? qsbAngler.TargetTransform.position
: __instance._brambleBody.transform.TransformPoint(__instance._localDisturbancePos);
return false; return false;
} }
@ -34,17 +36,17 @@ namespace QSB.Anglerfish.Patches
SectorDetector sectorDetector) SectorDetector sectorDetector)
{ {
var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance); var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance);
if (qsbAngler == null || qsbAngler.transformSync == null) if (qsbAngler == null || qsbAngler.TransformSync == null)
{ {
return false; return false;
} }
if (!(qsbAngler.targetTransform != null) || !(sectorDetector.GetAttachedOWRigidbody().transform == qsbAngler.targetTransform)) if (!(qsbAngler.TargetTransform != null) || !(sectorDetector.GetAttachedOWRigidbody().transform == qsbAngler.TargetTransform))
{ {
return false; return false;
} }
qsbAngler.targetTransform = null; qsbAngler.TargetTransform = null;
return false; return false;
} }
@ -55,7 +57,7 @@ namespace QSB.Anglerfish.Patches
public static bool UpdateState(AnglerfishController __instance) public static bool UpdateState(AnglerfishController __instance)
{ {
var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance); var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance);
if (qsbAngler == null || qsbAngler.transformSync == null) if (qsbAngler == null || qsbAngler.TransformSync == null)
{ {
return false; return false;
} }
@ -71,49 +73,54 @@ namespace QSB.Anglerfish.Patches
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler); QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
break; break;
case AnglerfishController.AnglerState.Chasing: case AnglerfishController.AnglerState.Chasing:
if (qsbAngler.targetTransform == null) if (qsbAngler.TargetTransform == null)
{ {
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler); QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
break; break;
} }
if ((qsbAngler.targetTransform.position - __instance._anglerBody.GetPosition()).sqrMagnitude <= __instance._escapeDistance * (double)__instance._escapeDistance)
if ((qsbAngler.TargetTransform.position - __instance._anglerBody.GetPosition()).sqrMagnitude <= __instance._escapeDistance * (double)__instance._escapeDistance)
{ {
break; break;
} }
qsbAngler.targetTransform = null; qsbAngler.TargetTransform = null;
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler); QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
break; break;
case AnglerfishController.AnglerState.Consuming: case AnglerfishController.AnglerState.Consuming:
if (__instance._consumeComplete) if (__instance._consumeComplete)
{ {
break; break;
} }
if (qsbAngler.targetTransform == null) if (qsbAngler.TargetTransform == null)
{ {
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler); QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
break; break;
} }
var num = Time.time - __instance._consumeStartTime; var num = Time.time - __instance._consumeStartTime;
if (qsbAngler.targetTransform.CompareTag("Player") && num > (double)__instance._consumeDeathDelay) if (qsbAngler.TargetTransform.CompareTag("Player") && num > (double)__instance._consumeDeathDelay)
{ {
Locator.GetDeathManager().KillPlayer(DeathType.Digestion); Locator.GetDeathManager().KillPlayer(DeathType.Digestion);
__instance._consumeComplete = true; __instance._consumeComplete = true;
break; break;
} }
if (!qsbAngler.targetTransform.CompareTag("Ship"))
if (!qsbAngler.TargetTransform.CompareTag("Ship"))
{ {
break; break;
} }
if (num > (double)__instance._consumeShipCrushDelay) if (num > (double)__instance._consumeShipCrushDelay)
{ {
qsbAngler.targetTransform.GetComponentInChildren<ShipDamageController>().TriggerSystemFailure(); qsbAngler.TargetTransform.GetComponentInChildren<ShipDamageController>().TriggerSystemFailure();
} }
if (num <= (double)__instance._consumeDeathDelay) if (num <= (double)__instance._consumeDeathDelay)
@ -128,6 +135,7 @@ namespace QSB.Anglerfish.Patches
__instance._consumeComplete = true; __instance._consumeComplete = true;
break; break;
case AnglerfishController.AnglerState.Stunned: case AnglerfishController.AnglerState.Stunned:
__instance._stunTimer -= Time.deltaTime; __instance._stunTimer -= Time.deltaTime;
if (__instance._stunTimer > 0.0) if (__instance._stunTimer > 0.0)
@ -135,7 +143,7 @@ namespace QSB.Anglerfish.Patches
break; break;
} }
if (qsbAngler.targetTransform != null) if (qsbAngler.TargetTransform != null)
{ {
__instance.ChangeState(AnglerfishController.AnglerState.Chasing); __instance.ChangeState(AnglerfishController.AnglerState.Chasing);
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler); QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
@ -155,14 +163,16 @@ namespace QSB.Anglerfish.Patches
public static bool UpdateMovement(AnglerfishController __instance) public static bool UpdateMovement(AnglerfishController __instance)
{ {
var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance); var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance);
if (qsbAngler == null || qsbAngler.transformSync == null) if (qsbAngler == null || qsbAngler.TransformSync == null)
{ {
return false; return false;
} }
if (!qsbAngler.transformSync.HasAuthority)
if (!qsbAngler.TransformSync.HasAuthority)
{ {
return false; return false;
} }
qsbAngler.FixedUpdate(); qsbAngler.FixedUpdate();
if (__instance._anglerBody.GetVelocity().sqrMagnitude > (double)Mathf.Pow(__instance._chaseSpeed * 1.5f, 2f)) if (__instance._anglerBody.GetVelocity().sqrMagnitude > (double)Mathf.Pow(__instance._chaseSpeed * 1.5f, 2f))
@ -175,6 +185,7 @@ namespace QSB.Anglerfish.Patches
case AnglerfishController.AnglerState.Lurking: case AnglerfishController.AnglerState.Lurking:
__instance.ApplyDrag(1f); __instance.ApplyDrag(1f);
break; break;
case AnglerfishController.AnglerState.Investigating: case AnglerfishController.AnglerState.Investigating:
var targetPos = __instance._brambleBody.transform.TransformPoint(__instance._localDisturbancePos); var targetPos = __instance._brambleBody.transform.TransformPoint(__instance._localDisturbancePos);
__instance.RotateTowardsTarget(targetPos, __instance._turnSpeed, __instance._turnSpeed); __instance.RotateTowardsTarget(targetPos, __instance._turnSpeed, __instance._turnSpeed);
@ -185,10 +196,11 @@ namespace QSB.Anglerfish.Patches
__instance.MoveTowardsTarget(targetPos, __instance._investigateSpeed, __instance._acceleration); __instance.MoveTowardsTarget(targetPos, __instance._investigateSpeed, __instance._acceleration);
break; break;
case AnglerfishController.AnglerState.Chasing: case AnglerfishController.AnglerState.Chasing:
var velocity = qsbAngler.TargetVelocity; var velocity = qsbAngler.TargetVelocity;
var normalized = velocity.normalized; var normalized = velocity.normalized;
var from = __instance._anglerBody.GetPosition() + __instance.transform.TransformDirection(__instance._mouthOffset) - qsbAngler.targetTransform.position; var from = __instance._anglerBody.GetPosition() + __instance.transform.TransformDirection(__instance._mouthOffset) - qsbAngler.TargetTransform.position;
var magnitude1 = velocity.magnitude; var magnitude1 = velocity.magnitude;
var num1 = Vector3.Angle(from, normalized); var num1 = Vector3.Angle(from, normalized);
var a = magnitude1 * 2f; var a = magnitude1 * 2f;
@ -211,7 +223,8 @@ namespace QSB.Anglerfish.Patches
num2 = Mathf.Lerp(num4, 0.0f, num6 * num6); num2 = Mathf.Lerp(num4, 0.0f, num6 * num6);
} }
} }
__instance._targetPos = qsbAngler.targetTransform.position + normalized * num2;
__instance._targetPos = qsbAngler.TargetTransform.position + normalized * num2;
__instance.RotateTowardsTarget(__instance._targetPos, __instance._turnSpeed, __instance._quickTurnSpeed); __instance.RotateTowardsTarget(__instance._targetPos, __instance._turnSpeed, __instance._quickTurnSpeed);
if (__instance._turningInPlace) if (__instance._turningInPlace)
{ {
@ -220,9 +233,11 @@ namespace QSB.Anglerfish.Patches
__instance.MoveTowardsTarget(__instance._targetPos, __instance._chaseSpeed, __instance._acceleration); __instance.MoveTowardsTarget(__instance._targetPos, __instance._chaseSpeed, __instance._acceleration);
break; break;
case AnglerfishController.AnglerState.Consuming: case AnglerfishController.AnglerState.Consuming:
__instance.ApplyDrag(1f); __instance.ApplyDrag(1f);
break; break;
case AnglerfishController.AnglerState.Stunned: case AnglerfishController.AnglerState.Stunned:
__instance.ApplyDrag(0.5f); __instance.ApplyDrag(0.5f);
break; break;
@ -238,15 +253,17 @@ namespace QSB.Anglerfish.Patches
ImpactData impact) ImpactData impact)
{ {
var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance); var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance);
if (qsbAngler == null || qsbAngler.transformSync == null) if (qsbAngler == null || qsbAngler.TransformSync == null)
{ {
return false; return false;
} }
var attachedOwRigidbody = impact.otherCollider.GetAttachedOWRigidbody(); var attachedOwRigidbody = impact.otherCollider.GetAttachedOWRigidbody();
if ((attachedOwRigidbody.CompareTag("Player") || attachedOwRigidbody.CompareTag("Ship")) && __instance._currentState != AnglerfishController.AnglerState.Consuming && __instance._currentState != AnglerfishController.AnglerState.Stunned) if ((attachedOwRigidbody.CompareTag("Player") || attachedOwRigidbody.CompareTag("Ship"))
&& __instance._currentState != AnglerfishController.AnglerState.Consuming
&& __instance._currentState != AnglerfishController.AnglerState.Stunned)
{ {
qsbAngler.targetTransform = attachedOwRigidbody.transform; qsbAngler.TargetTransform = attachedOwRigidbody.transform;
__instance.ChangeState(AnglerfishController.AnglerState.Chasing); __instance.ChangeState(AnglerfishController.AnglerState.Chasing);
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler); QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);
} }
@ -261,24 +278,25 @@ namespace QSB.Anglerfish.Patches
NoiseMaker noiseMaker) NoiseMaker noiseMaker)
{ {
var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance); var qsbAngler = QSBWorldSync.GetWorldFromUnity<QSBAngler>(__instance);
if (qsbAngler == null || qsbAngler.transformSync == null) if (qsbAngler == null || qsbAngler.TransformSync == null)
{ {
return false; return false;
} }
if (__instance._currentState == AnglerfishController.AnglerState.Consuming || __instance._currentState == AnglerfishController.AnglerState.Stunned) if (__instance._currentState == AnglerfishController.AnglerState.Consuming
|| __instance._currentState == AnglerfishController.AnglerState.Stunned)
{ {
return false; return false;
} }
if ((noiseMaker.GetNoiseOrigin() - __instance.transform.position).sqrMagnitude < __instance._pursueDistance * (double)__instance._pursueDistance) if ((noiseMaker.GetNoiseOrigin() - __instance.transform.position).sqrMagnitude < __instance._pursueDistance * (double)__instance._pursueDistance)
{ {
if (!(qsbAngler.targetTransform != noiseMaker.GetAttachedBody().transform)) if (!(qsbAngler.TargetTransform != noiseMaker.GetAttachedBody().transform))
{ {
return false; return false;
} }
qsbAngler.targetTransform = noiseMaker.GetAttachedBody().transform; qsbAngler.TargetTransform = noiseMaker.GetAttachedBody().transform;
if (__instance._currentState == AnglerfishController.AnglerState.Chasing) if (__instance._currentState == AnglerfishController.AnglerState.Chasing)
{ {
return false; return false;
@ -289,7 +307,8 @@ namespace QSB.Anglerfish.Patches
} }
else else
{ {
if (__instance._currentState != AnglerfishController.AnglerState.Lurking && __instance._currentState != AnglerfishController.AnglerState.Investigating) if (__instance._currentState != AnglerfishController.AnglerState.Lurking
&& __instance._currentState != AnglerfishController.AnglerState.Investigating)
{ {
return false; return false;
} }
@ -317,7 +336,7 @@ namespace QSB.Anglerfish.Patches
if (__instance._currentState == AnglerfishController.AnglerState.Consuming) if (__instance._currentState == AnglerfishController.AnglerState.Consuming)
{ {
if (qsbAngler.targetTransform.CompareTag("Player") || !caughtBody.CompareTag("Player")) if (qsbAngler.TargetTransform.CompareTag("Player") || !caughtBody.CompareTag("Player"))
{ {
return false; return false;
} }
@ -331,7 +350,7 @@ namespace QSB.Anglerfish.Patches
return false; return false;
} }
qsbAngler.targetTransform = caughtBody.transform; qsbAngler.TargetTransform = caughtBody.transform;
__instance._consumeStartTime = Time.time; __instance._consumeStartTime = Time.time;
__instance.ChangeState(AnglerfishController.AnglerState.Consuming); __instance.ChangeState(AnglerfishController.AnglerState.Consuming);
QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler); QSBEventManager.FireEvent(EventNames.QSBAnglerChangeState, qsbAngler);

View File

@ -10,11 +10,13 @@ namespace QSB.Anglerfish.TransformSync
{ {
public override bool IsReady => QSBCore.WorldObjectsReady; public override bool IsReady => QSBCore.WorldObjectsReady;
public override bool UseInterpolation => true; public override bool UseInterpolation => true;
protected override OWRigidbody GetRigidbody() => _qsbAngler.AttachedObject._anglerBody;
private QSBAngler _qsbAngler; private QSBAngler _qsbAngler;
private static readonly List<AnglerTransformSync> _instances = new List<AnglerTransformSync>(); private static readonly List<AnglerTransformSync> _instances = new List<AnglerTransformSync>();
protected override OWRigidbody GetRigidbody()
=> _qsbAngler.AttachedObject._anglerBody;
public override void Start() public override void Start()
{ {
_instances.Add(this); _instances.Add(this);
@ -27,18 +29,18 @@ namespace QSB.Anglerfish.TransformSync
base.OnDestroy(); base.OnDestroy();
} }
public override float GetNetworkSendInterval() => 1 / 4f; public override float GetNetworkSendInterval()
=> 1 / 4f;
protected override void Init() protected override void Init()
{ {
_qsbAngler = QSBWorldSync.GetWorldFromId<QSBAngler>(_instances.IndexOf(this)); _qsbAngler = QSBWorldSync.GetWorldFromId<QSBAngler>(_instances.IndexOf(this));
_qsbAngler.transformSync = this; _qsbAngler.TransformSync = this;
base.Init(); base.Init();
SetReferenceTransform(_qsbAngler.AttachedObject._brambleBody.transform); SetReferenceTransform(_qsbAngler.AttachedObject._brambleBody.transform);
} }
protected override void OnRenderObject() protected override void OnRenderObject()
{ {
base.OnRenderObject(); base.OnRenderObject();

View File

@ -10,7 +10,11 @@ namespace QSB.Anglerfish.WorldObjects
{ {
public class QSBAngler : WorldObject<AnglerfishController> public class QSBAngler : WorldObject<AnglerfishController>
{ {
public AnglerTransformSync transformSync; public AnglerTransformSync TransformSync;
public Transform TargetTransform;
public Vector3 TargetVelocity { get; private set; }
private Vector3 _lastTargetPosition;
public override void Init(AnglerfishController attachedObject, int id) public override void Init(AnglerfishController attachedObject, int id)
{ {
@ -27,14 +31,14 @@ namespace QSB.Anglerfish.WorldObjects
{ {
if (QSBCore.IsHost) if (QSBCore.IsHost)
{ {
QNetworkServer.Destroy(transformSync.gameObject); QNetworkServer.Destroy(TransformSync.gameObject);
} }
} }
public void TransferAuthority(uint id) public void TransferAuthority(uint id)
{ {
var conn = QNetworkServer.connections.First(x => x.GetPlayerId() == id); var conn = QNetworkServer.connections.First(x => x.GetPlayerId() == id);
var identity = transformSync.NetIdentity; var identity = TransformSync.NetIdentity;
if (identity.ClientAuthorityOwner == conn) if (identity.ClientAuthorityOwner == conn)
{ {
@ -50,19 +54,14 @@ namespace QSB.Anglerfish.WorldObjects
DebugLog.DebugWrite($"angler {ObjectId} - transferred authority to {id}"); DebugLog.DebugWrite($"angler {ObjectId} - transferred authority to {id}");
} }
public Transform targetTransform;
public Vector3 TargetVelocity { get; private set; }
private Vector3 _lastTargetPosition;
public void FixedUpdate() public void FixedUpdate()
{ {
if (targetTransform == null) if (TargetTransform == null)
{ {
return; return;
} }
TargetVelocity = targetTransform.position - _lastTargetPosition; TargetVelocity = TargetTransform.position - _lastTargetPosition;
_lastTargetPosition = targetTransform.position; _lastTargetPosition = TargetTransform.position;
} }
} }
} }