//吃 碰 杠时 判断下一个动画状态 -1表示不做任何动作 int CheckState(MahjongPrefab card, CardActType type) { int currenState = card.animator.GetCurrentAnimatorStateInfo(0).fullPathHash; if (currenState == GlobalData.ANIMA_GetCard || currenState == GlobalData.ANIMA_OnTriggerEnter || currenState == GlobalData.ANIMA_OnTriggerExit || currenState == GlobalData.ANIMA_InsertCard) { switch (type) { case CardActType.AnGang: return(GlobalData.ANIMA_CloseCard); default: return(GlobalData.ANIMA_TurnOverCard); } } if (currenState == GlobalData.ANIMA_OutCard) { return(GlobalData.ANIMA_ChiPengCard); } if (currenState == GlobalData.ANIMA_TurnOverCard || currenState == GlobalData.ANIMA_ChiPengCard) { return(-1); } if (currenState == GlobalData.ANIMA_CardIdle || currenState == GlobalData.ANIMA_CloseCard) { switch (type) { case CardActType.AnGang: return(-1); default: return(GlobalData.ANIMA_TurnOverCard); } } return(-1); }
//添加碰 吃 角色 动作类型 牌1 牌2 牌3 public IEnumerator AddPengChi(UserCard user, CardActType type, MahjongPrefab card1, MahjongPrefab card2, MahjongPrefab card3) { if (user.mingGangPoint.IsNotFull) { //预设 Transform tran = null; //分配位置 Vector3 target = new Vector3(); //输入检查 if (!card1.transform || !card2.transform || !card3.transform) { Debug.Log("<MGameClientAction::AddMingGang>:输入参数为空."); } switch (type) { case CardActType.Peng: //获取预设 tran = spawnPool.Spawn("Peng"); //加入容器并获取分配坐标 target = user.mingGangPoint.AddItem(tran, GlobalData.PENG_Width); break; case CardActType.Chi: //获取预设 tran = spawnPool.Spawn("Chi"); //加入容器并获取分配坐标 target = user.mingGangPoint.AddItem(tran, GlobalData.CHI_Width); break; default: Debug.Log("<MGameClientAction::AddPengChi>:输入参数过少."); break; } //只使用本地坐标x轴做动画 tran.position = target + tran.right * .5f; //各个牌的位置 Transform card1Point = tran.GetChild(0); Transform card2Point = tran.GetChild(1); Transform card3Point = tran.GetChild(2); //调整各个牌的缩放 card1.transform.localScale = card1Point.localScale; card2.transform.localScale = card2Point.localScale; card3.transform.localScale = card3Point.localScale; //下一个动画 int card1Anima = CheckState(card1, type); int card2Anima = CheckState(card2, type); int card3Anima = CheckState(card3, type); //播放动画 if (card1Anima != -1) { card1.animator.Play(card1Anima); } if (card2Anima != -1) { card2.animator.Play(card2Anima); } if (card3Anima != -1) { card3.animator.Play(card3Anima); } //移动到预设位置 iTween.MoveTo(card1.transform.gameObject, card1Point.position, .5f); iTween.MoveTo(card2.transform.gameObject, card2Point.position, .5f); iTween.MoveTo(card3.transform.gameObject, card3Point.position, .5f); //旋转角度调整至预设角度 card1.transform.rotation = card1Point.rotation; card2.transform.rotation = card2Point.rotation; card3.transform.rotation = card3Point.rotation; //等待预设移动 yield return(new WaitForSeconds(.5f)); //绑定到为预设 card1.transform.SetParent(card1Point); card2.transform.SetParent(card2Point); card3.transform.SetParent(card3Point); //开始预设动作 //此处可播放特效start //特效end //开始移动到明杠区域 iTween.MoveTo(tran.gameObject, target, .5f); yield return(new WaitForSeconds(.5f)); } else { Debug.Log("<MGameClientAction::AddAnGang>: 明杠区域已满."); } }
public IEnumerator AddPengChi(UserCard user, CardActType type, MahjongPrefab card1, MahjongPrefab card2, MahjongPrefab card3, IEnumeratorCallback callback) { yield return(AddPengChi(user, type, card1, card2, card3)); yield return(callback()); }
public IEnumerator AddGang(UserCard user, CardActType type, MahjongPrefab card1, MahjongPrefab card2, MahjongPrefab card3, MahjongPrefab card4, Callback callback) { yield return(AddGang(user, type, card1, card2, card3, card4)); callback(); }