using System;
using System.Collections;
using System.Collections.Generic;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
using UnityEngine.SceneManagement;

public class InGameLobbySceneManager : MonoBehaviourPunCallbacks
{
ย  ย  public GameObject GameStartScene;
ย  ย  public GameObject InGameLobbyScene;


ย  ย  // ํ”Œ๋ ˆ์ด์–ด ์ธ ๊ฒŒ์ž„ ๋กœ๋น„ ์ž…์žฅ ๋ฌด์ž‘์œ„ ๋ฐฐ์น˜
ย  ย  void Start()
ย  ย  {
ย  ย  ย  ย  // ๋žœ๋ค ์Šคํฐ ์œ„์น˜ ์„ค์ •
ย  ย  ย  ย  Transform[] spown = GameObject.Find("SpownerLobby").GetComponentsInChildren<Transform>();
ย  ย  ย  ย  int idx = UnityEngine.Random.Range(1, spown.Length);

ย  ย  ย  ย  GameObject player = PhotonNetwork.Instantiate("Player", spown[idx].position, spown[idx].rotation, 0);
ย  ย  }

ย  ย 
ย  ย  // ๊ฒŒ์ž„ ์‹œ์ž‘ ๋ฒ„ํŠผ ๋ˆ„๋ฅผ ๋•Œ, ํ•จ์ˆ˜
ย  ย  public void GameStartCanvasON(){ย  ย  ย  ย 
ย  ย  ย  ย  // ๊ฒŒ์ž„ ์‹œ์ž‘ 5์ดˆ ํ›„ MainScene์œผ๋กœ ์ด๋™
ย  ย  ย  ย  ChangeSceneWithDelay(6.0f);
ย  ย  }

ย  ย  // ์ผ์ • ์‹œ๊ฐ„ ํ›„์— ์”ฌ ์ „ํ™˜์„ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ
ย  ย  public void ChangeSceneWithDelay(float delay)
ย  ย  {
ย  ย  ย  ย  StartCoroutine(ChangeAfterDelay(delay));
ย  ย  }

ย  ย // ์ง€์—ฐ ํ›„ ์”ฌ ๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์ฝ”๋ฃจํ‹ด
ย  ย IEnumerator ChangeAfterDelay(float delay)
ย  ย {
ย  ย  ย  ย if(PhotonNetwork.IsMasterClient)
ย  ย  ย  ย {
ย  ย  ย  ย  ย  ย  GameMainRandomSpawn();
ย  ย  ย  ย }

ย  ย  ย  ย // ์ง€์ •๋œ ์‹œ๊ฐ„๋งŒํผ ๋Œ€๊ธฐ
ย  ย  ย  ย yield return new WaitForSeconds(delay);

ย  ย  ย  ย // MainScene ๋กœ๋“œ (GameStartScene OFF)
ย  ย  ย  ย print("// MainScene ๋กœ๋“œ (GameStartScene OFF)");
ย  ย  // ย  ย GameStartScene.SetActive(false);
ย  ย }


ย  ย  [PunRPC]
ย  ย  public void RandomSpawnPlayersRPC(int viewID)
ย  ย  { ย 
ย  ย  ย  ย  print("// ๋žœ๋ค ์Šคํฐ ์œ„์น˜ ์„ค์ •");
ย  ย  ย  ย  // ๋žœ๋ค ์Šคํฐ ์œ„์น˜ ์„ค์ •
ย  ย  ย  ย  Transform[] spown = GameObject.Find("Spowner").GetComponentsInChildren<Transform>();
ย  ย  ย  ย  int idx = UnityEngine.Random.Range(1, spown.Length);

ย  ย  ย  ย  // ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ ์”ฌ์— ์žˆ๋Š” ๋ชจ๋“  PhotonView ์˜ค๋ธŒ์ ํŠธ ์ค‘์—
ย  ย  ย  ย  // ๋งค๊ฐœ ๋ณ€์ˆ˜ ViewID ์— ํ•ด๋‹นํ•˜๋Š” PhotonView ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.
ย  ย  ย  ย  PhotonView pv = PhotonView.Find(viewID);

ย  ย  ย  ย  pv.transform.position = spown[idx].position;
ย  ย  }
ย  ย 
ย  ย  // ํ”Œ๋ ˆ์ด์–ด ๋ฉ”์ธ ๊ฒŒ์ž„ ์ž…์žฅ ๋ฌด์ž‘์œ„ ๋ฐฐ์น˜
ย  ย  public void GameMainRandomSpawn()
ย  ย  {

ย  ย  ย  ย  ย  ย  // ํ˜„์žฌ ์”ฌ์— ์žˆ๋Š” ๋ชจ๋“  "Player" ํƒœ๊ทธ๋กœ๋œ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
ย  ย  ย  ย  ย  ย  // ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ.
ย  ย  ย  ย  ย  ย  GameObject[] players = GameObject.FindGameObjectsWithTag("Player");

ย  ย  ย  ย  ย  ย  // ๋ชจ๋“  "Players" ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋Œ๋ฆฐ๋‹ค.
ย  ย  ย  ย  ย  ย  foreach (var player in players)
ย  ย  ย  ย  ย  ย  {
ย  ย  ย  ย  ย  ย  ย  ย  // "Player" ์˜ค๋ธŒ์ ํŠธ์˜ PhotonView ์ปดํฌ๋„ŒํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
ย  ย  ย  ย  ย  ย  ย  ย  PhotonView pv = player.GetComponent<PhotonView>();

ย  ย  ย  ย  ย  ย  ย  ย  if(pv != null)
ย  ย  ย  ย  ย  ย  ย  ย  { ย 
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  // ์ถœ๋ ฅ ์˜ˆ์ƒ ๊ฐ’ : 1001 , 2001, 3001, 4001 ...
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  print(pv.ViewID);
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  print("RPC ํ˜ธ์ถœ ์ „: " + pv.transform.position);
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  // "Player" ์˜ค๋ธŒ์ ํŠธ์˜ ViewID ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๊ณ ,
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  // ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์ธก์— ์žˆ๋Š” AssignJobToPlayersRPC() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  photonView.RPC("RandomSpawnPlayersRPC", RpcTarget.All, pv.ViewID);
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  print("RPC ํ˜ธ์ถœ ํ›„: " + pv.transform.position);
ย  ย  ย  ย  ย  ย  ย  ย  }
ย  ย  ย  ย  ย  ย  }
ย  ย  }



ย  ย  public void ExitInGameLobbyRoom(){
ย  ย  ย  ย  print("Ext In Game Lobby Csnene");
ย  ย  ย  ย 
ย  ย  ย  ย  // ๊ฒŒ์ž„ ๋ฐฉ ๋– ๋‚˜๊ธฐ
ย  ย  ย  ย  PhotonNetwork.LeaveRoom();
ย  ย  ย  ย  // ์”ฌ ์ „ํ™˜
ย  ย  ย  ย  SceneManager.LoadScene("MenuScene");
ย  ย  }
}


์œ„์˜ ์ฝ”๋“œ๋Š” ์œ ๋‹ˆํ‹ฐ์—์„œ ํฌํ†ค์„ ํ™œ์šฉํ•˜์—ฌ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ฒŒ์ž„์„ ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.


์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.


๋งˆ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐฉ์„ ์ƒ์„ฑํ•œ ํ›„, ํ”Œ๋ ˆ์ด์–ด๋“ค์ด ๋ฐฉ์— ์ž…์žฅํ•ฉ๋‹ˆ๋‹ค. (Start() ํ•จ์ˆ˜)

๊ทธ ํ›„, ๋งˆ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฒŒ์ž„ ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด GameStartCanvasOn() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„, ๋งˆ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํฌํ•จํ•œ ํ˜„์žฌ ๊ฒŒ์ž„ ๋ฐฉ์˜ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋“ค์˜ ์œ„์น˜๋ฅผ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœย ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. (GameMainRandomSpawn() , RandeomSpanPlayersRPC() ํ•จ์ˆ˜)


๊ทธ๋Ÿฐ๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฒŒ์ž„ ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ๋งˆ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ”Œ๋ ˆ์ด์–ด๋“ค์˜ ์œ„์น˜๋ฅผ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.


print ๋กœ ์ถœ๋ ฅ์„ ํ•˜๋ฉด, ๋งˆ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ๋„ RPC ํ†ต์‹  ํ›„์— ๋ฐ”๋€ ์œ„์น˜ ๊ฐ’์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ ์œ ๋‹ˆํ‹ฐ์—์„œ ๋ณด๋ฉด, ๋งˆ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ๋งŒ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์ œ๋ฐœ ๋„์™€์ฃผ์„ธ์š”!