Ejemplo n.º 1
0
    void NextEntityTurn()
    {
        TurnBaseRuningState completeResult = GetTurnCompleteResult();

        if (completeResult == TurnBaseRuningState.NextEntityTurn)
        {
            if (curController != null)
            {
                Debug.LogError("当前有正在行动的Entity");
            }
            else if (m_ReadyControllerList.Count > 0)
            {
                CControllerComponent target = m_ReadyControllerList[0];
                m_ReadyControllerList.RemoveAt(0);
                curController = target;
                curController.TurnStart(this);
            }
            else
            {
                Complete(TurnBaseRuningState.NextTurn);
            }
        }
        else
        {
            Complete(completeResult);
        }
    }
Ejemplo n.º 2
0
    void OnEntityDead(Entity entity)
    {
        CControllerComponent t = entity.GetCComponent <CControllerComponent>();

        if (t != null)
        {
            RemoveFromReadyController(t);
            RemoveFromAliveController(t);
            if (t != curController)
            {
                //如果是正在行动的Entity死亡,就不做判断,因为正在行动的Entity死亡时,会自动终止自己的回合从而在下一个Entity行动开始前判断
                TurnBaseRuningState completeResult = GetTurnCompleteResult();
                if (completeResult != TurnBaseRuningState.NextEntityTurn)
                {
                    Complete(completeResult);
                }
            }
        }
    }
Ejemplo n.º 3
0
 /// <summary>
 /// 结束回合
 /// </summary>
 void Complete(TurnBaseRuningState result)
 {
     if (state == State.Playing)
     {
         state = State.Complete;
         if (m_AliveControllerList.Count > 0)
         {
             List <CControllerComponent> tempList = new List <CControllerComponent>(m_AliveControllerList);
             foreach (CControllerComponent t in tempList)
             {
                 RemoveFromAliveController(t);
             }
             tempList.Clear();
         }
         m_ReadyControllerList.Clear();
         curController = null;
         GameEvent.EntityEvent.onEntityBorn.RemoveListener(OnEntityBorn);
         GameEvent.EntityEvent.onEntityDead.RemoveListener(OnEntityDead);
         GameEvent.TurnBaseEvent.FireOnTurnComplete(this, result);
         TurnBaseManager.instance.OnTurnComplete(this, result);  //单独回调,保证CombatComplete消息在TurnComplete后
     }
 }
Ejemplo n.º 4
0
    /// <summary>
    /// 完成当前回合
    /// </summary>
    public void OnTurnComplete(TurnBase turnBase, TurnBaseRuningState result)
    {
        if (turnBase != curTurnBase)
        {
            Debug.LogError("结束的回合不是当前的回合");
            return;
        }

        switch (result)
        {
        case TurnBaseRuningState.NextTurn:
            NextTurn();
            break;

        case TurnBaseRuningState.Lost:
            CombatComplete(CombatResult.Lost);
            break;

        case TurnBaseRuningState.Win:
            CombatComplete(CombatResult.Win);
            break;
        }
    }
Ejemplo n.º 5
0
 public static void FireOnTurnComplete(TurnBase turnBase, TurnBaseRuningState result)
 {
     Debug.LogError("回合结束 " + turnBase.turnCounter);
     onTurnComplete.Invoke(turnBase, result);
 }