Example #1
0
    /// <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);
    }
Example #2
0
    /// <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));
    }
Example #3
0
    /// <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);
    }
Example #4
0
    /// <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();
        }
    }
Example #5
0
 /// <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);
 }
Example #6
0
 /// <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);
 }
Example #7
0
 /// <summary>
 /// 删除所有角色
 /// </summary>
 public void DestroyAllCharacter()
 {
     CptUtil.RemoveChildsByActive(objCharacterContainer);
     aiUserCharacter  = null;
     aiEnemyCharacter = null;
 }