Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #region
- using System;
- using System.Collections.Generic;
- using BrainCloud;
- using BrainCloud.Entity;
- using LitJson;
- using UnityEngine;
- using UnityEngine.UI;
- using Random = UnityEngine.Random;
- #endregion
- public class YaUmneeMatchSelect : YaUmneeGameScene
- {
- [SerializeField]
- private Text playerName;
- [SerializeField]
- private Text playerRank;
- [SerializeField]
- private Button newMatch;
- [SerializeField]
- private Button searchPlayer;
- [SerializeField]
- private Button facebookShare;
- [SerializeField]
- private Button logoutButton;
- private const int RANGE_DELTA = 500;
- private const int NUMBER_OF_MATCHES = 10;
- private readonly List<MatchInfo> completedMatches = new List<MatchInfo>();
- private readonly List<PlayerInfo> matchedProfiles = new List<PlayerInfo>();
- private readonly List<MatchInfo> matches = new List<MatchInfo>();
- private Vector2 _scrollPos;
- private eState _state = eState.LOADING;
- private string autoJoinText = "Auto Join";
- private bool isLookingForMatch = false;
- void Start ()
- {
- playerName.text = yaUmneeApp.Name;
- playerRank.text = "Rank: " + yaUmneeApp.PlayerRating;
- newMatch.onClick.AddListener (NewMatch);
- searchPlayer.onClick.AddListener (SearchPlayer);
- facebookShare.onClick.AddListener (FacebookShare);
- logoutButton.onClick.AddListener (LogOut);
- // Enable Match Making, so other Users can also challege this Profile
- // http://getbraincloud.com/apidocs/apiref/#capi-matchmaking-enablematchmaking
- yaUmneeApp.Bc.MatchMakingService.EnableMatchMaking(null, (status, code, error, cbObject) =>
- {
- Debug.Log("MatchMaking enabled failed");
- });
- yaUmneeApp.Bc.MatchMakingService.FindPlayers(RANGE_DELTA, NUMBER_OF_MATCHES, OnFindPlayers);
- }
- private void OnFindPlayers(string responseData, object cbPostObject)
- {
- matchedProfiles.Clear();
- // Construct our matched players list using response data
- var matchesData = JsonMapper.ToObject(responseData)["data"]["matchesFound"];
- foreach (JsonData match in matchesData) matchedProfiles.Add(new PlayerInfo(match));
- // After, fetch our game list from Braincloud
- yaUmneeApp.Bc.AsyncMatchService.FindMatches(OnFindMatches);
- }
- private void OnFindMatches(string responseData, object cbPostObject)
- {
- matches.Clear();
- // Construct our game list using response data
- var jsonMatches = JsonMapper.ToObject(responseData)["data"]["results"];
- for (var i = 0; i < jsonMatches.Count; ++i)
- {
- var jsonMatch = jsonMatches[i];
- var match = new MatchInfo(jsonMatch, this);
- matches.Add(match);
- }
- // Now, find completed matches so the user can go see the history
- yaUmneeApp.Bc.AsyncMatchService.OnFindCompleteMatches(OnFindCompletedMatches);
- }
- private void OnFindCompletedMatches(string responseData, object cbPostObject)
- {
- completedMatches.Clear();
- // Construct our game list using response data
- var jsonMatches = JsonMapper.ToObject(responseData)["data"]["results"];
- for (var i = 0; i < jsonMatches.Count; ++i)
- {
- var jsonMatch = jsonMatches[i];
- var match = new MatchInfo(jsonMatch, this);
- completedMatches.Add(match);
- }
- _state = eState.GAME_PICKER;
- }
- private void NewMatch ()
- {
- isLookingForMatch = true;
- LookingForMatch ();
- print ("new match");
- }
- private void LookingForMatch ()
- {
- if (isLookingForMatch == false)
- {
- //isLookingForMatch = false;
- var MATCH_STATE = "MATCH_STATE";
- var CANCEL_LOOKING = "CANCEL_LOOKING";
- var attributesJson = new JsonData ();
- attributesJson [MATCH_STATE] = CANCEL_LOOKING;
- yaUmneeApp.Bc.PlayerStateService.UpdateAttributes (attributesJson.ToJson (), false);
- }
- else
- {
- var scriptDataJson = new JsonData();
- scriptDataJson["rankRangeDelta"] = RANGE_DELTA;
- scriptDataJson["pushNotificationMessage"] = null;
- yaUmneeApp.Bc.ScriptService.RunScript("AUTO_JOIN", scriptDataJson.ToJson(), OnCreateMatchSuccess, OnCreateMatchFailed);
- print ("Cloud Script");
- }
- }
- private void OnCreateMatchSuccess(string responseData, object cbPostObject)
- {
- var data = JsonMapper.ToObject(responseData);
- MatchInfo match;
- // Cloud Code returns wrap the data in a responseJson
- if (data["data"].Keys.Contains("response"))
- {
- if (data["data"]["response"].IsObject && data["data"]["response"].Keys.Contains("data"))
- {
- match = new MatchInfo(data["data"]["response"]["data"], this);
- }
- else
- {
- // No match found. Handle this result
- Debug.Log(data["data"]["response"].ToString());
- _state = eState.GAME_PICKER;
- isLookingForMatch = true;
- autoJoinText = "Cancel Looking for Match";
- return;
- }
- }
- else
- {
- match = new MatchInfo(data["data"], this);
- }
- // Go to the game if it's your turn
- if (match.yourTurn)
- EnterMatch(match);
- else
- yaUmneeApp.GotoMatchSelectScene();
- }
- private void OnCreateMatchFailed(int a, int b, string responseData, object cbPostObject)
- {
- Debug.LogError("Failed to create Async Match");
- Debug.Log(a);
- Debug.Log(b);
- Debug.Log(responseData);
- _state = eState.GAME_PICKER; // Just go back to game selection
- }
- private void EnterMatch(MatchInfo match)
- {
- yaUmneeApp.CurrentMatch = match;
- _state = eState.LOADING;
- // Query more detail state about the match
- yaUmneeApp.Bc.AsyncMatchService
- .ReadMatch(match.ownerId, match.matchId, OnReadMatch, OnReadMatchFailed, match);
- }
- private void OnReadMatch(string responseData, object cbPostObject)
- {
- var match = cbPostObject as MatchInfo;
- var data = JsonMapper.ToObject(responseData)["data"];
- // Setup a couple stuff into our TicTacToe scene
- yaUmneeApp.BoardState = (string) data["matchState"]["board"];
- yaUmneeApp.PlayerInfoX = match.playerXInfo;
- yaUmneeApp.PlayerInfoO = match.playerOInfo;
- yaUmneeApp.WhosTurn = match.yourToken == "X" ? yaUmneeApp.PlayerInfoX : match.playerOInfo;
- yaUmneeApp.OwnerId = match.ownerId;
- yaUmneeApp.MatchId = match.matchId;
- yaUmneeApp.MatchVersion = (ulong) match.version;
- // Load the Tic Tac Toe scene
- print("Match Has Created");
- //App.GotoTicTacToeScene(gameObject);
- }
- private void OnReadMatchFailed(int a, int b, string responseData, object cbPostObject)
- {
- Debug.LogError("Failed to Read Match");
- }
- private void SearchPlayer ()
- {
- }
- private void FacebookShare ()
- {
- }
- private void LogOut ()
- {
- yaUmneeApp.Bc.PlayerStateService.Logout((response, cbObject) => { yaUmneeApp.GotoLoginScene(gameObject); });
- }
- public class MatchInfo
- {
- private readonly YaUmneeMatchSelect matchSelect;
- public PlayerInfo matchedProfile;
- public string matchId;
- public string ownerId;
- public PlayerInfo playerOInfo = new PlayerInfo();
- public PlayerInfo playerXInfo = new PlayerInfo();
- public int version;
- public string yourToken;
- public bool yourTurn;
- public MatchInfo(JsonData jsonMatch, YaUmneeMatchSelect matchSelect)
- {
- version = (int) jsonMatch["version"];
- ownerId = (string) jsonMatch["ownerId"];
- matchId = (string) jsonMatch["matchId"];
- yourTurn = (string) jsonMatch["status"]["currentPlayer"] == matchSelect.yaUmneeApp.ProfileId;
- this.matchSelect = matchSelect;
- // Load player info
- LoadPlayerInfo(jsonMatch["summary"]["players"][0]);
- LoadPlayerInfo(jsonMatch["summary"]["players"][1]);
- }
- private void LoadPlayerInfo(JsonData playerData)
- {
- var token = (string) playerData["token"];
- PlayerInfo playerInfo;
- if (token == "X") playerInfo = playerXInfo;
- else playerInfo = playerOInfo;
- if ((string) playerData["profileId"] == matchSelect.yaUmneeApp.ProfileId)
- {
- playerInfo.PlayerName = matchSelect.yaUmneeApp.Name;
- playerInfo.PlayerRating = matchSelect.yaUmneeApp.PlayerRating;
- playerInfo.ProfileId = matchSelect.yaUmneeApp.ProfileId;
- //playerInfo.picUrl = FacebookLogin.PlayerPicUrl;
- yourToken = token;
- }
- else
- {
- if (matchSelect.matchedProfiles.Count > 0)
- {
- foreach (var profile in matchSelect.matchedProfiles)
- if (profile.ProfileId == (string) playerData["profileId"])
- {
- matchedProfile = profile;
- break;
- }
- playerInfo.PlayerName = matchedProfile.PlayerName;
- playerInfo.ProfileId = matchedProfile.ProfileId;
- playerInfo.PlayerRating = matchedProfile.PlayerRating;
- }
- }
- }
- }
- private enum eState
- {
- LOADING,
- GAME_PICKER,
- NEW_GAME,
- STARTING_MATCH
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement