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); } }
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); } } } }
/// <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后 } }
/// <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; } }
public static void FireOnTurnComplete(TurnBase turnBase, TurnBaseRuningState result) { Debug.LogError("回合结束 " + turnBase.turnCounter); onTurnComplete.Invoke(turnBase, result); }