Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

195 lines
3.8 KiB

namespace Oculus.Platform.Samples.VrHoops
{
using UnityEngine;
using Oculus.Platform;
using Oculus.Platform.Models;
public class PlatformManager : MonoBehaviour
{
private static PlatformManager s_instance;
private MatchmakingManager m_matchmaking;
private P2PManager m_p2p;
private LeaderboardManager m_leaderboards;
private AchievementsManager m_achievements;
private State m_currentState;
// my Application-scoped Oculus ID
private ulong m_myID;
// my Oculus user name
private string m_myOculusID;
void Update()
{
m_p2p.UpdateNetwork();
m_leaderboards.CheckForUpdates();
}
#region Initialization and Shutdown
void Awake()
{
// make sure only one instance of this manager ever exists
if (s_instance != null)
{
Destroy(gameObject);
return;
}
s_instance = this;
DontDestroyOnLoad(gameObject);
Core.Initialize();
m_matchmaking = new MatchmakingManager();
m_p2p = new P2PManager();
m_leaderboards = new LeaderboardManager();
m_achievements = new AchievementsManager();
}
void Start()
{
// First thing we should do is perform an entitlement check to make sure
// we successfully connected to the Oculus Platform Service.
Entitlements.IsUserEntitledToApplication().OnComplete(IsEntitledCallback);
}
void IsEntitledCallback(Message msg)
{
if (msg.IsError)
{
TerminateWithError(msg);
return;
}
// Next get the identity of the user that launched the Application.
Users.GetLoggedInUser().OnComplete(GetLoggedInUserCallback);
}
void GetLoggedInUserCallback(Message<User> msg)
{
if (msg.IsError)
{
TerminateWithError(msg);
return;
}
m_myID = msg.Data.ID;
m_myOculusID = msg.Data.OculusID;
TransitionToState(State.WAITING_TO_PRACTICE_OR_MATCHMAKE);
Achievements.CheckForAchievmentUpdates();
}
// In this example, for most errors, we terminate the Application. A full App would do
// something more graceful.
public static void TerminateWithError(Message msg)
{
Debug.Log("Error: " + msg.GetError().Message);
UnityEngine.Application.Quit();
}
public void QuitButtonPressed()
{
UnityEngine.Application.Quit();
}
void OnApplicationQuit()
{
// be a good matchmaking citizen and leave any queue immediately
Matchmaking.LeaveQueue();
}
#endregion
#region Properties
public static MatchmakingManager Matchmaking
{
get { return s_instance.m_matchmaking; }
}
public static P2PManager P2P
{
get { return s_instance.m_p2p; }
}
public static LeaderboardManager Leaderboards
{
get { return s_instance.m_leaderboards; }
}
public static AchievementsManager Achievements
{
get { return s_instance.m_achievements; }
}
public static State CurrentState
{
get { return s_instance.m_currentState; }
}
public static ulong MyID
{
get
{
if (s_instance != null)
{
return s_instance.m_myID;
}
else
{
return 0;
}
}
}
public static string MyOculusID
{
get
{
if (s_instance != null && s_instance.m_myOculusID != null)
{
return s_instance.m_myOculusID;
}
else
{
return string.Empty;
}
}
}
#endregion
#region State Management
public enum State
{
// loading platform library, checking application entitlement,
// getting the local user info
INITIALIZING,
// waiting on the user to join a matchmaking queue or play a practice game
WAITING_TO_PRACTICE_OR_MATCHMAKE,
// waiting for the match to start or viewing results
MATCH_TRANSITION,
// actively playing a practice match
PLAYING_A_LOCAL_MATCH,
// actively playing an online match
PLAYING_A_NETWORKED_MATCH,
};
public static void TransitionToState(State newState)
{
if (s_instance && s_instance.m_currentState != newState)
{
s_instance.m_currentState = newState;
}
}
#endregion
}
}