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);
 }