public void DecHP() { // Hurt self this.Hp--; if (this.Hp <= 0) { if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { // make self dead and destroy later MakeDead(); } else { this.Hp = 1; // Dead event sync PlayerEventItem deadEvent = new PlayerEventItem(); deadEvent.cbTeamType = (byte)TeamType; deadEvent.wChairId = (ushort)ChairID; deadEvent.cbAIId = AIId; deadEvent.cbEventKind = (byte)PlayerEventKind.DeadByDecHp; //killer deadEvent.nCustomData0 = (Int32)TeamType; deadEvent.nCustomData1 = (Int32)ChairID; deadEvent.nCustomData2 = (Int32)AIId; GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent); } } }
public void PickupObject(GameObject objToPick, Vector3 pickupPos) { if (gameObject.GetComponent <PlayerBase>().TeamType == PlayerTeam.PlayerTeamType.HideTeam) //躲藏的玩家无法执行找操作 { return; } else { if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu) { byte Gamestate = CServerItem.get().GetGameStatus(); if (Gamestate != SocketDefines.GAME_STATUS_PLAY) { return; } } else if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { if (GameManager.s_singleGameStatus != SocketDefines.GAME_STATUS_PLAY) { return; } } } if (objToPick == null || this.Hp <= 0) { return; } if (this.IsAI) { //AI没有用射线检测,也就没有距离判断,所以这里要加入 Vector3 distToPick = objToPick.transform.position - this.transform.position; if (distToPick.magnitude > ControlManager.s_MaxTouchCheckDistance) { Debug.LogError("-----------距离过远!!!!!" + distToPick.magnitude + " " + objToPick.transform.position + " " + this.transform.position); //if (objToPick.tag == "Hide" || objToPick.tag == "NormalFurniture") //objToPick.name { UIManager.GetInstance().ShowPickupTooFarText(); return; } } } if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu) { // Pick event sync PlayerEventItem pickEvent = new PlayerEventItem(); pickEvent.cbTeamType = (byte)TeamType; pickEvent.wChairId = (ushort)ChairID; pickEvent.cbAIId = (byte)AIId; pickEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.Pick; GameObjectsManager.GetInstance().PlayerEventList.Add(pickEvent); } else { if (IsAI || !ControlManager.isPerson_1st) //只有第三人称才有拾取动画 { if (IsLocalHuman()) { EnableModelDisplay(); } PlayPickupAnim(); //if (_avatarAnimator != null) //{ // _avatarAnimator.SetBool("Pickup_b", true); //} } } PlayerBase pickedPlayer = null; string strObjToPickTag = null; if (this.IsAI) { //this是AI时,传的objToPick是根节点(PlayerBase都在根节点) pickedPlayer = objToPick.GetComponent <PlayerBase>(); if (pickedPlayer == null) { //objToPick是场景中的物体,不是躲藏者 strObjToPickTag = objToPick.tag; } else { Transform model = pickedPlayer.transform.FindChild("Model"); if (model != null) { strObjToPickTag = model.tag; //tag在model节点 } else { Debug.LogError("PickupObject IsAI: model==null"); } } } else { //this不是AI时,objToPick如果是躲藏者,传的是Model子节点,否则传的也是根节点 pickedPlayer = objToPick.transform.parent.GetComponent <PlayerBase>(); if (pickedPlayer == null) { //objToPick是场景中的物体,不是躲藏者 strObjToPickTag = objToPick.tag; } else { strObjToPickTag = objToPick.tag; } } if (strObjToPickTag == "Hide" || (strObjToPickTag == "LocalHuman" && pickedPlayer != null && pickedPlayer.TeamType == PlayerTeam.PlayerTeamType.HideTeam)) //objToPick.name { ObjNamePicked = pickedPlayer.gameObject.name; Debug.Log(gameObject.name + " touched Hide: " + ObjNamePicked); if (IsLocalHuman()) { Debug.Log("I'm touched Hide: " + ObjNamePicked); } // Check if objToPick is alive if (pickedPlayer != null) { if (pickedPlayer.IsDead()) { Debug.Log("It was already dead!"); } else { if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { if (IsAI && pickedPlayer.m_isStealth == 1) //AI警察不点隐身的躲藏者 { return; } //击杀信息 if (gameObject.GetComponent <PlayerBase>().IsAI) { //String[] str = gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); UIManager.GetInstance().ShowMiddleTips(gameObject.name + " 找到了: " + pickedPlayer.gameObject.name); } else { String[] str = GlobalUserInfo.getNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); //String[] pickedStr = pickedPlayer.gameObject.name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); UIManager.GetInstance().ShowMiddleTips(str[0] + " 找到了: " + pickedPlayer.gameObject.name); } // Heal self AddHP(); if (m_hnGameManager != null && IsLocalHuman()) //本地玩家找到躲藏者提示 { m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_HIDE_BEFOUNDED); } // make pickedPlayer dead and destroy later pickedPlayer.MakeDead(); //if (!pickedPlayer.IsAI) //{ // PlayerChairIDOfPickedDead = pickedPlayer.ChairID; //} } else { //Debug.LogWarning("+++++++++++++++++ " + pickedPlayer.m_isStealth + " " + IsAI); if (pickedPlayer.m_isStealth == 1 && IsAI) //AI警察不点隐身的躲藏者 { //Debug.LogWarning("----------玩家隐身中"); return; } // Dead event sync PlayerEventItem deadEvent = new PlayerEventItem(); deadEvent.cbTeamType = (byte)pickedPlayer.TeamType; deadEvent.wChairId = (ushort)pickedPlayer.ChairID; deadEvent.cbAIId = pickedPlayer.AIId; deadEvent.cbEventKind = (byte)PlayerEventKind.DeadByPicked; //killer deadEvent.nCustomData0 = (Int32)this.TeamType; deadEvent.nCustomData1 = (Int32)this.ChairID; deadEvent.nCustomData2 = (Int32)this.AIId; GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent); } //警察找到躲藏者加分 GameScore += 50; } } } else if (strObjToPickTag == "NormalFurniture") { ObjNamePicked = objToPick.transform.parent.name; Debug.Log("touched normal furniture: " + ObjNamePicked); UIManager.GetInstance().ShowPickupWrongUI(pickupPos); //hit.point if (m_hnGameManager != null && IsLocalHuman()) //本地玩家点击错误物体提示 { m_hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_EFFECT_PickObj); } if (IsLocalHuman()) { UIManager.GetInstance().ShowMiddleTips("该物品不是玩家!"); } if (UIManager.TimeLeft <= 45) //剩余时间小于45秒时,警察无敌 { return; } // Hurt self if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { DecHP(); } else { PlayerEventItem decHpEvent = new PlayerEventItem(); decHpEvent.cbTeamType = (byte)this.TeamType; decHpEvent.wChairId = (ushort)this.ChairID; decHpEvent.cbAIId = (byte)this.AIId; decHpEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.DecHp; GameObjectsManager.GetInstance().PlayerEventList.Add(decHpEvent); } } else if (strObjToPickTag == "Tagger") { ObjNamePicked = pickedPlayer.gameObject.name; Debug.Log("touched Tagger: " + ObjNamePicked); } else { Debug.LogError("PickupObject: incorrect objToPickTag=" + strObjToPickTag); } //判断是否团灭 int taggerCount = 0; int hideCount = 0; for (PlayerTeam.PlayerTeamType teamType = PlayerTeam.PlayerTeamType.TaggerTeam; teamType < PlayerTeam.PlayerTeamType.MaxTeamNum; teamType++) { PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType); if (team == null) { continue; } for (int i = 0; i < team.GetPlayerNum(); i++) { PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(teamType, i); if (playerBase != null && playerBase.Hp != 0) { if (teamType == PlayerTeam.PlayerTeamType.TaggerTeam) { taggerCount++; } else if (teamType == PlayerTeam.PlayerTeamType.HideTeam) { hideCount++; } } } } if (taggerCount == 0 || hideCount == 0) { if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { if (UIManager.GetInstance() != null) { UIManager.GetInstance().ShowWinOrLose(); } m_hnGameManager.StopSingleGame(); m_hnGameManager.PlayAgainSingleGame(); } } }
//void Update() //{ //} private void OnCollisionEnter(Collision collision) { //if (collision.collider.tag == "Hide" || collision.collider.tag == "NormalFurniture") { Debug.Log("---------Boom!!!!!!!!!!!!"); PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam); Human localHuam = GameObjectsManager.GetInstance().GetLocalHuman(); if (team != null) { for (int i = 0; i < team.GetPlayerNum(); i++) { PlayerBase playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, i); if (playerBase != null) { if (Math.Abs(this.gameObject.transform.position.x - playerBase.gameObject.transform.position.x) < 5 && Math.Abs(this.gameObject.transform.position.y - playerBase.gameObject.transform.position.y) < 5 && Math.Abs(this.gameObject.transform.position.z - playerBase.gameObject.transform.position.z) < 5) { if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { playerBase.MakeDead(); //playerBase.PlayerChairIDOfPickedDead = playerBase.ChairID; //Debug.Log(temp.name + "击杀了: " + playerBase.gameObject.name); var kernel = (GameScene)CServerItem.get().GetClientKernelSink(); if (kernel != null) { String[] str = kernel.getPlayerByChairID(HNGameManager.m_iLocalChairID).GetNickName().Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); UIManager.GetInstance().ShowMiddleTips(str[0] + "击杀了: " + playerBase.gameObject.name); localHuam.AddHP(); } } else { // Dead event sync PlayerEventItem deadEvent = new PlayerEventItem(); deadEvent.cbTeamType = (byte)playerBase.TeamType; deadEvent.wChairId = (ushort)playerBase.ChairID; deadEvent.cbAIId = playerBase.AIId; deadEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.DeadByBoom; //killer deadEvent.nCustomData0 = (Int32)localHuam.TeamType; deadEvent.nCustomData1 = (Int32)localHuam.ChairID; deadEvent.nCustomData2 = (Int32)localHuam.AIId; GameObjectsManager.GetInstance().PlayerEventList.Add(deadEvent); } } } } } //炸弹特效 GameObject loadObj = Resources.Load("Player/Prefabs/Invenrtory/FX Comic Explosion 1 Large BOOM") as GameObject; GameObject BoomFX = Instantiate(loadObj); BoomFX.transform.position = gameObject.transform.position; Destroy(this.gameObject); if (hnGameManager != null) { hnGameManager.PlaySoundEffect(-1, (int)AudioManager.Sound_Effect_Defines.SOUND_EFFECT_Boom); } // Boom event sync PlayerEventItem boomEvent = new PlayerEventItem(); boomEvent.cbTeamType = (byte)GameObjectsManager.s_LocalHumanTeamType; boomEvent.wChairId = (ushort)HNGameManager.m_iLocalChairID; boomEvent.cbAIId = HNMJ_Defines.INVALID_AI_ID; boomEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.Boom; boomEvent.nCustomData0 = (Int32)gameObject.transform.position.x; boomEvent.nCustomData1 = (Int32)gameObject.transform.position.y; boomEvent.nCustomData2 = (Int32)gameObject.transform.position.z; GameObjectsManager.GetInstance().PlayerEventList.Add(boomEvent); } }
//检测道具使用 private void CheckInventoryUse() { Human localHuman = null; if (GameObjectsManager.GetInstance() != null) { localHuman = GameObjectsManager.GetInstance().GetLocalHuman(); } if (localHuman != null && localHuman.TeamType == PlayerTeam.PlayerTeamType.TaggerTeam) { if (ListInventory.Count != 0 && ListInventory != null) { for (int i = 0; i < ListInventory.Count; i++) { if (ListInventory[i].obj != null && !ListInventory[i].bUsed) { String[] str = ListInventory[i].obj.name.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries); switch (str[1]) { case "Search": if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 && Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 && !ListInventory[i].bTaked) { PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam); PlayerBase playerBase = null; if (team.GetPlayerNum() != 0 && localHuman.Hp != 0) { int count = 0; while (true) { int index = (int)(MersenneTwister.MT19937.Int63() % team.GetPlayerNum()); playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, index); if (playerBase.Hp > 0) { break; } if (count > 50) //防止没有存活导致死循环 { playerBase = null; break; } count++; } if (playerBase != null) { InventoryObjItem temp = ListInventory[i]; temp.bTaked = true; ListInventory[i] = temp; if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { InventoryRemove(i); UIManager.GetInstance().ShowMiddleTips("有一个玩家变成了" + playerBase.gameObject.name); } if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu) { // GetInventory event sync PlayerEventItem getInventoryEvent = new PlayerEventItem(); getInventoryEvent.cbTeamType = (byte)GameObjectsManager.s_LocalHumanTeamType; getInventoryEvent.wChairId = (ushort)HNGameManager.m_iLocalChairID; getInventoryEvent.cbAIId = HNMJ_Defines.INVALID_AI_ID; getInventoryEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.GetInventory; getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id; getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Search; GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent); } } } } break; case "Boom": if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 && Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 && !ListInventory[i].bTaked) { if (!HaveBoom && localHuman.Hp != 0) { InventoryObjItem temp = ListInventory[i]; temp.bTaked = true; ListInventory[i] = temp; if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { HaveBoom = true; InventoryRemove(i); //GameSceneUIHandler.ShowLog("你拾取了炸弹!!!"); UIManager.GetInstance().ShowMiddleTips("你拾取了炸弹!!!"); ControlManager.GetInstance().BoomButton.gameObject.SetActive(true); } if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu) { // GetInventory event sync PlayerEventItem getInventoryEvent = new PlayerEventItem(); getInventoryEvent.cbTeamType = (byte)GameObjectsManager.s_LocalHumanTeamType; getInventoryEvent.wChairId = (ushort)HNGameManager.m_iLocalChairID; getInventoryEvent.cbAIId = HNMJ_Defines.INVALID_AI_ID; getInventoryEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.GetInventory; getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id; getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Boom; GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent); } } } break; case "Blood": if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 && Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 && !ListInventory[i].bTaked) { if (localHuman.Hp < PlayerBase.MaxHp && localHuman.Hp != 0) { InventoryObjItem temp = ListInventory[i]; temp.bTaked = true; ListInventory[i] = temp; if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { localHuman.Hp++; //生命增加 InventoryRemove(i); UIManager.GetInstance().ShowMiddleTips("你拾取了生命道具!!!"); } if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu) { // GetInventory event sync PlayerEventItem getInventoryEvent = new PlayerEventItem(); getInventoryEvent.cbTeamType = (byte)GameObjectsManager.s_LocalHumanTeamType; getInventoryEvent.wChairId = (ushort)HNGameManager.m_iLocalChairID; getInventoryEvent.cbAIId = HNMJ_Defines.INVALID_AI_ID; getInventoryEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.GetInventory; getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id; getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Blood; GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent); // AddHp event PlayerEventItem addHpEvent = new PlayerEventItem(); addHpEvent.cbTeamType = (byte)GameObjectsManager.s_LocalHumanTeamType; addHpEvent.wChairId = (ushort)HNGameManager.m_iLocalChairID; addHpEvent.cbAIId = HNMJ_Defines.INVALID_AI_ID; addHpEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.AddHp; GameObjectsManager.GetInstance().PlayerEventList.Add(addHpEvent); } } } break; case "Speed": if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 && Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 && !ListInventory[i].bTaked) { if (ControlManager.GetInstance()._etcJoystickL.axisX.speed == ControlManager.s_speed && localHuman.Hp != 0 && localHuman.m_isGrounded) { InventoryObjItem temp = ListInventory[i]; temp.bTaked = true; ListInventory[i] = temp; if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { InventoryRemove(i); UIManager.GetInstance().ShowMiddleTips("你拾取了加速道具!!!"); ControlManager.GetInstance().SpeedChange(ControlManager.s_speed * 3); StartCoroutine(InventorySpeed()); } if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu) { // GetInventory event sync PlayerEventItem getInventoryEvent = new PlayerEventItem(); getInventoryEvent.cbTeamType = (byte)GameObjectsManager.s_LocalHumanTeamType; getInventoryEvent.wChairId = (ushort)HNGameManager.m_iLocalChairID; getInventoryEvent.cbAIId = HNMJ_Defines.INVALID_AI_ID; getInventoryEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.GetInventory; getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id; getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Speed; GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent); } } } break; case "Key": if (Math.Abs(localHuman.gameObject.transform.position.x - ListInventory[i].obj.transform.position.x) < 1 && Math.Abs(localHuman.gameObject.transform.position.z - ListInventory[i].obj.transform.position.z) < 1 && !ListInventory[i].bTaked) { //Debug.Log("--------Key1"); if (localHuman.transform.FindChild("Inventory_Arrow") == null && localHuman.Hp != 0) { PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(PlayerTeam.PlayerTeamType.HideTeam); PlayerBase playerBase = null; if (team.GetPlayerNum() != 0) { int count = 0; while (true) { int index = (int)(MersenneTwister.MT19937.Int63() % team.GetPlayerNum()); playerBase = GameObjectsManager.GetInstance().GetPlayer(PlayerTeam.PlayerTeamType.HideTeam, index); if (playerBase.Hp > 0) { break; } if (count > 50) //防止没有存活导致死循环 { playerBase = null; localHuman = null; break; } count++; } if (playerBase != null && localHuman != null) { if (DirectionKey.GetInstance != null) { InventoryObjItem temp = ListInventory[i]; temp.bTaked = true; ListInventory[i] = temp; if (GameManager.s_gameSingleMultiType == GameSingleMultiType.SingleGame) { DirectionKey.GetInstance.Deal(localHuman.gameObject, playerBase.gameObject); InventoryRemove(i); UIManager.GetInstance().ShowMiddleTips("你拾取了钥匙道具!!!"); } if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_WangHu) { // GetInventory event sync PlayerEventItem getInventoryEvent = new PlayerEventItem(); getInventoryEvent.cbTeamType = (byte)GameObjectsManager.s_LocalHumanTeamType; getInventoryEvent.wChairId = (ushort)HNGameManager.m_iLocalChairID; getInventoryEvent.cbAIId = HNMJ_Defines.INVALID_AI_ID; getInventoryEvent.cbEventKind = (byte)PlayerBase.PlayerEventKind.GetInventory; getInventoryEvent.nCustomData0 = (Int32)ListInventory[i].id; getInventoryEvent.nCustomData1 = (Int32)InventoryType.Inventory_Key; GameObjectsManager.GetInstance().PlayerEventList.Add(getInventoryEvent); } } } } } } break; } } } } } }