Skip to content

Commit

Permalink
Hooked in the starting game UI functions to network events to load th…
Browse files Browse the repository at this point in the history
…e next scene and start the online match
  • Loading branch information
jiwoojang committed Jan 16, 2019
1 parent 044909c commit c0f1975
Show file tree
Hide file tree
Showing 8 changed files with 1,320 additions and 426 deletions.
1,600 changes: 1,193 additions & 407 deletions Assets/Scenes/Menu.unity

Large diffs are not rendered by default.

46 changes: 35 additions & 11 deletions Assets/Scripts/Networking/NetworkManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
using UnityEngine;
using KickDive.Match;
using Photon.Realtime;
using ExitGames.Client.Photon;
using Hashtable = ExitGames.Client.Photon.Hashtable;

// All things at the game-level related to network live here
// Accessible as a singleton
namespace Photon.Pun {
public class NetworkManager : MonoBehaviourPunCallbacks {
public class NetworkManager : MonoBehaviourPunCallbacks, IOnEventCallback {

public static NetworkManager instance;
public static PlayerNumber playerNumber = PlayerNumber.None;
Expand All @@ -33,8 +34,10 @@ public class NetworkManager : MonoBehaviourPunCallbacks {
[SerializeField]
private string _playerPrefabName;
private string _gameVersion = "1.0";
private readonly byte startGameEventCode = 0;

private PhotonView _playerPrefabPhotonView;
private MatchManager _matchManagerInstace;

public override void OnEnable() {
// Register the manager as a callback reciever
Expand Down Expand Up @@ -75,18 +78,19 @@ public void ConnectToMaster() {
}

public override void OnConnectedToMaster() {
Debug.Log("Connected to Photon master server");
isConnectedToMaster = true;

// Set custom some player properties before joining room
Hashtable playerProperties = new Hashtable();
playerProperties["Ping"] = PhotonNetwork.GetPing();

PhotonNetwork.LocalPlayer.SetCustomProperties(playerProperties);

// Fire Event
if (OnConnectedToPhotonMaster != null)
if (OnConnectedToPhotonMaster != null && !isConnectedToMaster) {
OnConnectedToPhotonMaster();

Debug.Log("Connected to Photon master server");
isConnectedToMaster = true;
}
}

// Joining a room
Expand All @@ -97,6 +101,10 @@ public void JoinOrCreateRoom(string roomName) {
PhotonNetwork.JoinOrCreateRoom(roomName, roomOptions, TypedLobby.Default);
}

public void LeaveRoom() {
PhotonNetwork.LeaveRoom();
}

public override void OnJoinRoomFailed(short returnCode, string message) {
Debug.LogError("Failed to join room");
base.OnJoinRoomFailed(returnCode, message);
Expand Down Expand Up @@ -129,7 +137,7 @@ public override void OnJoinedRoom() {
Debug.Log("Joined as Player Number: " + playerNumber);

// TODO: Move these to a new initialization method once network connection between scenes is working
//MatchManager.instance.SetPlayerSpawn(playerNumber);
//_matchManagerInstace.SetPlayerSpawn(playerNumber);

//InstantiatePlayerPrefab();

Expand All @@ -144,8 +152,24 @@ public override void OnPlayerLeftRoom(Player otherPlayer) {
Debug.Log("Other player has disconnected! Shutting down match");

// Teardown
MatchManager.instance.EndMatch();
MatchManager.instance.EndRound();
if (_matchManagerInstace != null) {
_matchManagerInstace.EndMatch();
_matchManagerInstace.EndRound();
}
}

public void RaiseStartGameEvent() {
RaiseEventOptions eventOptions = new RaiseEventOptions { Receivers = ReceiverGroup.All };
SendOptions sendOptions = new SendOptions { Reliability = true };
PhotonNetwork.RaiseEvent(startGameEventCode, null, eventOptions, sendOptions);
}

// Event handler for PHOTON events only!
public void OnEvent(EventData photonEvent) {
// Load the game scene
if (photonEvent.Code == 0) {
Debug.Log("Photon start game event recieved!");
}
}

public void InstantiatePlayerPrefab() {
Expand All @@ -154,11 +178,11 @@ public void InstantiatePlayerPrefab() {
return;
}

if (_playerPrefabPhotonView == null) {
_playerPrefabPhotonView = PhotonNetwork.Instantiate(_playerPrefabName, MatchManager.instance.playerSpawn.position, MatchManager.instance.playerSpawn.rotation).GetComponent<PhotonView>();
if (_playerPrefabPhotonView == null && _matchManagerInstace != null) {
_playerPrefabPhotonView = PhotonNetwork.Instantiate(_playerPrefabName, _matchManagerInstace.playerSpawn.position, _matchManagerInstace.playerSpawn.rotation).GetComponent<PhotonView>();
_playerPrefabPhotonView.TransferOwnership(PhotonNetwork.LocalPlayer);

MatchManager.instance.SetPlayerGameObject(_playerPrefabPhotonView.gameObject);
_matchManagerInstace.SetPlayerGameObject(_playerPrefabPhotonView.gameObject);

if (_playerPrefabPhotonView == null) {
Debug.LogError("Player prefab has no photon view! This is an error");
Expand Down
2 changes: 1 addition & 1 deletion Assets/Scripts/UI/LoadingCircle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class LoadingCircle : MonoBehaviour {
private RectTransform _rectComponent;
public bool _isLoading { get; private set; }

public void StarLoading() {
public void StartLoading() {
_isLoading = true;
}

Expand Down
2 changes: 1 addition & 1 deletion Assets/Scripts/UI/MainMenuUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public void StartGame() {

// Turn on the loading circle and start the load
_loadingCircle.gameObject.SetActive(true);
_loadingCircle.StarLoading();
_loadingCircle.StartLoading();
}

public void ConnectSuccessful() {
Expand Down
27 changes: 21 additions & 6 deletions Assets/Scripts/UI/MenuUIManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
namespace KickDive.UI {
public class MenuUIManager : MonoBehaviour {

private enum JoinHostState {
None,
public enum JoinHostState {
None,
Join,
Host
}
Expand All @@ -31,9 +31,10 @@ private enum JoinHostState {
private TextMeshProUGUI _joinHostButtonText;

private NetworkManager _networkManagerInstance;
private JoinHostState _joinHostState;
private string _roomName;

public JoinHostState joinHostState { get; private set; }

private void Awake() {
if (NetworkManager.instance != null) {
_networkManagerInstance = NetworkManager.instance;
Expand All @@ -43,6 +44,7 @@ private void Awake() {
}

_networkManagerInstance.OnConnectedToPhotonMaster += OnConnectedToMaster;
_networkManagerInstance.OnConnectedToRoom += OnConnectedToRoom;
}

public void ConnectToMaster() {
Expand Down Expand Up @@ -84,13 +86,13 @@ IEnumerator PhotonMasterConnectionTimer() {
}

public void JoinRoom() {
_joinHostState = JoinHostState.Join;
joinHostState = JoinHostState.Join;
TransitionToRoomName();
_joinHostButtonText.SetText("JOIN");
}

public void HostRoom() {
_joinHostState = JoinHostState.Host;
joinHostState = JoinHostState.Host;
TransitionToRoomName();
_joinHostButtonText.SetText("HOST");
}
Expand All @@ -103,6 +105,19 @@ public void ConnectToRoom() {
}
}

public void LeaveRoom() {
_networkManagerInstance.LeaveRoom();
_roomName = null;
}

// TODO: Handle the case where the host disconnects but the client remains AFTER client joins the host
public void OnConnectedToRoom(string roomName) {
if (PhotonNetwork.CurrentRoom.PlayerCount > 1) {
// Both players are here, lets start the game!
_networkManagerInstance.RaiseStartGameEvent();
}
}

public void SetRoomName(string roomName) {
_roomName = roomName;
}
Expand All @@ -120,7 +135,7 @@ private void TransitionToRoomName() {
}

public void ResetJoinHostData() {
_joinHostState = JoinHostState.None;
joinHostState = JoinHostState.None;
_roomName = null;
}
}
Expand Down
55 changes: 55 additions & 0 deletions Assets/Scripts/UI/RoomNameMenuUI.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

namespace KickDive.UI {
public class RoomNameMenuUI : MonoBehaviour {

[SerializeField]
private TextMeshProUGUI _titleText;

[SerializeField]
private LoadingCircle _loadingCircle;

[SerializeField]
private Transform _mainContents;

[SerializeField]
private Transform _waitingScreen;

[SerializeField]
private MenuUIManager _uiManager;

[SerializeField]
private TMP_InputField _inputField;

public bool isWaiting { get; private set; }

public void LoadWaitingContent() {
// Turn on the right context
_inputField.DeactivateInputField();
_mainContents.gameObject.SetActive(false);
_waitingScreen.gameObject.SetActive(true);

_titleText.SetText("WAITING");

_loadingCircle.StartLoading();

isWaiting = true;
}

public void LoadMainContent() {
// Turn on the right context
_inputField.ActivateInputField();
_mainContents.gameObject.SetActive(true);

_loadingCircle.StopLoading();
_waitingScreen.gameObject.SetActive(false);

_titleText.SetText("ENTER NAME");

isWaiting = false;
}
}
}
11 changes: 11 additions & 0 deletions Assets/Scripts/UI/RoomNameMenuUI.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions ProjectSettings/EditorBuildSettings.asset
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ EditorBuildSettings:
- enabled: 0
path:
guid: 00000000000000000000000000000000
- enabled: 1
path: Assets/Scenes/Menu.unity
guid: e1efdfb722420244b99edc476168cead
- enabled: 1
path: Assets/Scenes/SandboxScene.unity
guid: 1ba2940682727cd4e910279214d8c6c4
Expand Down

0 comments on commit c0f1975

Please sign in to comment.