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