public void DoFlowWork() { switch (GameData.gameFlow) { // 아직 게임 시작 안됨 case Flow.Wait: { // 로딩 완료 대기 if (loadingManager.isFinish) { return; } // 세이브 파일 로드 if (GameSaver.useLoad) { GameSaver.LoadGameInfo(); } // 세이브파일 작성 // 미구현================ // 원본에서 복사할것 // 중력 설정 if (flowCopy == Flow.Wait) { Physics.gravity = Physics.gravity * 10; } // 플레이어 구성 초기화 { if (GameData.gameMode == GameMode.Mode.None) { return; } else if (GameData.gameMode == GameMode.Mode.Online) { // 미구현 : 별도 지정 필요=========== } else if (Player.allPlayer.Count == 0) { // 중복 방지 작업 List <int> picked = Tool.RandomNotCross(1, Character.table.Count, 4); if (picked.Contains(Player.me.character.index)) { picked.Remove(Player.me.character.index); } // 플레이어 초기화 및 리스트 구성 Player.player_1 = Player.me; Player.allPlayer.Add(Player.player_1); if (GameRule.playerCount >= 2) { Player.player_2 = new Player(Player.Type.AI, picked[0], true, "Player02"); Player.allPlayer.Add(Player.player_2); } if (GameRule.playerCount >= 3) { Player.player_3 = new Player(Player.Type.AI, picked[1], true, "Player03"); Player.allPlayer.Add(Player.player_3); } if (GameRule.playerCount >= 4) { Player.player_4 = new Player(Player.Type.AI, picked[2], true, "Player04"); Player.allPlayer.Add(Player.player_4); } // 시스템 플레이어 - 다른 플레이어 설정 Player.system.Monster.otherPlayers = new List <Player>(Player.allPlayer); } } // 캐릭터 생성 및 캐릭터 아이콘 로드 for (int i = 0; i < Player.allPlayer.Count; i++) { // 대상 플레이어 Player current = Player.allPlayer[i]; // 캐릭터 아이콘 로드 current.LoadFace(); // "다른 플레이어" 구성 { // 모든 플레이어 등록 for (int j = 0; j < Player.allPlayer.Count; j++) { current.otherPlayers.Add(Player.allPlayer[j]); } // 등록자 본인 제외 current.otherPlayers.Remove(current); } // 캐릭터 생성 if (Player.allPlayer[i].avatar == null) { // 캐릭터 생성 current.CreateAvatar(characterParent); current.avatar.name = "p" + (i + 1); // 캐릭터 이동 if (current.movement.location == -1) { current.avatar.transform.position = GameData.blockManager.startBlock.position; } else { current.avatar.transform.position = GameData.blockManager.GetBlock(current.movement.location).transform.position; } } // 미니게임 정보 초기화 if (Player.allPlayer[i].miniInfo == null) { Player.allPlayer[i].miniInfo = new MiniScore(); } } // PlayerInfo UI 비활성 MainUI.GetComponent <CanvasGroup>().alpha = 0f; MainUI.blocksRaycasts = false; // 숏컷 등록 ShortcutManager.script.SetUp(); // 사이클 설정 Cycle.goal = GameRule.cycleMax; // 세이브 파일 로드 if (GameSaver.useLoad) { GameSaver.LoadPlayer(); GameSaver.LoadItemObject(); GameSaver.LoadEventObject(); } // 캐릭터 겹침 해소 //Player.me.movement.AvatarOverFix(); CharacterMover.AvatarOverFixAll(); Debug.Log("게임 플로우 :: 새 게임 호출 확인됨"); GameData.gameFlow = Flow.Start; break; } // 게임 시작됨 case Flow.Start: { // 로딩중일 경우 대기 if (!loadingManager.isFinish || !loadingManager.isFadeFinish) { return; } // 맵 둘러보기 // 미구현================== Debug.Log("게임 플로우 :: 게임 시작 확인됨"); GameData.gameFlow = Flow.Ordering; break; } // 순서주사위 case Flow.Ordering: // 순서주사위 굴리기 { // 씬 재로드 제어 if (flowCopy <= Flow.Ordering && !GameSaver.useLoad) { //Debug.Log("게임 플로우 :: 순서 주사위 확인중"); // 주사위를 아무도 굴리지 않을때 if (diceController.isFree) { // 플레이어별 체크 for (int i = 0; i < Player.allPlayer.Count; i++) { Player current = Player.allPlayer[i]; // 이미 굴렸으면 다음 플레이어 처리 if (current.dice.isRolled) { continue; } // 해당 플레이어가 굴리고 있지 않으면 주사위 호출 if (!current.dice.isRolling) { Debug.Log(string.Format("게임 플로우 :: Player{0} 주사위 굴리는중", i + 1)); // 주사위 지급 Player.allPlayer[i].dice.count = 1; // 주사위 기능 호출 diceController.CallDice( current, current.avatar.transform ); // 다른 플레이어 무시 break; } } } // 주사위 마무리 if (diceController.isFinish) { diceController.UseDice(); } // 모두가 주사위 굴리지 않으면 중단 for (int i = 0; i < Player.allPlayer.Count; i++) { if (!Player.allPlayer[i].dice.isRolled) { return; } } Debug.Log("게임 플로우 :: 모든 플레이어 주사위 굴림 완료 =>" + Player.allPlayer.Count); } else { // 씬 재로드시 Opening 스킵 // 아래 PlayerInfo UI 초기화 문제로 return하면 안됨 GameData.gameFlow = Flow.Cycling; } // 순서용 리스트 복사 List <Player> pOrderList = new List <Player>(Player.allPlayer); //Debug.Log("게임 플로우 :: 리스트 복사 체크 =>" + pOrderList.Count + " = " + Player.allPlayer.Count); // 순서큐 셋팅 및 리스트 순차 정리 Turn.SetUp(pOrderList); // 모든 플레이어 주사위 굴림완료 상태 초기화 for (int i = 0; i < Player.allPlayer.Count; i++) { Player.allPlayer[i].dice.Clear(); } // PlayerInfo UI 초기화 for (int i = 0; i < pOrderList.Count; i++) { pOrderList[i].infoUI = playerInfoUI[i]; pOrderList[i].infoUI.SetPlayer(pOrderList[i]); } // 미할당 PlayerInfo UI 제거 for (int i = Player.allPlayer.Count; i < playerInfoUI.Count; i++) { playerInfoUI[i].gameObject.SetActive(false); } // 세이브 파일 로드 if (GameSaver.useLoad) { GameSaver.LoadPlayerInventory(); // 스타트 플레이어 강제 호출 TurnWork(); GameSaver.LoadTurn(); } GameSaver.Clear(); //// 순서큐 셋팅 및 리스트 순차 정리 //Turn.SetUp(pOrderList); // PlayerInfo UI 활성 StartCoroutine(Tool.CanvasFade(MainUI, true, 1.5f)); MainUI.blocksRaycasts = true; //GameData.gameFlow = Flow.CycleStart; GameData.gameFlow = Flow.Opening; break; } // 사이클링 시작 전 오프닝 단계 case Flow.Opening: { // 연출 일단 생략 // 턴 시작 if (Cycle.now == 0) { Cycle.now = 1; } GameData.gameFlow = Flow.Cycling; break; } // 게임 진행 case Flow.Cycling: if (Cycle.isEnd()) { Debug.Log("게임 플로우 :: 종료 조건 달성 확인됨 => by " + Turn.now.name); GameData.gameFlow = Flow.End; } else { TurnWork(); } break; /* * case Flow.Turn: * if (Turn.now == Player.system.Minigame) * GameData.gameFlow = Flow.MiniGameStart; * else if (Turn.now == Player.system.Ender) * GameData.gameFlow = Flow.CycleEnd; * break; * case Flow.MiniGameStart: * GameData.gameFlow = Flow.MiniGame; * break; * case Flow.MiniGame: * GameData.gameFlow = Flow.MiniGameEnd; * break; * case Flow.MiniGameEnd: * GameData.gameFlow = Flow.Turn; // 주의 : 다시 턴으로 돌아가서 시스템 플레이어 엔더 역할 수행됨 * break; * case Flow.CycleEnd: * if(Cycle.isEnd()) * GameData.gameFlow = Flow.End; * else * GameData.gameFlow = Flow.CycleStart; * break; */ // 게임 종료됨 case Flow.End: GameData.gameFlow = Flow.Trophy; break; // 트로피 지급 및 우승자 발표 case Flow.Trophy: GameData.gameFlow = Flow.Finish; break; // 게임 종료됨 case Flow.Finish: break; } }