Пример #1
0
 private void SmoothClientPosition_UpdateVisuals(ENetworkSmoothingMode smoothingMode)
 {
     if (smoothingMode == ENetworkSmoothingMode.Linear)
     {
         BotState = BotState.Moving;
         animat.SetInteger("condition", 1);
         transform.position = offsetPostion;
         transform.rotation = offsetRotation;
     }
 }
Пример #2
0
    private void SmoothClientPosition_Interpolate(ENetworkSmoothingMode smoothingMode)
    {
        if (smoothingMode == ENetworkSmoothingMode.Linear)
        {
            float       LerpPercent = 0f;
            const float LerpLimit   = 1.15f;
            CurrentStartPhotonTime += Time.deltaTime;
            double LastCorrectionDelta = ServerLastMove.timestamp - InterpolationFrameStartTime;

            //if time big enogh
            double RemainingTime     = ServerLastMove.timestamp - CurrentStartPhotonTime;
            double CurrentSmoothTime = LastCorrectionDelta - RemainingTime;

            LerpPercent = (float)(CurrentSmoothTime / LastCorrectionDelta);

            //LerpPercent = Mathf.Clamp((float)toClamp, 0.0f, LerpLimit);

            if (LerpPercent >= 0.98f)
            {
                bNetworkSmoothingComplete = true;
                CurrentStartPhotonTime    = ServerLastMove.timestamp;
                if (LerpPercent < LerpLimit)
                {
                    offsetPostion = Vector3.LerpUnclamped(orginaloffsetPostion, ServerLastMove.getPostion(), LerpPercent);
                }
                else
                {
                    offsetPostion = ServerLastMove.getPostion();
                }
                offsetRotation = targetoffsetRotation;
            }
            else
            {
                offsetPostion  = Vector3.Lerp(orginaloffsetPostion, ServerLastMove.getPostion(), LerpPercent);
                offsetRotation = Quaternion.Slerp(orginaloffsetRotation, targetoffsetRotation, LerpPercent);
            }

            if (Vector3.Distance(transform.position, offsetPostion) > 0.3)
            {
                Vector3 correctedOffset = Vector3.ClampMagnitude((offsetPostion - transform.position), 0.15f);
                Debug.Log(" OFFSET TO BIG " + (offsetPostion - transform.position) + " CORRECTING " + correctedOffset);
                offsetPostion = transform.position + correctedOffset;
            }
        }
    }
Пример #3
0
    private void SmoothClientPosition_Interpolate(SavedMove ClientData, SavedMove ClientDataNext, ENetworkSmoothingMode smoothingMode)
    {
        //if (ClientDataNext.shooting)
        //{
        //    Shooting();
        //}

        //if (ClientDataNext.stand)
        //{
        //    BotState = BotState.Standing;
        //    animat.SetInteger("condition", 0);
        //    double RemainingTime = ClientDataNext.timestamp - ClientData.timestamp;
        //    double LastCorrectionDelta = ClientDataNext.timestamp - InterpolationFrameStartTime;
        //    double LerpPercent = RemainingTime / LastCorrectionDelta;
        //    transform.position = Vector3.Lerp(ClientData.getPostion(), ClientDataNext.getPostion(), (float)LerpPercent);
        //    //is this good ?
        //    // Debug.Log(botColor + " interpolating to" + ClientDataNext.timestamp + " desired postion " + ClientDataNext.getPostion() + " shooting " + ClientDataNext.shooting + " standing " + ClientDataNext.stand);
        //    interpolating = false;

        //}

        //else

        if (smoothingMode == ENetworkSmoothingMode.Linear)
        {
            //   Debug.Log(botColor + " interpolating to" + ClientDataNext.timestamp + " desired postion " + ClientDataNext.getPostion() + " shooting " + ClientDataNext.shooting + " standing " + ClientDataNext.stand);

            float       LerpPercent = 0f;
            const float LerpLimit   = 1.15f;
            CurrentStartPhotonTime += Time.deltaTime;
            // if time is right ReplicatedMovement
            double RemainingTime       = ClientDataNext.timestamp - ClientData.timestamp;
            double LastCorrectionDelta = ClientDataNext.timestamp - InterpolationFrameStartTime;
            double CurrentSmoothTime   = LastCorrectionDelta - RemainingTime;

            //  Debug.Log("TIMES server " + ServerData.timestamp + " client data " + ClientData.timestamp + " CurrentStartPhotonTime " + CurrentStartPhotonTime + " started this shiet on " + InterpolationFrameStartTime);

            double toClamp = CurrentSmoothTime / LastCorrectionDelta;

            LerpPercent = Mathf.Clamp((float)toClamp, 0.0f, LerpLimit);

            // Debug.Log("TIMES serverpack " + ServerData.timestamp + " client data " + ClientData.timestamp + " LastCorrectionDelta "+ LastCorrectionDelta+ " RemainingTime " + RemainingTime + " Percent " + LerpPercent);


            if (LerpPercent >= 1.0f - 0.001f)
            {
                interpolating          = false;
                CurrentStartPhotonTime = ClientDataNext.timestamp;
                transform.rotation     = Quaternion.Euler(ClientDataNext.getRotationAngle());
            }
            else
            {
                BotState = BotState.Moving;
                if (!ClientDataNext.shooting)
                {
                    animat.SetInteger("condition", 1);
                }

                Vector3 offset = Vector3.Lerp(Vector3.zero, orginaloffsetPostion, LerpPercent);

                Vector3 CurrentDelta = ClientData.getPostion() - ClientDataNext.getPostion();

                Vector3 finalPostion = transform.position + offset;


                //Debug.Log(" orginaloffset " + orginaloffsetPostion + "percent " + LerpPercent + " offset " + offset + " postion from " + ClientData.getPostion() + " to " + ClientDataNext.getPostion() + " delta beetween " + CurrentDelta + " postion after adding offset" + finalPostion);



                Quaternion rotationOffset = Quaternion.Lerp(orginaloffsetRotation, Quaternion.Euler(ClientDataNext.getRotationAngle()), LerpPercent);


                transform.rotation = rotationOffset;
                //transform.position = finalPostion;
                Move(offset, Time.deltaTime);
            }
        }
        else if (smoothingMode == ENetworkSmoothingMode.Exponential)
        {
        }
        else if (smoothingMode == ENetworkSmoothingMode.Replay)
        {
            float StartTime = Time.time;
            if (CurrentReplayTime >= ClientData.timestamp && CurrentReplayTime <= ClientDataNext.timestamp)
            {
                const float EPSILON = 0.01f;
                double      Delta   = ClientDataNext.timestamp - ClientData.timestamp;
                float       LerpPercent;

                if (Delta > EPSILON)
                {
                    double toClamp = (CurrentReplayTime - ClientData.timestamp) / Delta;
                    LerpPercent = Mathf.Clamp((float)toClamp, 0.0f, 1.0f);
                }
                else
                {
                    LerpPercent = 1.0f;
                }

                Vector3    Location = Vector3.Lerp(ClientData.getPostion(), ClientDataNext.getPostion(), LerpPercent);
                Quaternion rotation = Quaternion.Lerp(Quaternion.Euler(ClientData.getRotationAngle()), Quaternion.Euler(ClientDataNext.getRotationAngle()), LerpPercent); //normailzed ?

                //Debug.Log("REPLAY Time on  " + botColor + CurrentReplayTime + " location from  " + ClientData.getPostion() + "loc to" + ClientDataNext.getPostion() + " lerp " + Location + " my postion " + transform.position + " rotation " + rotation);

                transform.position = Location;
                transform.rotation = rotation;
                //PerformeMovment(ClientData, Time.deltaTime);
            }
            else
            {
                Debug.Log("REPLAY TIME NOT CAUGHT Q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
            }
            float DeltaTime = Time.time - StartTime;
            CurrentReplayTime += DeltaTime;
        }
        else
        {
        }
    }