/// <summary> /// 播放直接碰杠动作 /// </summary> public void PlayCommonPengGang() { GameObject pengedCard = null; pengedCard = getCard; getCard = null; if (_data.userId != playerInfoProxy.userID) { ResourcesMgr.Instance.SetCardMesh(pengedCard, battleProxy.GetPlayerActS2C().actCard); } for (int i = 0; i < pengGangCards.Count; i++) { if (BattleAreaUtil.GetMeshCardValue(pengGangCards[i][0]) == battleProxy.GetPlayerActS2C().actCard) { pengGangCards[i].Add(pengedCard); pengedCard.transform.SetParent(pengGangCardContainer); for (int j = 0; j < pengGangCards[i].Count; j++) { ResourcesMgr.Instance.SetCardMesh(pengGangCards[i][j], battleProxy.GetPlayerActS2C().actCard); } break; } } BattleAreaUtil.ResortCard(this); }
/// <summary> /// 播放牌面合上再打开的动画 /// </summary> public IEnumerator PlayCloseCardAction() { int rotateAngle = GlobalData.SitCardCloseArr[sitOffset]; foreach (Transform item in handCardContainer) { if (item.gameObject.activeSelf) { item.localEulerAngles = new Vector3(rotateAngle, 0, 0); } } StartCoroutine(AudioSystem.Instance.PlayEffectAudio("Voices/Effect/RotateAllCard")); yield return(new WaitForSeconds(0.83f)); if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) { _data.handCards.Sort(); for (int i = 0; i < handCards.Count; i++) { handCards[i].name = "HandCard" + i; } handCards.Sort(BattleAreaUtil.CompareCard); } BattleAreaUtil.ResortHandGangGetCard(this); foreach (Transform item in handCardContainer) { if (item.gameObject.activeSelf) { item.localEulerAngles = new Vector3(0, 0, 0); } } }
/// <summary> /// 出牌 /// </summary> private void PutCard() { if (!_data.isOnline) { NetMgr.Instance.ShowDisconnectAlert(); return; } //出牌 if (selectCard != null && battleProxy.isSelfAction && battleProxy.GetPlayerActTipS2C() != null && battleProxy.GetPlayerActTipS2C().acts.Contains(PlayerActType.PUT_CARD)) { var cardValue = BattleAreaUtil.GetMeshCardValue(selectCard); if (battleProxy.GetPlayerActTipS2C().forbitCards.IndexOf(cardValue) != -1) { PopMsg.Instance.ShowMsg("吃牌后当前牌不能出牌"); return; } PlayAMahjongC2S actC2S = new PlayAMahjongC2S(); actC2S.mahjongCode = cardValue; NetMgr.Instance.SendBuff(SocketType.BATTLE, MsgNoC2S.C2S_ROOM_PLAY_A_MAHJONG.GetHashCode(), 0, actC2S, true); battleProxy.isSelfAction = false; selectCardInstance = selectCard.GetInstanceID(); selectCard = null; } isTouchMove = false; }
/// <summary> /// 播放胡牌动作 /// </summary> /// <param name="huedCard"></param> public void PlayHu(GameObject huedCard) { huedCard.transform.SetParent(handCardContainer); handCards.Add(huedCard); if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) { for (int i = 0; i < handCards.Count; i++) { handCards[i].name = "HandCard" + i; } handCards.Sort(BattleAreaUtil.CompareCard); } BattleAreaUtil.ResortHandGangGetCard(this); RecoveryHandCardsColor(); }
/// <summary> /// 播放被吃的动作 /// </summary> public GameObject PlayChied() { GameObject pengedCard = null; for (int i = putCards.Count - 1; i >= 0; i--) { if (BattleAreaUtil.GetMeshCardValue(putCards[i]) == battleProxy.GetPlayerActS2C().actCard) { pengedCard = putCards[i]; putCards.RemoveAt(i); break; } } BattleAreaUtil.ResortPutCard(this); return(pengedCard); }
/// <summary> /// 播放发牌动画 /// </summary> private IEnumerator PlaySendCardAnimator() { //发牌之前先回收之前的牌 foreach (BattleAreaItem areaItem in View.battleAreaItems) { areaItem.SaveAllCard(); } View.cardArrowIcon.SetActive(false); ResourcesMgr.Instance.RecoveryAll(); if (GlobalData.hasHeap) { foreach (BattleAreaItem areaItem in View.battleAreaItems) { BattleAreaUtil.InitHeapCard(areaItem, GlobalData.CardWare.Length); } } yield return(new WaitForSeconds(4f)); HideRotaeSaizi(); //Facade.SendNotification(NotificationConstant.HIDESAIZI); var selfInfoVO = battleProxy.playerIdInfoDic[playerInfoProxy.userID]; var sendStartIndex = (battleProxy.GetBankerPlayerInfoVOS2C().sit - selfInfoVO.sit + GlobalData.SIT_NUM) % GlobalData.SIT_NUM; for (int i = 0; i < View.battleAreaItems.Count; i++) { View.battleAreaItems[i].SetData(battleProxy.playerSitInfoDic[GlobalData.GetNextSit(selfInfoVO.sit, i)]); } int sendCount = Mathf.CeilToInt((float)GlobalData.PLAYER_CARD_NUM / GlobalData.SEND_SINGLE) * GlobalData.SIT_NUM; for (int i = 0; i < sendCount; i++) { GameMgr.Instance.StartCoroutine(View.battleAreaItems[(i + sendStartIndex) % GlobalData.SIT_NUM].PlaySendCardAnimator()); yield return(new WaitForSeconds(0.4f)); } yield return(new WaitForSeconds(0.5f)); for (int i = 0; i < View.battleAreaItems.Count; i++) { GameMgr.Instance.StartCoroutine(View.battleAreaItems[i].PlayCloseCardAction()); } yield return(new WaitForSeconds(0.83f)); ClientAIMgr.Instance.AIPutCard(); battleProxy.SetIsForbit(false); SendNotification(NotificationConstant.MEDI_BATTLE_PLAYACTTIP); }
/// <summary> /// 播放直接暗杠 /// </summary> public void PlayCommonAnGang() { List <GameObject> gangCards = new List <GameObject>(); if (getCard != null) { gangCards.Add(getCard); getCard.transform.DOKill(); } getCard = null; if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)//自己暗杠找到真正的牌暗杠 { for (int i = 0; i < handCards.Count;) { if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard) { gangCards.Add(handCards[i]); handCards.RemoveAt(i); } else { i++; } } } else//不是自己暗杠随机找牌暗杠 { var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 3); gangCards.Add(handCards[randomIndex]); gangCards.Add(handCards[randomIndex + 1]); gangCards.Add(handCards[randomIndex + 2]); handCards.RemoveAt(randomIndex); handCards.RemoveAt(randomIndex); handCards.RemoveAt(randomIndex); foreach (GameObject gangCard in gangCards) { ResourcesMgr.Instance.SetCardMesh(gangCard, battleProxy.GetPlayerActS2C().actCard); } } foreach (GameObject card in gangCards) { card.transform.SetParent(pengGangCardContainer); } pengGangCards.Add(gangCards); BattleAreaUtil.ResortCard(this); }
/// <summary> /// 播放直杠动作 /// </summary> /// <param name="zhiGangedCard"></param> public void PlayZhiGang(GameObject zhiGangedCard) { zhiGangedCard.transform.DOKill(); List <GameObject> gangCards = new List <GameObject>(); gangCards.Add(zhiGangedCard); if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) { for (int i = 0; i < handCards.Count;) { if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard) { gangCards.Add(handCards[i]); handCards.RemoveAt(i); } else { i++; } if (gangCards.Count == 4) { break; } } } else { var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 3); gangCards.Add(handCards[randomIndex]); gangCards.Add(handCards[randomIndex + 1]); gangCards.Add(handCards[randomIndex + 2]); handCards.RemoveAt(randomIndex); handCards.RemoveAt(randomIndex); handCards.RemoveAt(randomIndex); foreach (GameObject gangCard in gangCards) { ResourcesMgr.Instance.SetCardMesh(gangCard, battleProxy.GetPlayerActS2C().actCard); } } foreach (GameObject card in gangCards) { card.transform.SetParent(pengGangCardContainer); } pengGangCards.Add(gangCards); BattleAreaUtil.ResortHandGangGetCard(this); }
/// <summary> /// 播放吃的动作 /// </summary> public void PlayChi(GameObject chiedCard) { chiedCard.transform.DOKill(); List <GameObject> chiCards = new List <GameObject>(); chiCards.Add(chiedCard); List <int> chiCardArr = new List <int>(); chiCardArr.Add(battleProxy.GetPlayerActS2C().actCard); chiCardArr.AddRange(battleProxy.GetPlayerActS2C().chiCards); chiCardArr.Sort(); if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) //自己碰找到真正的牌碰 { for (int i = 0; i < battleProxy.GetPlayerActS2C().chiCards.Count; i++) { for (int j = 0; j < handCards.Count; j++) { if (BattleAreaUtil.GetMeshCardValue(handCards[j]) == battleProxy.GetPlayerActS2C().chiCards[i]) { chiCards.Add(handCards[j]); handCards.RemoveAt(j); break; } } } } else { var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 2); chiCards.Add(handCards[randomIndex]); chiCards.Add(handCards[randomIndex + 1]); handCards.RemoveAt(randomIndex); handCards.RemoveAt(randomIndex); } for (int i = 0; i < chiCards.Count; i++) { ResourcesMgr.Instance.SetCardMesh(chiCards[i], chiCardArr[i]); } foreach (GameObject card in chiCards) { card.transform.SetParent(pengGangCardContainer); } pengGangCards.Add(chiCards); BattleAreaUtil.ResortCard(this); }
/// <summary> /// 播放发牌动画 /// </summary> private IEnumerator PlaySendCardAnimator() { //发牌之前先回收之前的牌 foreach (BattleAreaItem areaItem in View.battleAreaItems) { areaItem.SaveAllCard(); } View.cardArrowIcon.SetActive(false); if (GlobalData.hasHeap) { foreach (BattleAreaItem areaItem in View.battleAreaItems) { BattleAreaUtil.InitHeapCard(areaItem, GlobalData.CardWare.Length); } } var selfInfoVO = battleProxy.playerIdInfoDic[playerInfoProxy.UserInfo.UserID]; var sendStartIndex = (battleProxy.BankerPlayerInfoVOS2C.sit - selfInfoVO.sit + GlobalData.SIT_NUM) % GlobalData.SIT_NUM; for (int i = 0; i < View.battleAreaItems.Count; i++) { View.battleAreaItems[i].SetData(battleProxy.playerSitInfoDic[GlobalData.GetNextSit(selfInfoVO.sit, i)]); } //if (GlobalData.LoginServer != "127.0.0.1") //{ int sendCount = Mathf.CeilToInt((float)GlobalData.PLAYER_CARD_NUM / GlobalData.SEND_SINGLE) * GlobalData.SIT_NUM; for (int i = 0; i < sendCount; i++) { GameMgr.Instance.StartCoroutine(View.battleAreaItems[(i + sendStartIndex) % GlobalData.SIT_NUM].PlaySendCardAnimator()); yield return(new WaitForSeconds(0.4f)); } yield return(new WaitForSeconds(0.5f)); SendNotification(NotificationConstant.MEDI_BATTLE_UPDATEOOMMESSAGES); for (int i = 0; i < View.battleAreaItems.Count; i++) { GameMgr.Instance.StartCoroutine(View.battleAreaItems[i].PlayCloseCardAction()); } //} yield return(new WaitForSeconds(0.83f)); battleProxy.isForbit = false; SendNotification(NotificationConstant.MEDI_BATTLE_PLAYACTTIP); }
/// <summary> /// 播放碰的动作 /// </summary> public void PlayPeng(GameObject pengedCard) { List <GameObject> pengCards = new List <GameObject>(); pengedCard.transform.DOKill(); pengCards.Add(pengedCard); if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) //自己碰找到真正的牌碰 { for (int i = 0; i < handCards.Count;) { if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard) { pengCards.Add(handCards[i]); handCards.RemoveAt(i); } else { i++; } if (pengCards.Count == 3) { break; } } } else { var randomIndex = Random.Range(0, handCards.Count - 2); pengCards.Add(handCards[randomIndex]); pengCards.Add(handCards[randomIndex + 1]); handCards.RemoveAt(randomIndex); handCards.RemoveAt(randomIndex); foreach (GameObject pengCard in pengCards) { ResourcesMgr.Instance.SetCardMesh(pengCard, battleProxy.GetPlayerActS2C().actCard); } } foreach (GameObject card in pengCards) { card.transform.SetParent(pengGangCardContainer); } pengGangCards.Add(pengCards); BattleAreaUtil.ResortCard(this); }
/// <summary> /// 播放自摸胡牌动作 /// </summary> public void PlaySelfHu() { if (getCard != null) { handCards.Add(getCard); getCard.transform.DOKill(); getCard = null; } if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) { for (int i = 0; i < handCards.Count; i++) { handCards[i].name = "HandCard" + i; } handCards.Sort(BattleAreaUtil.CompareCard); } BattleAreaUtil.ResortHandGangGetCard(this); RecoveryHandCardsColor(); }
/// <summary> /// 播放牌面重置 /// </summary> public void PlayRestCard() { List <GameObject> needSaveCard = new List <GameObject>(); foreach (Transform card in handCardContainer) { if (defaultCardIdList.Contains(card.gameObject.GetInstanceID())) { continue; } needSaveCard.Add(card.gameObject); } foreach (GameObject item in needSaveCard) { ResourcesMgr.Instance.Add2Pool(item); } handCards.Clear(); getCard = null; BattleAreaUtil.InitPlayerCards(this, true); }
/// <summary> /// 播放被胡动作 /// </summary> /// <returns></returns> public GameObject PlayHued() { GameObject huCard = null; if (putCards.Count > 0 && BattleAreaUtil.GetMeshCardValue(putCards[putCards.Count - 1]) == battleProxy.GetPlayerActS2C().actCard) { huCard = putCards[putCards.Count - 1]; putCards.RemoveAt(putCards.Count - 1); } BattleAreaUtil.ResortPutCard(this); if (huCard == null)//找不到胡的牌,重新构建一个 { huCard = ResourcesMgr.Instance.GetFromPool(battleProxy.GetPlayerActS2C().actCard); huCard.transform.SetParent(handCardContainer); huCard.transform.localPosition = sendCard.localPosition; huCard.transform.localScale = sendCard.localScale; huCard.transform.localEulerAngles = sendCard.localEulerAngles; } RecoveryHandCardsColor(); return(huCard); }
/// <summary> /// 播放回头碰杠动作 /// </summary> public void PlayBackPengGang() { GameObject pengedCard = null; if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) { for (int i = 0; i < handCards.Count; i++) { if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard) { pengedCard = handCards[i]; handCards.RemoveAt(i); break; } } } else { var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 1); pengedCard = handCards[randomIndex]; handCards.RemoveAt(randomIndex); } for (int i = 0; i < pengGangCards.Count; i++) { if (BattleAreaUtil.GetMeshCardValue(pengGangCards[i][0]) == battleProxy.GetPlayerActS2C().actCard) { pengGangCards[i].Add(pengedCard); pengedCard.transform.SetParent(pengGangCardContainer); for (int j = 0; j < pengGangCards[i].Count; j++) { ResourcesMgr.Instance.SetCardMesh(pengGangCards[i][j], battleProxy.GetPlayerActS2C().actCard); } break; } } BattleAreaUtil.ResortCard(this); }
/// <summary> /// 手牌变灰,true为全部,false-可能是部分 /// </summary> /// <param name="canOperateCards"></param> /// <param name="isAllCards"></param> public void SetHandCardsGray(List <int> canOperateCards, bool isAllCards) { if (_data.userId == playerInfoProxy.userID) { if (!isAllCards) { List <GameObject> grayCardList = new List <GameObject>(); grayCardList = handCards.FindAll(o => !canOperateCards.Contains(BattleAreaUtil.GetMeshCardValue(o))); var getCardPlayerVOS2C = battleProxy.playerIdInfoDic[battleProxy.GetPlayerActS2C().userId]; if (!canOperateCards.Contains(getCardPlayerVOS2C.getCard)) { getCard.GetComponent <MeshRenderer>().material.color = Color.gray; getCard.GetComponent <BoxCollider>().enabled = false; } if (canOperateCards != null) { for (int i = 0; i < grayCardList.Count; i++) { grayCardList[i].GetComponent <MeshRenderer>().material.color = Color.gray; grayCardList[i].GetComponent <BoxCollider>().enabled = false; } } else { Debug.LogError("canOperateCards is null"); } } else { for (int i = 0; i < handCards.Count; i++) { handCards[i].GetComponent <MeshRenderer>().material.color = Color.gray; handCards[i].GetComponent <BoxCollider>().enabled = false; } } } }
/// <summary> /// 计算吃操作的权重 /// </summary> /// <param name="actPowerVO">权重VO</param> /// <param name="canPutCards">可出的牌数组</param> /// <param name="passAddPower">是否增加过操作权重</param> private void CalculateChiPower(ActPowerVO actPowerVO, List <int> canPutCards, out bool passAddPower) { List <List <int> > chiSelectArr = BattleAreaUtil.GetCanChiArr(actPowerVO.actCard); chiPowerArr = new List <ChiPowerVO>(); for (int i = 0; i < chiSelectArr.Count; i++) { var copyCanPutCards = new List <int>(canPutCards); List <int> forbitCards = new List <int>(); if (chiSelectArr[i][0] == actPowerVO.actCard + 1) { if (Array.IndexOf(GlobalData.CardValues, actPowerVO.actCard + 3) != -1) { forbitCards.Add(actPowerVO.actCard + 3); } } else if (chiSelectArr[i][0] == actPowerVO.actCard - 2) { if (Array.IndexOf(GlobalData.CardValues, actPowerVO.actCard - 3) != -1) { forbitCards.Add(actPowerVO.actCard - 3); } } ChiPowerVO addChiPowerVO = new ChiPowerVO(chiSelectArr[i], actPowerVO.actCard, forbitCards, 0); chiPowerArr.Add(addChiPowerVO); bool isBreakCard = false; for (int j = 0; j < chiSelectArr[i].Count; j++) { List <int> listFind = copyCanPutCards.FindAll(delegate(int s) { return(s == chiSelectArr[i][j]); }); if (listFind.Count > 1)//需要拆对 { isBreakCard = true; } } if (!isBreakCard) { addChiPowerVO.power += 1000; } for (int j = 0; j < chiSelectArr[i].Count; j++) { copyCanPutCards.Remove(chiSelectArr[i][j]); } bool hasDouble = false; for (int j = 0; j < copyCanPutCards.Count; j++) { if (j > 0 && copyCanPutCards[j] == copyCanPutCards[j - 1]) { hasDouble = true; break; } } if (hasDouble) { addChiPowerVO.power += 1000; } } chiPowerArr.Sort((ChiPowerVO chiPowerVO1, ChiPowerVO chiPowerVO2) => { if (chiPowerVO1.power > chiPowerVO2.power) { return(-1); } else { return(1); } }); if (chiPowerArr[0].power <= 0) { passAddPower = true; } else { passAddPower = false; actPowerVO.power += 50; } }
/// <summary> /// 显示玩家操作提示 /// </summary> public void ShowPlayActTip() { operates = new List <OperateType>(); operateCards = new Dictionary <OperateType, List <int> >(); operateActs = new Dictionary <OperateType, List <PlayerActType> >(); operateCardBtns = new List <GameObject>(); for (int i = 0; i < battleProxy.GetPlayerActTipS2C().acts.Count; i++) { PlayerActType actType = battleProxy.GetPlayerActTipS2C().acts[i]; OperateType operateType = OperateType.PASS; if (actType == PlayerActType.PUT_CARD) { continue; } switch (actType) { case PlayerActType.ZHI_GANG: case PlayerActType.BACK_AN_GANG: case PlayerActType.COMMON_AN_GANG: case PlayerActType.BACK_PENG_GANG: case PlayerActType.COMMON_PENG_GANG: operateType = OperateType.GANG; break; case PlayerActType.SELF_HU: case PlayerActType.QIANG_ZHI_GANG_HU: case PlayerActType.QIANG_PENG_GANG_HU: case PlayerActType.QIANG_AN_GANG_HU: case PlayerActType.CHI_HU: operateType = OperateType.HU; break; case PlayerActType.PENG: operateType = OperateType.PENG; break; case PlayerActType.CHI: operateType = OperateType.CHI; chiSelectArr = BattleAreaUtil.GetCanChiArr(battleProxy.GetPlayerActTipS2C().actCards[i]); break; case PlayerActType.BAO_TING: operateType = OperateType.BAOTING; break; case PlayerActType.BAO_DIAO: operateType = OperateType.BAODIAO; break; case PlayerActType.CHENG_DIAO: operateType = OperateType.CHENDIAO; chenDiaoSelectArr = battleProxy.GetPlayerActTipS2C().chenDiaoCards; break; case PlayerActType.BAO_JIA: operateType = OperateType.BAOJIA; break; case PlayerActType.PASS: operateType = OperateType.PASS; break; } if (operates.IndexOf(operateType) == -1) { operates.Add(operateType); operateCards.Add(operateType, new List <int>()); operateActs.Add(operateType, new List <PlayerActType>()); } operateCards[operateType].Add(battleProxy.GetPlayerActTipS2C().actCards[i]); operateActs[operateType].Add(actType); //if (operateType == OperateType.CHENDIAO) //{ // battleProxy.GetPlayerActTipS2C().chenDiaoCards.ForEach(o=> { operateCards[operateType].Add(o); }); // operateActs[operateType].Add(actType); //} } for (int i = 0; i < actionBtns.Count; i++) { if (i >= operateActs.Count) { actionBtnContainers[i].gameObject.SetActive(false); continue; } actionBtnContainers[i].gameObject.SetActive(true); foreach (Transform item in actionBtns[i].gameObject.transform) { Destroy(item.gameObject); } switch (operates[i]) { case OperateType.GANG: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionGang"); break; case OperateType.HU: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionHu"); break; case OperateType.PASS: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionGuo"); break; case OperateType.PENG: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionPeng"); break; case OperateType.CHI: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionChi"); break; case OperateType.BAOTING: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionBaoTing"); break; case OperateType.BAODIAO: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionBaoDiao"); break; case OperateType.BAOJIA: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionBaoJia"); break; case OperateType.CHENDIAO: actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionChenDiao"); break; } actionBtns[i].gameObject.GetComponent <Animator>().Play("ShowActBtn" + (i + 1), 0, 0); } for (int i = 0; i < operateActs.Count; i++) { var perPosition = actionBtnContainers[i].localPosition; perPosition = new Vector3(503.3f - 163.8f * (operateActs.Count - i - 1), perPosition.y, perPosition.z); actionBtnContainers[i].localPosition = perPosition; } }
/// <summary> /// 播放出牌动作 /// </summary> public IEnumerator PlayPutCard() { var cardValue = battleProxy.GetPlayerActS2C().actCard; GameObject putCard = null; if (getCard != null) { handCards.Add(getCard); getCard.transform.DOKill(); getCard = null; } if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) { for (int i = 0; i < handCards.Count; i++) { if (selectCardInstance == handCards[i].GetInstanceID() && BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard) { putCard = handCards[i]; handCards.RemoveAt(i); break; } } if (putCard == null) { for (int i = 0; i < handCards.Count; i++) { if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard) { putCard = handCards[i]; handCards.RemoveAt(i); break; } } } if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) { for (int i = 0; i < handCards.Count; i++) { handCards[i].name = "HandCard" + i; } handCards.Sort(BattleAreaUtil.CompareCard); } } else { var randomIndex = Random.Range(0, handCards.Count - 1); putCard = handCards[randomIndex]; handCards.RemoveAt(randomIndex); ResourcesMgr.Instance.SetCardMesh(putCard, cardValue); } putCards.Add(putCard); var selfInfoVO = battleProxy.playerIdInfoDic[playerInfoProxy.userID]; var sitIndex = (_data.sit - selfInfoVO.sit + GlobalData.SIT_NUM) % GlobalData.SIT_NUM; GameMgr.Instance.StartCoroutine(AudioSystem.Instance.PlayEffectAudio(string.Format("Voices/{0}/Card/{1}", _data.sex == 1 ? "Man" : "Woman", cardValue))); if (battleProxy.isSkipTween) { BattleAreaUtil.ResortCard(this); ApplicationFacade.Instance.SendNotification(NotificationConstant.TING_UPDATE); ApplicationFacade.Instance.SendNotification(NotificationConstant.SHOW_CARD_ARROW, this); yield break; } battleProxy.SetIsForbit(true); putCard.transform.DOKill(); if (sitIndex == 1) { putCard.transform.localEulerAngles = new Vector3(0, -60, 90); putCard.transform.DOScale(Vector3.one * 3, 0.14f); } else if (sitIndex == 2) { putCard.transform.localEulerAngles = new Vector3(0, 0, 180); putCard.transform.DOScale(Vector3.one * 1.5f, 0.14f); } else if (sitIndex == 3) { putCard.transform.localEulerAngles = new Vector3(0, 60, -90); putCard.transform.DOScale(Vector3.one * 3, 0.14f); } else { putCard.transform.DOScale(Vector3.one * 1.5f, 0.14f); } putCard.transform.DOLocalMove(sendCard.localPosition, 0.14f); yield return(new WaitForSeconds(0.25f)); putCard.transform.SetParent(putCardContainer); var anglePosition = BattleAreaUtil.GetPutCardPosition(this, putCards.Count - 1); putCard.transform.localEulerAngles = anglePosition[0]; putCard.transform.DOLocalMove(anglePosition[1], 0.1f); putCard.transform.DOScale(Vector3.one, 0.1f); yield return(new WaitForSeconds(0.1f)); GameMgr.Instance.StartCoroutine(AudioSystem.Instance.PlayEffectAudio("Voices/Effect/PutCard")); BattleAreaUtil.ResortCard(this); ApplicationFacade.Instance.SendNotification(NotificationConstant.TING_UPDATE); battleProxy.SetIsForbit(false); ApplicationFacade.Instance.SendNotification(NotificationConstant.SHOW_CARD_ARROW, this); if (PlayerPrefs.GetInt(battleProxy.GetPlayerActS2C().userId.ToString()) == 1) { SetHandCardsGray(null, true); } }
/// <summary> /// 显示玩家操作提示 /// </summary> public void ShowPlayActTip() { //ClearOperateCardBtns(); operates = new List <OperateType>(); operateCards = new Dictionary <OperateType, List <int> >(); operateActs = new Dictionary <OperateType, List <PlayerActType> >(); operateCardBtns = new List <GameObject>(); for (int i = 0; i < battleProxy.playerActTipS2C.acts.Count; i++) { PlayerActType actType = battleProxy.playerActTipS2C.acts[i]; OperateType operateType = OperateType.PASS; if (actType == PlayerActType.PUT_CARD) { continue; } if (actType == PlayerActType.PUT_FLOWER_CARD) { //PutFlowerCard(); continue; } switch (actType) { case PlayerActType.ZHI_GANG: case PlayerActType.BACK_AN_GANG: case PlayerActType.COMMON_AN_GANG: case PlayerActType.BACK_PENG_GANG: case PlayerActType.COMMON_PENG_GANG: operateType = OperateType.GANG; break; case PlayerActType.SELF_HU: case PlayerActType.QIANG_ZHI_GANG_HU: case PlayerActType.QIANG_PENG_GANG_HU: case PlayerActType.QIANG_AN_GANG_HU: case PlayerActType.CHI_HU: operateType = OperateType.HU; break; case PlayerActType.PASS: operateType = OperateType.PASS; break; case PlayerActType.PENG: operateType = OperateType.PENG; break; case PlayerActType.CHI: operateType = OperateType.CHI; chiSelectArr = BattleAreaUtil.GetCanChiArr(battleProxy.playerActTipS2C.actCards[i]); break; //case PlayerActType.PUT_FLOWER_CARD: // //发送打花牌消息 // operateType = OperateType.FLOWER; // break; } if (operates.IndexOf(operateType) == -1) { operates.Add(operateType); operateCards.Add(operateType, new List <int>()); operateActs.Add(operateType, new List <PlayerActType>()); } operateCards[operateType].Add(battleProxy.playerActTipS2C.actCards[i]); operateActs[operateType].Add(actType); } for (int i = 0; i < actionBtns.Count; i++) { if (i >= operateActs.Count) { actionBtnContainers[i].gameObject.SetActive(false); continue; } actionBtnContainers[i].gameObject.SetActive(true); switch (operates[i]) { case OperateType.GANG: actionBtns[i].gameObject.SetActive(true); actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionGang"); break; case OperateType.HU: actionBtns[i].gameObject.SetActive(true); actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionHu"); break; case OperateType.PASS: actionBtns[i].gameObject.SetActive(true); actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionGuo"); break; case OperateType.PENG: actionBtns[i].gameObject.SetActive(true); actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionPeng"); break; case OperateType.CHI: actionBtns[i].gameObject.SetActive(true); actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionChi"); break; } Animator animator = actionBtns[i].gameObject.GetComponent <Animator>(); actionBtns[i].gameObject.GetComponent <Animator>().Play("ShowActBtn" + (i + 1), 0, 0); } }
/// <summary> /// 播放摸牌动画 /// </summary> public IEnumerator PlayGetCard() { GameObject cardItem = null; if (GlobalData.hasHeap) { cardItem = (ApplicationFacade.Instance.RetrieveMediator(Mediators.BATTLE_AREA_MEDIATOR) as BattleAreaMediator).GetHeapCard(battleProxy.GetPlayerActS2C().actCard); cardItem.transform.SetParent(handCardContainer); cardItem.transform.localScale = sendCard.transform.localScale; cardItem.transform.localEulerAngles = sendCard.transform.localEulerAngles; } else { cardItem = ResourcesMgr.Instance.GetFromPool(battleProxy.GetPlayerActS2C().actCard); cardItem.transform.SetParent(handCardContainer); cardItem.transform.localPosition = sendCard.transform.localPosition; cardItem.transform.localScale = sendCard.transform.localScale; cardItem.transform.localEulerAngles = sendCard.transform.localEulerAngles; } Vector3 targetPos = Vector3.zero; if (handCards.Count > 0) { targetPos = handCards[handCards.Count - 1].transform.localPosition + getHandCardGap; } else { targetPos = getCardContainer.localPosition; } if (_data.userId == playerInfoProxy.userID) { targetPos.y = 0; targetPos.z = 0; } if (getCard != null) { handCards.Add(getCard); getCard.transform.DOKill(); getCard = null; } if (handCards.Count != _data.handCards.Count) { Debug.LogError("显示和数据不一致"); } getCard = cardItem; if (battleProxy.isSkipTween) { cardItem.transform.localPosition = targetPos; if (_data.userId == playerInfoProxy.userID) { cardItem.layer = GlobalData.SELF_HAND_CARDS; } else if (dir == AreaDir.RIGHT) { cardItem.layer = GlobalData.RIGHT_HAND_CARDS; } else { cardItem.layer = GlobalData.OTHER_CARDS; } BattleAreaUtil.ResortHandGangGetCard(this); } else { cardItem.transform.DOLocalMove(targetPos, 0.1f); if (_data.userId == playerInfoProxy.userID) { cardItem.layer = GlobalData.SELF_HAND_CARDS; } else if (dir == AreaDir.RIGHT) { cardItem.layer = GlobalData.RIGHT_HAND_CARDS; } else { cardItem.layer = GlobalData.OTHER_CARDS; } battleProxy.SetIsForbit(true); yield return(new WaitForSeconds(0.15f)); BattleAreaUtil.ResortHandGangGetCard(this); battleProxy.SetIsForbit(false); } }
/// <summary> /// 播放过的动作 /// </summary> public void PlayPass() { BattleAreaUtil.ResortCard(this); }