Exemple #1
0
    public Protocol.PlayerInfo AchievePlayerInfo()
    {
        Protocol.PlayerInfo info = new Protocol.PlayerInfo();
        info.id   = id;
        info.name = nameInGame;
        info.hp   = this.healthPoint;

        info.yaw = transform.eulerAngles.y;

        Vector3 velocity = rigidBody.velocity;
        Vector3 position = transform.position;

        info.velocityX = velocity.x;
        info.velocityY = velocity.y;
        info.velocityZ = velocity.z;
        info.positionX = position.x;
        info.positionY = position.y;
        info.positionZ = position.z;

        info.weapon     = this.weaponType;
        info.invincible = this.invincible;

        GetUpperAniState(out info.upperAniState, out info.upperAniNormTime);
        GetLowerAniState(out info.lowerAniState, out info.lowerAniNormTime);

        info.walkRun       = walkRun;
        info.aimUp         = aimUp;
        info.strafeForward = strafeForward;
        info.strafeRight   = strafeRight;
        return(info);
    }
    public void ApplyRemoteInfo(Protocol.PlayerInfo info)
    {
        if (info == null)
        {
            return;
        }
        player.healthPoint = info.hp;
        Vector3 velocity = new Vector3(info.velocityX, info.velocityY, info.velocityZ);
        Vector3 position = new Vector3(info.positionX, info.positionY, info.positionZ);

        rigidBody.velocity = velocity;
        posDiff            = position - transform.position;
        float magnitude = posDiff.magnitude;

        if (magnitude > maxChaseDistance)
        {
            transform.position = transform.position + posDiff;
            posDiff            = Vector3.zero;
        }
        else
        {
            chaseVelocity = magnitude * 3;
        }
        faceYaw = info.yaw;

        if (player.weaponType != info.weapon)
        {
            player.ChangeWeapon(info.weapon);
        }
        player.invincible = info.invincible;

        tarWalkRun       = info.walkRun;
        tarAimUp         = info.aimUp;
        tarStrafeForward = info.strafeForward;
        tarStrafeRight   = info.strafeRight;

        int   curUpperAniStateHash;
        float curUpperNormTime;

        player.GetUpperAniState(out curUpperAniStateHash, out curUpperNormTime);

        int   curLowerAniStateHash;
        float curLowerNormTime;

        player.GetLowerAniState(out curLowerAniStateHash, out curLowerNormTime);

        if (info.upperAniState != curUpperAniStateHash)
        {
            player.SetUpperAniState(info.upperAniState, true, 0.1f, 0);
            if (info.upperAniState == Player.StateNameHash.roll)
            {
                AudioClip clip = (AudioClip)Resources.Load(StringAssets.soundPath + "roll", typeof(AudioClip));
                player.audioSource.PlayOneShot(clip, 1f);
            }
        }
        else
        {
            float diffTime = Mathf.Abs(info.upperAniNormTime - curUpperNormTime);
            if (diffTime > 0.15f)
            {
                player.SetUpperAniState(info.upperAniState, true, 0.1f, info.upperAniNormTime);
            }
        }

        if (info.lowerAniState != curLowerAniStateHash)
        {
            if (curLowerAniStateHash == Player.StateNameHash.fall)
            {
                AudioClip clip = (AudioClip)Resources.Load(StringAssets.soundPath + "foot2", typeof(AudioClip));
                player.audioSource.PlayOneShot(clip, 1f);
            }

            player.SetLowerAniState(info.lowerAniState, true, 0.1f, 0);
        }
        else
        {
            float diffTime = Mathf.Abs(info.lowerAniNormTime - curLowerNormTime);
            if (diffTime > 0.15f)
            {
                player.SetLowerAniState(info.lowerAniState, true, 0.1f, info.lowerAniNormTime);
            }
        }
    }