/// <summary> /// 创建角色 /// </summary> /// <param name="characterPosition"></param> /// <param name="miniGameCharacterData"></param> private NpcAIMiniGameDebateCpt CreateCharacter(Vector3 characterPosition, MiniGameCharacterForDebateBean miniGameCharacterData) { //创建角色 GameObject objCharacter = Instantiate(objCharacterContainer, objCharacterModel, characterPosition); NpcAIMiniGameDebateCpt npcCpt = objCharacter.GetComponent <NpcAIMiniGameDebateCpt>(); npcCpt.SetData(miniGameCharacterData); return(npcCpt); }
/// <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="isWinGame"></param> /// <returns></returns> public bool CheckIsGameOver(out MiniGameResultEnum gameResult) { gameResult = MiniGameResultEnum.Lose; NpcAIMiniGameDebateCpt userCharacter = miniGameBuilder.GetUserCharacter(); NpcAIMiniGameDebateCpt enemyCharacter = miniGameBuilder.GetEnemyCharacter(); if (userCharacter.characterMiniGameData.characterCurrentLife <= 0 || enemyCharacter.characterMiniGameData.characterCurrentLife <= 0) { if (userCharacter.characterMiniGameData.characterCurrentLife <= 0) { gameResult = MiniGameResultEnum.Lose; } else if (enemyCharacter.characterMiniGameData.characterCurrentLife <= 0) { gameResult = MiniGameResultEnum.Win; } return(true); } return(false); }
/// <summary> /// 协程战斗 /// </summary> /// <param name="time"></param> /// <param name="winner"></param> /// <param name="loser"></param> /// <returns></returns> public IEnumerator CoroutineForCombat(float time, NpcAIMiniGameDebateCpt winner, NpcAIMiniGameDebateCpt loser) { yield return(new WaitForSeconds(time)); if (winner != null && loser != null) { winner.characterData.GetAttributes(out CharacterAttributesBean characterAttributes); int damageNumber = characterAttributes.charm * 2; loser.UnderAttack(damageNumber); } uiMiniGameDebate.RefreshUI(); //检测是否结束游戏 if (CheckIsGameOver(out MiniGameResultEnum gameResult)) { EndGame(gameResult); } else { StartNewRound(); } }
/// <summary> /// 创建敌人角色 /// </summary> /// <param name="enemyCharacter"></param> /// <param name="debatePosition"></param> public void CreateEnemyCharcater(MiniGameCharacterBean enemyCharacterData, Vector3 debatePosition) { aiEnemyCharacter = CreateCharacter(new Vector3(debatePosition.x + 2.5f, debatePosition.y), (MiniGameCharacterForDebateBean)enemyCharacterData); aiEnemyCharacter.SetCharacterFace(1); }
/// <summary> /// 创建用户角色 /// </summary> /// <param name="userCharacter"></param> /// <param name="debatePosition"></param> public void CreateUserCharacter(MiniGameCharacterBean userCharacterData, Vector3 debatePosition) { aiUserCharacter = CreateCharacter(new Vector3(debatePosition.x - 2.5f, debatePosition.y), (MiniGameCharacterForDebateBean)userCharacterData); aiUserCharacter.SetCharacterFace(2); }
/// <summary> /// 删除所有角色 /// </summary> public void DestroyAllCharacter() { CptUtil.RemoveChildsByActive(objCharacterContainer); aiUserCharacter = null; aiEnemyCharacter = null; }