/// <summary> /// 라운드가 넘어갈경우나 처음 시작할떄 초기화 해주어야할 변수 /// </summary> public void ResetPlayerVar(byte num, int hp, System.Numerics.Vector3[] p, float[] yRot) { //클라이언트 플레이어 오브젝트 체력 설정 for (int i = 0; i < 2; i++) { var tmpP = playerList[i]; tmpP.transform.position = TotalUtility.ToUnityVectorChange(p[i]); tmpP.transform.eulerAngles = new Vector3(0, yRot[i], 0); if (tmpP.clientCheck) { tmpP.cam.yRot = yRot[i]; tmpP.cam.xRot = 0; } if (tmpP.zoomState) { tmpP.weaponManagerSc.ZoomChange(tmpP.zoomState = false); } tmpP.isAlive = true; tmpP.animSc.anim.SetBool("Alive", tmpP.isAlive); } //Send NetworkManager.Instance.SendPacket(new Player_Ready(clientPlayerNum), NetworkManager.Protocol.TCP); }
/// <summary> /// 인게임에서 조준(총의 위치와 카메라 위치 변경)Zoom (UI로 넘기는게 좋을거같다) /// </summary> //public void ZoomUIFunc(bool zoomStateValue) //{ // //카메라 포지션변경 // //cam.GetComponent<CameraManager>().ZoomSetCamPos(zoomStateValue); // //AimImage 변경 // aimImageStartPosValue = zoomStateValue ? 0 : 10f; // foreach (var a in aimImage) // a.transform.localPosition = new Vector3(aimImageStartPosValue, 0f, 0f); //} /// <summary> /// when Shoot, Rebound Image Pos Increas /// </summary> //public void ReboundAimImage() //{ // foreach (var a in aimImage) // { // //25이상 더이상 안벌어지도록 // if (a.localPosition.x >= 30) // { // a.localPosition = Vector3.right * 30f; // ReboundValue = aimImage[0].localPosition.x; // return; // } // //Aim 이동 // a.transform.localPosition = a.transform.localPosition + (Vector3.right * myPlayer.weaponManagerSc.currentUsingWeapon.reboundIntensity); // //a.Translate(a.transform.right * myPlayer.weaponManagerSc.currentUsingWeapon.reboundIntensity); // ReboundValue = aimImage[0].localPosition.x; // } //} /// <summary> /// Return Aim Image /// </summary> //private void ReturnAimImage() //{ // if (aimImage[0].localPosition.x.Equals(aimImageStartPosValue)) // return; // if (myPlayer == null) // return; // foreach (var a in aimImage) // { // a.localPosition = Vector3.Slerp(a.transform.localPosition, // new Vector3(aimImageStartPosValue, 0, 0), Time.deltaTime * myPlayer.weaponManagerSc.currentUsingWeapon.reboundRecoveryTime); // } // ReboundValue = aimImage[0].localPosition.x; //} /// <summary> /// Cam Rebound /// </summary> public void ReboundPlayerRotation() { var reboundValue = myPlayer.weaponManagerSc.currentUsingWeapon.reboundIntensity; cam.yRot += Random.Range(-reboundValue * 0.1f, reboundValue * 0.1f); cam.xRot += (reboundValue * 0.05f); NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); }
/// <summary> /// /// </summary> /// <param name="clientNum"></param> /// <param name="pos"></param> /// <param name="dir"></param> public override void ShootSendServer(byte clientNum, Vector3 pos, Vector3 dir) { base.ShootSendServer(clientNum, pos, dir); if (shootPeriodCount > ShootPeriod) { NetworkManager.Instance.SendPacket(new Use_Item(clientNum, TotalUtility.ToNumericVectorChange(pos), TotalUtility.ToNumericVectorChange(dir)), NetworkManager.Protocol.TCP); shootPeriodCount = 0; } shootPeriodCount++; }
/// <summary> /// 서버로 전송 /// </summary> /// <param name="clientNum"></param> /// <param name="pos"></param> /// <param name="dir"></param> public override void ShootSendServer(byte clientNum, Vector3 pos, Vector3 dir) { base.ShootSendServer(clientNum, pos, dir); if (!weaponState) { return; } //서버에서 한번만 보내도록 설정 weaponState = false; NetworkManager.Instance.SendPacket(new Use_Item(clientNum, TotalUtility.ToNumericVectorChange(pos), TotalUtility.ToNumericVectorChange(dir)), NetworkManager.Protocol.TCP); }
private void OnTriggerEnter(Collider other) { if (!myPlayer.clientCheck) { return; } if (other.transform.tag == "Ground") { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(myPlayer.lookTarget), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Grounded(myPlayer.clientNum, true), NetworkManager.Protocol.TCP); } }
/// <summary> /// Send KeyData /// </summary> protected void SendKeyData() { //Move Direction Key if (Input.GetKeyDown(KeyList[(int)Key.W])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.W, true), NetworkManager.Protocol.TCP); } if (Input.GetKeyDown(KeyList[(int)Key.S])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.S, true), NetworkManager.Protocol.TCP); } if (Input.GetKeyDown(KeyList[(int)Key.A])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.A, true), NetworkManager.Protocol.TCP); } if (Input.GetKeyDown(KeyList[(int)Key.D])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.D, true), NetworkManager.Protocol.TCP); } if (Input.GetKeyUp(KeyList[(int)Key.W])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.W, false), NetworkManager.Protocol.TCP); } if (Input.GetKeyUp(KeyList[(int)Key.S])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.S, false), NetworkManager.Protocol.TCP); } if (Input.GetKeyUp(KeyList[(int)Key.A])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.A, false), NetworkManager.Protocol.TCP); } if (Input.GetKeyUp(KeyList[(int)Key.D])) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.D, false), NetworkManager.Protocol.TCP); } //Run if (Input.GetKeyDown(KeyList[(int)Key.LeftShift])) { //if (myPlayer.currentActionState == (ActionState.None) || myPlayer.currentActionState == ActionState.Walk) NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.LeftShift, true), NetworkManager.Protocol.TCP); } if (Input.GetKeyUp(KeyList[(int)Key.LeftShift])) { NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.LeftShift, false), NetworkManager.Protocol.TCP); } //Seat if (Input.GetKeyDown(KeyList[(int)Key.LeftControl])) { //if (myPlayer.currentActionState == (ActionState.None)) NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.LeftControl, true), NetworkManager.Protocol.TCP); } if (Input.GetKeyUp(KeyList[(int)Key.LeftControl])) { //if (myPlayer.currentActionState == (ActionState.Seat)) NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.LeftControl, false), NetworkManager.Protocol.TCP); } //Creep if (Input.GetKeyDown(KeyList[(int)Key.Z])) { //if (myPlayer.currentActionState == (ActionState.None)) NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.Z, true), NetworkManager.Protocol.TCP); } if (Input.GetKeyUp(KeyList[(int)Key.Z])) { //if (myPlayer.currentActionState == (ActionState.SlowWalk)) NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.Z, false), NetworkManager.Protocol.TCP); } //Jump if (Input.GetKeyDown(KeyList[(int)Key.Space])) { if (myPlayer.IsGroundedFromServer) { NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.Space, true), NetworkManager.Protocol.TCP); } } //장전중일땐 안되도록 설정 if (!myPlayer.weaponManagerSc.ReloadingAnim) { //WeaponSwap if (Input.GetKeyDown(KeyList[(int)Key.Alpha1])) { //이미 장착한 번호와 같은경우 전송 안되도록 if (myPlayer.weaponManagerSc.currentUsingWeapon.equipWeaponNum != 0) { NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.Alpha1, true), NetworkManager.Protocol.TCP); } } else if (Input.GetKeyDown(KeyList[(int)Key.Alpha2])) { if (myPlayer.weaponManagerSc.currentUsingWeapon.equipWeaponNum != 1) { NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.Alpha2, true), NetworkManager.Protocol.TCP); } } else if (Input.GetKeyDown(KeyList[(int)Key.Alpha3])) { if (myPlayer.weaponManagerSc.currentUsingWeapon.equipWeaponNum != 2) { //해당 dictionary가 존재하지 않으면 하지 않음(수류탄을 던졌을경우) if (myPlayer.weaponManagerSc.EquipweaponDic[2].weaponState.Equals(true)) { NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.Alpha3, true), NetworkManager.Protocol.TCP); } } } //음식은 애니매이션 구현이 안되어있어서 아예 안건드는게 좋을듯 //else if (Input.GetKeyDown(KeyList[(int)Key.Alpha4])) //{ // if (myPlayer.weaponManagerSc.currentUsingWeapon.equipWeaponNum != 3) // { // //해당 dictionary가 존재하지 않으면 하지 않음(수류탄을 던졌을경우) // if (myPlayer.weaponManagerSc.EquipweaponDic[3].weaponState.Equals(true)) // NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.Alpha4, true), NetworkManager.Protocol.TCP); // } //} //Shooting if (Input.GetMouseButton(0)) { myPlayer.weaponManagerSc.SendUseItemToServer(); } //Zoom if (Input.GetMouseButtonDown(1)) { if (myPlayer.weaponManagerSc.currentUsingWeapon.zoomPossible) { NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.RClick, myPlayer.zoomState.Equals(true) ? false : true), NetworkManager.Protocol.TCP); } } if (Input.GetKeyDown(KeyList[(int)Key.R])) { if (myPlayer.weaponManagerSc.currentUsingWeapon.type.Equals(ItemType.WEAPON)) { if (myPlayer.weaponManagerSc.currentUsingWeapon.GetComponent <ARBase>().currentItemValue < 30) { NetworkManager.Instance.SendPacket(new Player_Input(myPlayer.clientNum, Key.R, true), NetworkManager.Protocol.TCP); } } } } //Turning Send if (Mathf.Abs(Input.GetAxis("Mouse X")) > 0 || Mathf.Abs(Input.GetAxis("Mouse Y")) > 0) { NetworkManager.Instance.SendPacket(new Player_Info(myPlayer.clientNum, TotalUtility.ToNumericVectorChange(cam.target), TotalUtility.ToNumericVectorChange(myPlayer.transform.position)), NetworkManager.Protocol.UDP); } }
private void ProcessPacket(IPacket p, NetworkManager.Protocol pt) { if (pt == NetworkManager.Protocol.TCP) { if (p is Player_Init) { //받았을때 클라이언트 생성(아군 적군 모두) var s = (Player_Init)p; CreatePlayerObject(s.clientIdx, s.hp, TotalUtility.ToUnityVectorChange(s.startPos), s.startLook, s.assign, s.character, s.weapon1, s.weapon2, s.item); if (s.assign) { NetworkManager.Instance.SendPacket(new Player_Ready(clientPlayerNum), NetworkManager.Protocol.TCP); } } else if (p is Player_Reset) { var s = (Player_Reset)p; ResetPlayerVar(s.clientIdx, s.hp, s.startPos, s.LookPosYrot); } //else if (p is Round_Start) //{ // var s = (Round_Start)p; //} //else if (p is Round_End) //{ // var s = (Round_End)p; //} else if (p is Match_End) { var s = (Match_End)p; NetworkManager.Instance.RecvHandler -= ProcessPacket; } else if (p is Round_Timer) { //Timer countdown == 0 : 타이머를 시작 1 : 타이머 종료 var s = (Round_Timer)p; } else if (p is Player_Input) { //Player key 관련 처리 var s = (Player_Input)p; if (playerList[s.clientIdx] == null) { return; } playerList[s.clientIdx].KeyDownClient(s.key, s.down); } else if (p is Player_Grounded) { //player isGrounded 처리 var s = (Player_Grounded)p; if (playerList[s.clientIdx] == null) { return; } playerList[s.clientIdx].IsGroundedFromServer = s.state; } else if (p is Use_Item) { //폭탄 던지기 var s = (Use_Item)p; if (playerList[s.clientIdx] == null) { return; } if (playerList[s.clientIdx] != null) { playerList[s.clientIdx].weaponManagerSc.UseItem(s.clientIdx, TotalUtility.ToUnityVectorChange(s.pos), TotalUtility.ToUnityVectorChange(s.rot)); } } else if (p is Throw_BombAnim) { var s = (Throw_BombAnim)p; if (playerList[s.clientIdx] != null) { playerList[s.clientIdx].animSc.anim.SetTrigger("Shoot"); } } else if (p is Player_Sync) { //체력 설정 var s = (Player_Sync)p; } else if (p is Player_Recover) { var s = (Player_Recover)p; if (playerList[s.clientIdx] != null) { playerList[s.clientIdx].weaponManagerSc.UseItem(s.clientIdx, Vector3.zero, Vector3.zero); } } else if (p is Player_Dead) { //주금 var s = (Player_Dead)p; if (playerList[s.clientIdx] != null) { playerList[s.clientIdx].Death(); } } else if (p is Round_Result) { var s = (Round_Result)p; Debug.Log("Round 결과 패킷 받음"); } else if (p is Match_End) { } //총알 생성 //폭탄 던지기 //체력회복 //주금 //데미지받는부분 //else if() } else { if (p is Player_Info) { //싱크(적편에게만 적용) var s = (Player_Info)p; if (playerList[s.clientIdx] == null) { return; } if (clientPlayerNum != s.clientIdx) { var i = s.clientIdx; //Position if (playerList[i] != null) { playerList[i].transform.position = TotalUtility.ToUnityVectorChange(s.pos); playerList[i].lookTarget = TotalUtility.ToUnityVectorChange(s.lookTarget); } } } } }