/// <summary> /// 创建卡片 /// </summary> /// <param name="position"></param> /// <param name="itemType"></param> /// <param name="objContainer"></param> /// <returns></returns> public GameObject CreateCardItem(int position, ItemMiniGameDebateCardCpt.DebateCardTypeEnun itemType, GameObject objContainer) { GameObject objItem = Instantiate(objContainer, objDebateCardModel); RectTransform rtfItem = (RectTransform)objItem.transform; //初始默认不可点击 ItemMiniGameDebateCardCpt cardItem = objItem.GetComponent <ItemMiniGameDebateCardCpt>(); cardItem.ClosePointerListener(); //设置初始透明度 CanvasGroup cgItem = objItem.GetComponent <CanvasGroup>(); cgItem.alpha = 0; if (objContainer == objUserDebateCardContainer) { cardItem.SetData(itemType, 1); rtfItem .DOLocalMoveY(120, 1) .From() .SetEase(Ease.OutBack) .SetDelay(position * 0.2f) .OnStart( delegate() { cgItem.alpha = 1; AudioHandler.Instance.PlaySound(AudioSoundEnum.GetCard); }) .OnComplete( delegate() { cardItem.OpenPointerListener(); }); miniGameData.listUserCard.Add(cardItem); } else if (objContainer == objEnemyDebateCardContainer) { cardItem.SetData(itemType, 2); rtfItem .DOLocalMoveY(120, 1) .From() .SetEase(Ease.OutBack) .SetDelay(position * 0.2f) .OnStart( delegate() { cgItem.alpha = 1; }) .OnComplete( delegate() { cardItem.OpenPointerListener(); }); miniGameData.listEnemyCard.Add(cardItem); } return(objItem); }
/// <summary> /// 创建战斗卡牌 /// </summary> /// <param name="userCard"></param> /// <param name="enemyCard"></param> public void CreateCombatAnim( ItemMiniGameDebateCardCpt userCard, ItemMiniGameDebateCardCpt enemyCard, ItemMiniGameDebateCardCpt winnerCard, ItemMiniGameDebateCardCpt loserCard, float preCombatTime, float combatTime) { enemyCard.transform.SetParent(objCombatContainer.transform); enemyCard.ClosePointerListener(); enemyCard.transform.DOMove(objCombatEnemyPosition.transform.position, preCombatTime).OnComplete(delegate() { enemyCard.transform.DOMove(objCombatEnemyEndPosition.transform.position, combatTime).SetEase(Ease.InOutBack); }); userCard.transform.SetParent(objCombatContainer.transform); userCard.ClosePointerListener(); userCard.transform.DOMove(objCombatUserPosition.transform.position, preCombatTime).OnComplete(delegate() { userCard.transform.DOMove(objCombatUserEndPosition.transform.position, combatTime).SetEase(Ease.InOutBack).OnComplete(delegate() { if (winnerCard == null || loserCard == null) { AudioHandler.Instance.PlaySound(AudioSoundEnum.CardDraw); //平手 都删除 CardDestroyAnim(userCard); CardDestroyAnim(enemyCard); } else { //败者先删除动画 CardDestroyAnim(loserCard); //卡牌特效 psCombat.Play(); CardDestroyAnim(winnerCard, 1f); //输赢 if (userCard == winnerCard) { AudioHandler.Instance.PlaySound(AudioSoundEnum.CardWin); } else { AudioHandler.Instance.PlaySound(AudioSoundEnum.CardLose); } } //通知动画结束 if (mCallBack != null) { mCallBack.CombatAnimEnd(); } }); }); }
/// <summary> /// 卡片删除动画 /// </summary> /// <param name="card"></param> private void CardDestroyAnim(ItemMiniGameDebateCardCpt card, float delayTime) { if (card == null) { return; } CanvasGroup cgLoser = card.GetComponent <CanvasGroup>(); card.transform.DOShakePosition(0.2f, 5).SetDelay(delayTime); cgLoser.DOFade(0, 0.2f).SetDelay(delayTime);; card.transform.DOScale(new Vector3(1.5f, 1.5f, 1.5f), 0.2f).SetDelay(delayTime).OnComplete(delegate() { Destroy(card.gameObject); }); }
/// <summary> /// 选择了卡片 开始战斗 /// </summary> /// <param name="selectCard"></param> public void StartCombat(ItemMiniGameDebateCardCpt selectCard) { if (miniGameData.GetDebateStatus() != MiniGameDebateBean.DebateStatus.Idle) { return; } //设置状态为开始战斗 miniGameData.SetDebateStatus(MiniGameDebateBean.DebateStatus.Combat); //获取敌人的卡片 ItemMiniGameDebateCardCpt enemyCard = GetEnemyCombatCard(); //检测谁胜利 CheckCombatWinner(selectCard, enemyCard, out ItemMiniGameDebateCardCpt winner, out ItemMiniGameDebateCardCpt loser); //创建战斗动画 uiMiniGameDebate.CreateCombatAnim(selectCard, enemyCard, winner, loser, preCombatTime, combatTime); //从卡堆中移除选择的卡 miniGameData.listUserCard.Remove(selectCard); miniGameData.listEnemyCard.Remove(enemyCard); NpcAIMiniGameDebateCpt winnerNpc = null; NpcAIMiniGameDebateCpt loserNpc = null; if (winner == null || loser == null) { } else if (selectCard == winner) { winnerNpc = miniGameBuilder.GetUserCharacter(); loserNpc = miniGameBuilder.GetEnemyCharacter(); } else { winnerNpc = miniGameBuilder.GetEnemyCharacter(); loserNpc = miniGameBuilder.GetUserCharacter(); } //创建攻击粒子 float allComabtTime = preCombatTime + combatTime; if (winnerNpc != null && loserNpc != null) { GameObject objWinEffect = miniGameBuilder.CreateCombatEffect(winnerNpc.transform.position + new Vector3(0, 0.5f)); GameObject objLoseEffect = miniGameBuilder.CreateCombatEffect(loserNpc.transform.position + new Vector3(0, 0.5f)); AnimForCombatEffect(objWinEffect, loserNpc.transform.position + new Vector3(0, 0.5f), allComabtTime); AnimForCombatEffect(objLoseEffect, (winnerNpc.transform.position + loserNpc.transform.position) / 2f + new Vector3(0, 0.5f), allComabtTime / 2f); } //战斗过程 StartCoroutine(CoroutineForCombat(allComabtTime, winnerNpc, loserNpc)); }
/// <summary> /// 检测胜利者 /// </summary> /// <param name="userCard"></param> /// <param name="enemyCard"></param> /// <returns></returns> public void CheckCombatWinner( ItemMiniGameDebateCardCpt userCard, ItemMiniGameDebateCardCpt enemyCard, out ItemMiniGameDebateCardCpt winnerCard, out ItemMiniGameDebateCardCpt loserCard) { ItemMiniGameDebateCardCpt.DebateCardTypeEnun userCardType = userCard.debateCardType; ItemMiniGameDebateCardCpt.DebateCardTypeEnun enemyCardType = enemyCard.debateCardType; int result = (int)userCardType - (int)enemyCardType; if (result == -1 || result == 2) { winnerCard = userCard; loserCard = enemyCard; } else if (result == 0) { winnerCard = null; loserCard = null; } else { winnerCard = enemyCard; loserCard = userCard; } }
private void CardDestroyAnim(ItemMiniGameDebateCardCpt card) { CardDestroyAnim(card, 0); }