public void OnPositionSnap(PositionSmoothingSnapEvent e, RemoteSmoothTankNode node) { Transform rigidbodyTransform = node.rigidbody.RigidbodyTransform; node.remoteTankSmoother.prevVisualPosition = rigidbodyTransform.position; node.remoteTankSmoother.prevVisualRotation = rigidbodyTransform.rotation; Transform transform = node.tankVisualRoot.transform; transform.SetPositionSafe(rigidbodyTransform.position); transform.SetRotationSafe(rigidbodyTransform.rotation); node.kalmanFilter.kalmanFilterPosition.Reset(rigidbodyTransform.position); }
public void OnUpdate(TimeUpdateEvent e, RemoteSmoothTankNode node) { float deltaTime = e.DeltaTime; KalmanFilterComponent kalmanFilter = node.kalmanFilter; RemoteTankSmootherComponent remoteTankSmoother = node.remoteTankSmoother; Rigidbody rigidbody = node.rigidbody.Rigidbody; Transform transform = node.tankVisualRoot.transform; Transform rigidbodyTransform = node.rigidbody.RigidbodyTransform; this.KalmanFPSIndependentCorrect(kalmanFilter, rigidbodyTransform.position, deltaTime); float smoothingCoeff = deltaTime * remoteTankSmoother.smoothingCoeff; remoteTankSmoother.prevVisualPosition = this.SmoothPositionValue(remoteTankSmoother.prevVisualPosition, rigidbody.velocity, deltaTime, kalmanFilter.kalmanFilterPosition.State, smoothingCoeff); remoteTankSmoother.prevVisualRotation = this.SmoothRotationValue(remoteTankSmoother.prevVisualRotation, rigidbody.angularVelocity, deltaTime, rigidbodyTransform.rotation, smoothingCoeff); if (PhysicsUtil.IsValidVector3(remoteTankSmoother.prevVisualPosition) && PhysicsUtil.IsValidQuaternion(remoteTankSmoother.prevVisualRotation)) { transform.position = remoteTankSmoother.prevVisualPosition; transform.rotation = remoteTankSmoother.prevVisualRotation; } }
public void SnapOnMovementInit(NodeAddedEvent e, RemoteSmoothTankNode node) { base.ScheduleEvent <PositionSmoothingSnapEvent>(node); }