int nFinishType;// = -1; public void OnTick(CNewBattle battle) { if (IsBattleEnd) { // 종료 처리 battle.GetForm().CloseBattle(nFinishType); Screen.Inst().WriteLine(""); switch (nFinishType) { case 0: // 적 전멸 Screen.Inst().WriteLine("You defeated all enemies.\nBattle ends."); break; case 1: // 아군 전멸 Screen.Inst().WriteLine("You all died.\nBattle ends."); break; case 2: // 도망 성공 Screen.Inst().WriteLine("You escaped from battle.\nBattle ends."); break; case 3: // 이벤트 Screen.Inst().WriteLine("Battle ends by event."); break; default: // 에러 System.Diagnostics.Debug.Assert(false, "FinishType error."); Screen.Inst().WriteLine("Battle ends. Finish Type error."); break; } // 전투 종료. null state 로 이전. battle.GetStateMachine().ChangeState(new NullState()); return; } else { if (m_CurrentCharIdx >= m_Initiativities.Count) // m_InitiList.Length) { // 전투가 끝나지 않았다면 다시 커맨드를 입력받는다. battle.GetStateMachine().ChangeState(new SelectCmdState()); return; } } bool bFinished = false; //foreach (int i in m_InitiList) // 우선권에 따라 명령을 하나씩 수행 //{ Command cmd = m_Initiativities[m_CurrentCharIdx].Cmd; if (cmd.actor.IsAlive()) { if (cmd.Run()) // cmd tick 이 끝나면 다음 cmd 로 이전. { ++m_CurrentCharIdx; bFinished = true; battle.CheckBattleEnd(out nFinishType, out bFinished, cmd); } Screen.Inst().UpdateCharacterParams(); //if (bFinished) // break; } else { //Screen.Inst().WriteLine(""); //Screen.Inst().WriteLine(String.Format("{0}은(는) 이미 죽어있다.", cmd.actor.Name)); ++m_CurrentCharIdx; OnTick(battle); return; } //} if (bFinished) { IsBattleEnd = true; } }