//Called on fixedupdate
    public override void PlayerUpdate(PlyMoveInput input, float dt)
    {
        if (grounded)
        {
            if (GetButtonDown(input.bts[JumpBt]))
            {
                AddGravitySelf(-PlyGravity.gravNorm * 2.5f * mvSpd);
                lastDir = input.dir;
            }
            else if (GetButtonDown(input.bts[DashBt]))
            {
                AddImpulseSelf(input.dir.normalized * 4 * mvSpd, 8 * mvSpd);
            }
            else
            {
                Move(input.dir * mvSpd * dt);
            }
        }
        else
        {
            Move(lastDir * mvSpd * dt);
        }

        if (input.dir != Vector3.zero)
        {
            transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(input.dir.normalized), angularSpeed * dt);
        }
    }
예제 #2
0
 void PlayerUpdate(PlyMoveInput input, float dt)
 {
     UpdateGround();
     if (grounded)
     {
         if (input.jumpBt == 1)
         {
             tempGrav += -PlyGravity.gravNorm * 2 * mvSpd;
             lastDir   = input.dir;
         }
         else if (input.dashBt == 1)
         {
             tempImpulse       += input.dir * 4 * mvSpd;
             tempImpulseDeccel += 8 * mvSpd;
         }
         else
         {
             cc.Move(input.dir * mvSpd * dt);
         }
     }
     else
     {
         cc.Move(lastDir * mvSpd * dt);
     }
 }
예제 #3
0
 public static PlyMoveInput CopyFromInput(PlyMoveInput parent)
 {
     return(new PlyMoveInput(parent.dir, parent.jumpBt, parent.dashBt, parent.skillBt, parent.dt, parent.accResDeltaPos, parent.rot, parent.deltaGrav, parent.impulseId, parent.gravId, parent.accTimeSinceUngrounded, parent.curPos, parent.state));
 }
예제 #4
0
    void LateUpdate()
    {
        if (isLocalPlayer)
        {
            if (!isServer)
            {
                if (plyMoveCorrection != Vector3.zero)
                {
                    Vector3 tempPos2 = transform.position;
                    Vector3 lerpPos  = Vector3.Lerp(Vector3.zero, plyMoveCorrection, 2 * Time.deltaTime);
                    cc.Move(lerpPos);
                    plyMoveCorrection -= transform.position - tempPos2;
                }
            }
            Vector3 curPos = transform.position;
            PlayerUpdate(myInput, Time.deltaTime);
            myInput.deltaGrav = tempGrav;
            AddGravity(tempGrav);
            AddImpulse(tempImpulse, tempImpulseDeccel, true);
            myInput.accResDeltaPos = transform.position - curPos;
            myInput.rot            = transform.rotation;
            myInput.curPos         = transform.position;
            myInput.state          = state;
            if (isServer)
            {
            }
            else
            {
                if (sameInput)
                {
                    if (CheckInput2())
                    {
                        int last = inputs.Count - 1;
                        inputs [last].dt             += Time.deltaTime;
                        inputs [last].accResDeltaPos += myInput.accResDeltaPos;
                        inputs [last].rot             = myInput.rot;
                        inputs [last].curPos          = myInput.curPos;
                    }
                    else
                    {
                        sameInput = false;
                    }
                }
                if (!sameInput)
                {
                    inputs.Add(PlyMoveInput.CopyFromInput(myInput));
                    SetPrevInput();
                    SetPrevInput2();
                }
            }
        }
        else
        {
            if (isServer)
            {
            }
        }


        UpdateImpulse();
        UpdateGravity();          //gravity update done very last to respect latency
    }
예제 #5
0
 void PlayerUpdate(PlyMoveInput input)
 {
     PlayerUpdate(input, input.dt);
 }