private IEnumerator doNextAction() { // 如果当前状态下船上有人,就先让人下船 int temp = 0; for (int i = 0; i < 2; i++) { if (BoatAndCreature[i] != null) { temp++; } } if (temp != 0) { GoOffBoard(0); GoOffBoard(1); yield return(new WaitForSeconds(1.2f)); } // 首先判断当前的情况,处于什么状态,得出下一步的动作是什么 NEXT_ACTION nextAction = getNextAction(); if (SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { if (nextAction == NEXT_ACTION.P) { leftShorePriestGoOnBoat(priestOnLeftshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.PP) { leftShorePriestGoOnBoat(priestOnLeftshore.ToArray()[0].name); leftShorePriestGoOnBoat(priestOnLeftshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.D) { leftShoreDevilGoOnBoat(devilOnLeftshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.DD) { leftShoreDevilGoOnBoat(devilOnLeftshore.ToArray()[0].name); leftShoreDevilGoOnBoat(devilOnLeftshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.PD) { leftShorePriestGoOnBoat(priestOnLeftshore.ToArray()[0].name); leftShoreDevilGoOnBoat(devilOnLeftshore.ToArray()[0].name); } } else { if (nextAction == NEXT_ACTION.P) { rightShorePriestGoOnBoat(priestOnRightshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.PP) { rightShorePriestGoOnBoat(priestOnRightshore.ToArray()[0].name); rightShorePriestGoOnBoat(priestOnRightshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.D) { rightShoreDevilGoOnBoat(devilOnRightshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.DD) { rightShoreDevilGoOnBoat(devilOnRightshore.ToArray()[0].name); rightShoreDevilGoOnBoat(devilOnRightshore.ToArray()[0].name); } else if (nextAction == NEXT_ACTION.PD) { rightShorePriestGoOnBoat(priestOnRightshore.ToArray()[0].name); rightShoreDevilGoOnBoat(devilOnRightshore.ToArray()[0].name); } } yield return(new WaitForSeconds(1.2f)); // 开船 moveBoat(); yield return(new WaitForSeconds(1.2f)); // 下船 GoOffBoard(0); GoOffBoard(1); yield return(new WaitForSeconds(1.2f)); isPrompting = false; }
NEXT_ACTION getNextAction() { NEXT_ACTION nextAction = NEXT_ACTION.P; int Pcount = priestOnLeftshore.Count; int Dcount = devilOnLeftshore.Count; if (Pcount == 3 && Dcount == 3 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.DD; } else if (Pcount == 2 && Dcount == 2 && SSDirector.getInstance().state != State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.P; } else if (Pcount == 3 && Dcount == 2 && SSDirector.getInstance().state != State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.D; } else if (Pcount == 3 && Dcount == 1 && SSDirector.getInstance().state != State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.D; } else if (Pcount == 3 && Dcount == 2 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.DD; } else if (Pcount == 3 && Dcount == 1 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.PP; } else if (Pcount == 3 && Dcount == 0 && SSDirector.getInstance().state != State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.D; } else if (Pcount == 1 && Dcount == 1 && SSDirector.getInstance().state != State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.PD; } else if (Pcount == 2 && Dcount == 2 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.PP; } else if (Pcount == 0 && Dcount == 2 && SSDirector.getInstance().state != State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.D; } else if (Pcount == 0 && Dcount == 3 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.DD; } else if (Pcount == 2 && Dcount == 1 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.PP; } else if (Pcount == 0 && Dcount == 1 && SSDirector.getInstance().state != State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.P; } else if (Pcount == 1 && Dcount == 1 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.PD; } else if (Pcount == 0 && Dcount == 2 && SSDirector.getInstance().state == State.BOAT_STOP_ON_THE_LEFT_SHORE) { nextAction = NEXT_ACTION.DD; } return(nextAction); }