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.
 
 
 

641 lines
16 KiB

namespace Oculus.Platform.Samples.SimplePlatformSample
{
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using Oculus.Platform;
using Oculus.Platform.Models;
public class DataEntry : MonoBehaviour
{
public Text dataOutput;
void Start()
{
Core.Initialize();
checkEntitlement();
}
// Update is called once per frame
void Update()
{
string currentText = GetComponent<InputField>().text;
if (Input.GetKey(KeyCode.Return))
{
if (currentText != "")
{
SubmitCommand(currentText);
}
GetComponent<InputField>().text = "";
}
// Handle all messages being returned
Request.RunCallbacks();
}
private void SubmitCommand(string command)
{
string[] commandParams = command.Split(' ');
if (commandParams.Length > 0)
{
switch (commandParams[0])
{
case "p":
if (commandParams.Length > 2)
{
createAndJoinPrivateRoom(commandParams[1], commandParams[2]);
}
break;
case "c":
getCurrentRoom();
break;
case "g":
if (commandParams.Length > 1)
{
getRoom(commandParams[1]);
}
break;
case "j":
if (commandParams.Length > 1)
{
joinRoom(commandParams[1]);
}
break;
case "l":
if (commandParams.Length > 1)
{
leaveRoom(commandParams[1]);
}
break;
case "k":
if (commandParams.Length > 2)
{
kickUser(commandParams[1], commandParams[2]);
}
break;
case "m":
getLoggedInUser();
break;
case "u":
if (commandParams.Length > 1)
{
getUser(commandParams[1]);
}
break;
case "d":
getLoggedInFriends();
break;
case "i":
getInvitableUsers();
break;
case "o":
if (commandParams.Length > 2)
{
inviteUser(commandParams[1], commandParams[2]);
}
break;
case "s":
if (commandParams.Length > 2)
{
setRoomDescription(commandParams[1], commandParams[2]);
}
break;
case "w":
if (commandParams.Length > 3)
{
updateRoomDataStore(commandParams[1], commandParams[2], commandParams[3]);
}
break;
case "n":
getUserNonce();
break;
case "e":
checkEntitlement();
break;
case "a":
if (commandParams.Length > 1)
{
getAchievementDefinition(commandParams[1]);
}
break;
case "b":
if (commandParams.Length > 1)
{
getAchievementProgress(commandParams[1]);
}
break;
case "3":
if (commandParams.Length > 1)
{
unlockAchievement(commandParams[1]);
}
break;
case "4":
if (commandParams.Length > 2)
{
addCountAchievement(commandParams[1], commandParams[2]);
}
break;
case "5":
if (commandParams.Length > 2)
{
addFieldsAchievement(commandParams[1], commandParams[2]);
}
break;
case "1":
if (commandParams.Length > 2)
{
writeLeaderboardEntry(commandParams[1], commandParams[2]);
}
break;
case "2":
if (commandParams.Length > 1)
{
getLeaderboardEntries(commandParams[1]);
}
break;
default:
printOutputLine("Invalid Command");
break;
}
}
}
void getLeaderboardEntries(string leaderboardName)
{
Leaderboards.GetEntries(leaderboardName, 10, LeaderboardFilterType.None, LeaderboardStartAt.Top).OnComplete(leaderboardGetCallback);
}
void writeLeaderboardEntry(string leaderboardName, string value)
{
byte[] extraData = new byte[] { 0x54, 0x65, 0x73, 0x74 };
Leaderboards.WriteEntry(leaderboardName, Convert.ToInt32(value), extraData, false).OnComplete(leaderboardWriteCallback);
}
void addFieldsAchievement(string achievementName, string fields)
{
Achievements.AddFields(achievementName, fields).OnComplete(achievementFieldsCallback);
}
void addCountAchievement(string achievementName, string count)
{
Achievements.AddCount(achievementName, Convert.ToUInt64(count)).OnComplete(achievementCountCallback);
}
void unlockAchievement(string achievementName)
{
Achievements.Unlock(achievementName).OnComplete(achievementUnlockCallback);
}
void getAchievementProgress(string achievementName)
{
string[] Names = new string[1];
Names[0] = achievementName;
Achievements.GetProgressByName(Names).OnComplete(achievementProgressCallback);
}
void getAchievementDefinition(string achievementName)
{
string[] Names = new string[1];
Names[0] = achievementName;
Achievements.GetDefinitionsByName(Names).OnComplete(achievementDefinitionCallback);
}
void checkEntitlement()
{
Entitlements.IsUserEntitledToApplication().OnComplete(getEntitlementCallback);
}
void getUserNonce()
{
printOutputLine("Trying to get user nonce");
Users.GetUserProof().OnComplete(userProofCallback);
}
void createAndJoinPrivateRoom(string joinPolicy, string maxUsers)
{
printOutputLine("Trying to create and join private room");
Rooms.CreateAndJoinPrivate((RoomJoinPolicy)Convert.ToUInt32(joinPolicy), Convert.ToUInt32(maxUsers)).OnComplete(createAndJoinPrivateRoomCallback);
}
void getCurrentRoom()
{
printOutputLine("Trying to get current room");
Rooms.GetCurrent().OnComplete(getCurrentRoomCallback);
}
void getRoom(string roomID)
{
printOutputLine("Trying to get room " + roomID);
Rooms.Get(Convert.ToUInt64(roomID)).OnComplete(getCurrentRoomCallback);
}
void joinRoom(string roomID)
{
printOutputLine("Trying to join room " + roomID);
Rooms.Join(Convert.ToUInt64(roomID), true).OnComplete(joinRoomCallback);
}
void leaveRoom(string roomID)
{
printOutputLine("Trying to leave room " + roomID);
Rooms.Leave(Convert.ToUInt64(roomID)).OnComplete(leaveRoomCallback);
}
void kickUser(string roomID, string userID)
{
printOutputLine("Trying to kick user " + userID + " from room " + roomID);
Rooms.KickUser(Convert.ToUInt64(roomID), Convert.ToUInt64(userID), 10 /*kick duration */).OnComplete(getCurrentRoomCallback);
}
void getLoggedInUser()
{
printOutputLine("Trying to get currently logged in user");
Users.GetLoggedInUser().OnComplete(getUserCallback);
}
void getUser(string userID)
{
printOutputLine("Trying to get user " + userID);
Users.Get(Convert.ToUInt64(userID)).OnComplete(getUserCallback);
}
void getLoggedInFriends()
{
printOutputLine("Trying to get friends of logged in user");
Users.GetLoggedInUserFriends().OnComplete(getFriendsCallback);
}
void getInvitableUsers()
{
printOutputLine("Trying to get invitable users");
Rooms.GetInvitableUsers().OnComplete(getInvitableUsersCallback);
}
void inviteUser(string roomID, string inviteToken)
{
printOutputLine("Trying to invite token " + inviteToken + " to room " + roomID);
Rooms.InviteUser(Convert.ToUInt64(roomID), inviteToken).OnComplete(inviteUserCallback);
}
void setRoomDescription(string roomID, string description)
{
printOutputLine("Trying to set description " + description + " to room " + roomID);
Rooms.SetDescription(Convert.ToUInt64(roomID), description).OnComplete(getCurrentRoomCallback);
}
void updateRoomDataStore(string roomID, string key, string value)
{
Dictionary<string, string> kvPairs = new Dictionary<string, string>();
kvPairs.Add(key, value);
printOutputLine("Trying to set k=" + key + " v=" + value + " for room " + roomID);
Rooms.UpdateDataStore(Convert.ToUInt64(roomID), kvPairs).OnComplete(getCurrentRoomCallback);
}
void printOutputLine(String newLine)
{
dataOutput.text = "> " + newLine + System.Environment.NewLine + dataOutput.text;
}
void outputRoomDetails(Room room)
{
printOutputLine("Room ID: " + room.ID + ", AppID: " + room.ApplicationID + ", Description: " + room.Description);
int numUsers = (room.UsersOptional != null) ? room.UsersOptional.Count : 0;
printOutputLine("MaxUsers: " + room.MaxUsers.ToString() + " Users in room: " + numUsers);
if (room.OwnerOptional != null)
{
printOutputLine("Room owner: " + room.OwnerOptional.ID + " " + room.OwnerOptional.OculusID);
}
printOutputLine("Join Policy: " + room.JoinPolicy.ToString());
printOutputLine("Room Type: " + room.Type.ToString());
Message.MessageType.Matchmaking_Enqueue.GetHashCode();
}
void outputUserArray(UserList users)
{
foreach (User user in users)
{
printOutputLine("User: " + user.ID + " " + user.OculusID + " " + user.Presence + " " + user.InviteToken);
}
}
// Callbacks
void userProofCallback(Message<UserProof> msg)
{
if (!msg.IsError)
{
printOutputLine("Received user nonce generation success");
UserProof userNonce = msg.Data;
printOutputLine("Nonce: " + userNonce.Value);
}
else
{
printOutputLine("Received user nonce generation error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void getEntitlementCallback(Message msg)
{
if (!msg.IsError)
{
printOutputLine("You are entitled to use this app.");
}
else
{
printOutputLine("You are NOT entitled to use this app.");
}
}
void leaderboardGetCallback(Message<LeaderboardEntryList> msg)
{
if (!msg.IsError)
{
printOutputLine("Leaderboard entry get success.");
var entries = msg.Data;
foreach (var entry in entries)
{
printOutputLine(entry.Rank + ". " + entry.User.OculusID + " " + entry.Score + " " + entry.Timestamp);
}
}
else
{
printOutputLine("Received leaderboard get error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void leaderboardWriteCallback(Message msg)
{
if (!msg.IsError)
{
printOutputLine("Leaderboard entry write success.");
var didUpdate = (Message<bool>)msg;
if (didUpdate.Data)
{
printOutputLine("Score updated.");
}
else
{
printOutputLine("Score NOT updated.");
}
}
else
{
printOutputLine("Received leaderboard write error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void achievementFieldsCallback(Message msg)
{
if (!msg.IsError)
{
printOutputLine("Achievement fields added.");
}
else
{
printOutputLine("Received achievement fields add error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void achievementCountCallback(Message msg)
{
if (!msg.IsError)
{
printOutputLine("Achievement count added.");
}
else
{
printOutputLine("Received achievement count add error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void achievementUnlockCallback(Message msg)
{
if (!msg.IsError)
{
printOutputLine("Achievement unlocked");
}
else
{
printOutputLine("Received achievement unlock error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void achievementProgressCallback(Message<AchievementProgressList> msg)
{
if (!msg.IsError)
{
printOutputLine("Received achievement progress success");
AchievementProgressList progressList = msg.GetAchievementProgressList();
foreach (var progress in progressList)
{
if (progress.IsUnlocked)
{
printOutputLine("Achievement Unlocked");
}
else
{
printOutputLine("Achievement Locked");
}
printOutputLine("Current Bitfield: " + progress.Bitfield.ToString());
printOutputLine("Current Count: " + progress.Count.ToString());
}
}
else
{
printOutputLine("Received achievement progress error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void achievementDefinitionCallback(Message<AchievementDefinitionList> msg)
{
if (!msg.IsError)
{
printOutputLine("Received achievement definitions success");
AchievementDefinitionList definitionList = msg.GetAchievementDefinitions();
foreach (var definition in definitionList)
{
switch (definition.Type)
{
case AchievementType.Simple:
printOutputLine("Achievement Type: Simple");
break;
case AchievementType.Bitfield:
printOutputLine("Achievement Type: Bitfield");
printOutputLine("Bitfield Length: " + definition.BitfieldLength.ToString());
printOutputLine("Target: " + definition.Target.ToString());
break;
case AchievementType.Count:
printOutputLine("Achievement Type: Count");
printOutputLine("Target: " + definition.Target.ToString());
break;
case AchievementType.Unknown:
default:
printOutputLine("Achievement Type: Unknown");
break;
}
}
}
else
{
printOutputLine("Received achievement definitions error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void createAndJoinPrivateRoomCallback(Message<Room> msg)
{
if (!msg.IsError)
{
printOutputLine("Received create and join room success");
outputRoomDetails(msg.Data);
}
else
{
printOutputLine("Received create and join room error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void getCurrentRoomCallback(Message<Room> msg)
{
if (!msg.IsError)
{
printOutputLine("Received get room success");
outputRoomDetails(msg.Data);
}
else
{
printOutputLine("Received get room error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void joinRoomCallback(Message<Room> msg)
{
if (!msg.IsError)
{
printOutputLine("Received join room success");
outputRoomDetails(msg.Data);
}
else
{
printOutputLine("Received join room error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void leaveRoomCallback(Message<Room> msg)
{
if (!msg.IsError)
{
printOutputLine("Received leave room success");
outputRoomDetails(msg.Data);
}
else
{
printOutputLine("Received leave room error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void getUserCallback(Message<User> msg)
{
if (!msg.IsError)
{
printOutputLine("Received get user success");
User user = msg.Data;
printOutputLine("User: " + user.ID + " " + user.OculusID + " " + user.Presence + " " + user.InviteToken);
}
else
{
printOutputLine("Received get user error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void getFriendsCallback(Message<UserList> msg)
{
if (!msg.IsError)
{
printOutputLine("Received get friends success");
UserList users = msg.Data;
outputUserArray(users);
}
else
{
printOutputLine("Received get friends error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void getInvitableUsersCallback(Message<UserList> msg)
{
if (!msg.IsError)
{
printOutputLine("Received get invitable users success");
UserList users = msg.Data;
outputUserArray(users);
}
else
{
printOutputLine("Received get invitable users error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
void inviteUserCallback(Message msg)
{
if (!msg.IsError)
{
printOutputLine("Received invite user success");
}
else
{
printOutputLine("Received invite user error");
Error error = msg.GetError();
printOutputLine("Error: " + error.Message);
}
}
}
}