2022-12-07 12:13:57 +02:00
|
|
|
using System;
|
2022-12-04 19:19:07 +02:00
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
2022-12-07 12:13:57 +02:00
|
|
|
using TMPro;
|
2022-12-08 14:35:27 +02:00
|
|
|
using Unity.Netcode;
|
2022-12-08 03:28:59 +02:00
|
|
|
using Unity.Services.Lobbies.Models;
|
2022-12-04 19:19:07 +02:00
|
|
|
using UnityEngine;
|
2022-12-07 12:13:57 +02:00
|
|
|
using UnityEngine.EventSystems;
|
|
|
|
|
using UnityEngine.SceneManagement;
|
2022-12-08 14:35:27 +02:00
|
|
|
using UnityEngine.InputSystem;
|
2023-02-10 03:42:04 +02:00
|
|
|
using UnityEngine.UI;
|
2022-12-04 19:19:07 +02:00
|
|
|
|
|
|
|
|
public class OnlineHostMenu : BaseMenu
|
|
|
|
|
{
|
|
|
|
|
[SerializeField] private NetworkManagerLobby _networkManager = default;
|
2023-10-24 00:43:13 +03:00
|
|
|
[SerializeField] private BaseMenu _onlineMainMenu = default;
|
2022-12-07 12:13:57 +02:00
|
|
|
[SerializeField] private OnlineSetupMenu _onlineSetupMenu = default;
|
|
|
|
|
[SerializeField] private DemonNameplate[] _nameplates = default;
|
2022-12-08 17:39:21 +02:00
|
|
|
[SerializeField] private TextMeshProUGUI _readyText = default;
|
2022-12-07 12:13:57 +02:00
|
|
|
[SerializeField] private TextMeshProUGUI _lobbyIdText = default;
|
2023-02-08 18:26:49 +02:00
|
|
|
[SerializeField] private TextMeshProUGUI _currentControllerText = default;
|
2022-12-07 12:13:57 +02:00
|
|
|
[SerializeField] private GameObject _creatingLobby = default;
|
|
|
|
|
[SerializeField] private GameObject _lobbyCreated = default;
|
2022-12-09 17:21:06 +02:00
|
|
|
[SerializeField] private GameObject _exitingLobby = default;
|
2023-02-09 21:31:53 +02:00
|
|
|
[SerializeField] private BaseButton _readyButton = default;
|
2023-02-10 03:42:04 +02:00
|
|
|
[SerializeField] private Button _copyButton = default;
|
2022-12-07 12:13:57 +02:00
|
|
|
[SerializeField] private GameObject _copyLobbyId = default;
|
|
|
|
|
[SerializeField] private FadeHandler _fadeHandler = default;
|
2022-12-08 14:35:27 +02:00
|
|
|
[SerializeField] private PlayerInput _playerInput = default;
|
2023-02-10 03:42:04 +02:00
|
|
|
private Button _readyButtonComponent;
|
2022-12-07 12:13:57 +02:00
|
|
|
private string _lobbyId;
|
2023-02-13 21:47:46 +02:00
|
|
|
private PlayerInput _storedPlayerInput = default;
|
2023-02-09 03:26:35 +02:00
|
|
|
private bool _ready;
|
2022-12-07 12:13:57 +02:00
|
|
|
public bool Hosting { get; set; } = true;
|
2022-12-04 19:19:07 +02:00
|
|
|
|
2022-12-08 20:08:03 +02:00
|
|
|
async void OnEnable()
|
2022-12-04 19:19:07 +02:00
|
|
|
{
|
2023-02-10 03:42:04 +02:00
|
|
|
_readyButtonComponent = _readyButton.GetComponent<Button>();
|
2022-12-07 12:13:57 +02:00
|
|
|
if (Hosting)
|
2022-12-04 19:19:07 +02:00
|
|
|
{
|
2023-12-29 13:54:08 +02:00
|
|
|
Debug.Log(_onlineSetupMenu.DemonData.demonName);
|
2022-12-07 12:13:57 +02:00
|
|
|
_nameplates[0].SetDemonData(_onlineSetupMenu.DemonData);
|
|
|
|
|
_lobbyId = await _networkManager.CreateLobby(_onlineSetupMenu.DemonData);
|
2023-02-02 02:10:38 +02:00
|
|
|
if (_lobbyId == null)
|
|
|
|
|
{
|
|
|
|
|
_creatingLobby.SetActive(false);
|
|
|
|
|
_lobbyCreated.SetActive(true);
|
|
|
|
|
Hide();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2023-09-26 13:40:39 +03:00
|
|
|
_lobbyIdText.text = $"Room ID: {_lobbyId}";
|
2022-12-07 12:13:57 +02:00
|
|
|
_creatingLobby.SetActive(false);
|
|
|
|
|
_lobbyCreated.SetActive(true);
|
|
|
|
|
EventSystem.current.SetSelectedGameObject(null);
|
|
|
|
|
_startingOption.Select();
|
2022-12-08 03:28:59 +02:00
|
|
|
_networkManager.OnLobbyUpdate += UpdateLobby;
|
2023-02-10 17:34:15 +02:00
|
|
|
_readyButton.Deactivate();
|
2022-12-07 12:13:57 +02:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_creatingLobby.SetActive(false);
|
|
|
|
|
_lobbyCreated.SetActive(true);
|
2022-12-04 19:19:07 +02:00
|
|
|
}
|
|
|
|
|
}
|
2022-12-07 12:13:57 +02:00
|
|
|
|
2023-02-08 18:26:49 +02:00
|
|
|
private void Update()
|
|
|
|
|
{
|
2023-02-09 03:26:35 +02:00
|
|
|
if (!_ready)
|
|
|
|
|
{
|
2023-02-13 21:47:46 +02:00
|
|
|
_storedPlayerInput = _playerInput;
|
|
|
|
|
_currentControllerText.text = $"Match Controller: {_storedPlayerInput.currentControlScheme}";
|
2023-02-09 03:26:35 +02:00
|
|
|
}
|
2023-02-08 18:26:49 +02:00
|
|
|
}
|
|
|
|
|
|
2022-12-08 03:28:59 +02:00
|
|
|
private void UpdateLobby()
|
|
|
|
|
{
|
2022-12-08 14:35:27 +02:00
|
|
|
Lobby lobby = null;
|
|
|
|
|
if (Hosting)
|
|
|
|
|
{
|
|
|
|
|
lobby = _networkManager.GetHostLobby();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lobby = _networkManager.GetClientLobby();
|
|
|
|
|
}
|
2022-12-08 03:28:59 +02:00
|
|
|
List<DemonData> demonDatas = new List<DemonData>();
|
2022-12-08 14:35:27 +02:00
|
|
|
List<bool> readyList = new List<bool>();
|
2022-12-08 17:39:21 +02:00
|
|
|
_nameplates[0].gameObject.SetActive(false);
|
|
|
|
|
_nameplates[1].gameObject.SetActive(false);
|
2023-02-09 03:26:35 +02:00
|
|
|
if (lobby.Players.Count >= 2)
|
|
|
|
|
{
|
2023-02-09 21:31:53 +02:00
|
|
|
_readyButton.Activate();
|
2023-02-10 03:42:04 +02:00
|
|
|
Navigation navigation = _copyButton.navigation;
|
|
|
|
|
navigation.selectOnDown = _readyButtonComponent;
|
|
|
|
|
navigation.selectOnRight = _readyButtonComponent;
|
|
|
|
|
_copyButton.navigation = navigation;
|
2023-02-09 03:26:35 +02:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2023-02-09 21:31:53 +02:00
|
|
|
_readyButton.Deactivate();
|
2023-02-09 03:26:35 +02:00
|
|
|
}
|
2022-12-08 17:39:21 +02:00
|
|
|
for (int i = 0; i < lobby.Players.Count; i++)
|
2022-12-08 03:28:59 +02:00
|
|
|
{
|
|
|
|
|
demonDatas.Add(new DemonData()
|
|
|
|
|
{
|
2022-12-08 17:39:21 +02:00
|
|
|
demonName = lobby.Players[i].Data["DemonName"].Value,
|
|
|
|
|
character = int.Parse(lobby.Players[i].Data["Character"].Value),
|
|
|
|
|
assist = int.Parse(lobby.Players[i].Data["Assist"].Value),
|
|
|
|
|
color = int.Parse(lobby.Players[i].Data["Color"].Value),
|
2023-01-01 12:50:59 +02:00
|
|
|
ip = lobby.Players[i].Data["Ip"].Value,
|
|
|
|
|
port = int.Parse(lobby.Players[i].Data["Port"].Value),
|
|
|
|
|
privateIp = lobby.Players[i].Data["PrivateIp"].Value,
|
2022-12-08 03:28:59 +02:00
|
|
|
});
|
2022-12-08 17:39:21 +02:00
|
|
|
readyList.Add(bool.Parse(lobby.Players[i].Data["Ready"].Value));
|
|
|
|
|
_nameplates[i].SetDemonData(demonDatas[i]);
|
|
|
|
|
_nameplates[i].SetReady(readyList[i]);
|
2022-12-08 03:28:59 +02:00
|
|
|
}
|
2022-12-08 14:35:27 +02:00
|
|
|
if (readyList[0] && readyList[1])
|
|
|
|
|
{
|
|
|
|
|
_networkManager.OnLobbyUpdate -= UpdateLobby;
|
|
|
|
|
StartGame(demonDatas.ToArray());
|
|
|
|
|
}
|
2022-12-08 03:28:59 +02:00
|
|
|
}
|
|
|
|
|
|
2022-12-07 12:13:57 +02:00
|
|
|
public void CopyLobbyId()
|
|
|
|
|
{
|
|
|
|
|
GUIUtility.systemCopyBuffer = _lobbyId;
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-27 12:11:17 +03:00
|
|
|
public void OpenAsClient(DemonData[] demonDatas, string lobbyId = null)
|
2022-12-07 12:13:57 +02:00
|
|
|
{
|
2022-12-08 14:35:27 +02:00
|
|
|
_networkManager.OnLobbyUpdate += UpdateLobby;
|
2022-12-07 12:13:57 +02:00
|
|
|
Hosting = false;
|
|
|
|
|
_nameplates[0].SetDemonData(demonDatas[0]);
|
|
|
|
|
_nameplates[1].SetDemonData(demonDatas[1]);
|
|
|
|
|
_creatingLobby.SetActive(false);
|
|
|
|
|
_lobbyCreated.SetActive(true);
|
|
|
|
|
_copyLobbyId.SetActive(false);
|
2023-03-27 12:11:17 +03:00
|
|
|
if (lobbyId == null)
|
|
|
|
|
_lobbyIdText.text = "";
|
|
|
|
|
else
|
2023-09-26 13:40:39 +03:00
|
|
|
_lobbyIdText.text = $"Room ID: {lobbyId.ToUpper()}";
|
2022-12-07 12:13:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Ready()
|
|
|
|
|
{
|
2022-12-08 14:35:27 +02:00
|
|
|
if (Hosting)
|
|
|
|
|
{
|
2023-02-09 03:26:35 +02:00
|
|
|
_ready = _nameplates[0].ToggleReady();
|
|
|
|
|
if (_ready)
|
2022-12-08 17:39:21 +02:00
|
|
|
{
|
|
|
|
|
_readyText.text = "Cancel";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_readyText.text = "Ready";
|
|
|
|
|
}
|
2023-02-09 03:26:35 +02:00
|
|
|
_networkManager.UpdateLobbyReady(_ready, true);
|
2022-12-08 14:35:27 +02:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2023-02-09 03:26:35 +02:00
|
|
|
_ready = _nameplates[1].ToggleReady();
|
|
|
|
|
if (_ready)
|
2022-12-08 17:39:21 +02:00
|
|
|
{
|
|
|
|
|
_readyText.text = "Cancel";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_readyText.text = "Ready";
|
|
|
|
|
}
|
2023-02-09 03:26:35 +02:00
|
|
|
_networkManager.UpdateLobbyReady(_ready, false);
|
2022-12-08 14:35:27 +02:00
|
|
|
}
|
2022-12-07 12:13:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void StartGame(DemonData[] demonDatas)
|
|
|
|
|
{
|
|
|
|
|
SceneSettings.IsOnline = true;
|
2022-12-08 03:28:59 +02:00
|
|
|
if (Hosting)
|
|
|
|
|
{
|
|
|
|
|
SceneSettings.OnlineIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SceneSettings.OnlineIndex = 1;
|
|
|
|
|
}
|
2022-12-08 15:21:39 +02:00
|
|
|
SceneSettings.NameOne = demonDatas[0].demonName;
|
|
|
|
|
SceneSettings.NameTwo = demonDatas[1].demonName;
|
|
|
|
|
SceneSettings.OnlineOneIp = demonDatas[0].ip;
|
|
|
|
|
SceneSettings.OnlineTwoIp = demonDatas[1].ip;
|
2023-01-01 12:50:59 +02:00
|
|
|
SceneSettings.PortOne = demonDatas[0].port;
|
|
|
|
|
SceneSettings.PortTwo = demonDatas[1].port;
|
|
|
|
|
SceneSettings.PrivateOneIp = demonDatas[0].privateIp;
|
|
|
|
|
SceneSettings.PrivateTwoIp = demonDatas[1].privateIp;
|
2022-12-08 15:21:39 +02:00
|
|
|
SceneSettings.ColorTwo = demonDatas[1].color;
|
2023-02-13 21:47:46 +02:00
|
|
|
SceneSettings.ControllerOne = _storedPlayerInput.devices[0];
|
|
|
|
|
SceneSettings.ControllerTwo = _storedPlayerInput.devices[0];
|
|
|
|
|
SceneSettings.ControllerOneScheme = Hosting == true ? _storedPlayerInput.currentControlScheme : "Keyboard";
|
|
|
|
|
SceneSettings.ControllerTwoScheme = Hosting == false ? _storedPlayerInput.currentControlScheme : "Keyboard";
|
2022-12-07 12:13:57 +02:00
|
|
|
SceneSettings.PlayerOne = demonDatas[0].character;
|
|
|
|
|
SceneSettings.PlayerTwo = demonDatas[1].character;
|
|
|
|
|
SceneSettings.AssistOne = demonDatas[0].assist;
|
|
|
|
|
SceneSettings.AssistTwo = demonDatas[1].assist;
|
|
|
|
|
SceneSettings.ColorOne = demonDatas[0].color;
|
|
|
|
|
SceneSettings.ColorTwo = demonDatas[1].color;
|
|
|
|
|
SceneSettings.SceneSettingsDecide = true;
|
2023-03-18 17:21:22 +02:00
|
|
|
SceneSettings.Bit1 = SceneSettings.OnlineBit1;
|
2023-03-18 11:54:03 +02:00
|
|
|
if (SceneSettings.OnlineStageRandom)
|
|
|
|
|
SceneSettings.StageIndex = UnityEngine.Random.Range(0, Enum.GetNames(typeof(StageTypeEnum)).Length - 1);
|
|
|
|
|
else
|
|
|
|
|
SceneSettings.StageIndex = SceneSettings.OnlineStageIndex;
|
|
|
|
|
SceneSettings.MusicName = SceneSettings.OnlineMusicName;
|
2023-09-26 01:27:40 +03:00
|
|
|
_fadeHandler.onFadeEnd.AddListener(() => SceneManager.LoadScene(1, LoadSceneMode.Single));
|
|
|
|
|
_fadeHandler.StartFadeTransition(true, 0.35f);
|
2022-12-07 12:13:57 +02:00
|
|
|
}
|
2022-12-08 03:28:59 +02:00
|
|
|
|
2022-12-09 17:21:06 +02:00
|
|
|
public async void QuitLobby()
|
2022-12-08 03:28:59 +02:00
|
|
|
{
|
2022-12-09 17:21:06 +02:00
|
|
|
_creatingLobby.SetActive(false);
|
2022-12-08 17:39:21 +02:00
|
|
|
_lobbyCreated.SetActive(false);
|
2022-12-08 03:28:59 +02:00
|
|
|
if (Hosting)
|
|
|
|
|
{
|
2022-12-09 17:21:06 +02:00
|
|
|
_exitingLobby.SetActive(true);
|
|
|
|
|
await _networkManager.DeleteLobby();
|
|
|
|
|
OpenMenuHideCurrent(_onlineMainMenu);
|
|
|
|
|
_exitingLobby.SetActive(false);
|
|
|
|
|
_creatingLobby.SetActive(true);
|
2022-12-08 03:28:59 +02:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2022-12-09 17:44:02 +02:00
|
|
|
_exitingLobby.SetActive(true);
|
|
|
|
|
await _networkManager.LeaveLobby();
|
|
|
|
|
OpenMenuHideCurrent(_onlineMainMenu);
|
|
|
|
|
_exitingLobby.SetActive(false);
|
|
|
|
|
_creatingLobby.SetActive(true);
|
2022-12-08 03:28:59 +02:00
|
|
|
}
|
|
|
|
|
}
|
2022-12-04 19:19:07 +02:00
|
|
|
}
|