public void addFriendButtonClicked(Button b) { AddFriendButtonScript afbs = b.GetComponent <AddFriendButtonScript> (); string opponentUserName = afbs.userName; FriendHelper.DoCoroutine(FriendHelper.AddFriend(opponentUserName)); b.gameObject.SetActive(false); }
//Retrieve all matches for current player IEnumerator GetMatches() { //retrieve existing friends List <string> existingFriends = new List <string>(); ParseQuery <ParseObject> friendsQuery = new ParseQuery <ParseObject>("FriendRelationship").Include("friend").WhereEqualTo("player", ParseUser.CurrentUser); var findFriends = friendsQuery.FindAsync(); while (!findFriends.IsCompleted) { yield return(null); } if (findFriends.IsCanceled || findFriends.IsFaulted) { Debug.Log(findFriends.Exception.InnerExceptions[0]); } else { IEnumerable <ParseObject> friendResults = findFriends.Result; foreach (ParseObject p in friendResults) { ParseUser user = p["friend"] as ParseUser; existingFriends.Add(user["username"].ToString()); } } //remove all existing matchbuttons GameObject[] matchButtons = GameObject.FindGameObjectsWithTag("MatchButton"); foreach (GameObject g in matchButtons) { Destroy(g); } //get matches where user is player1 ParseQuery <ParseObject> mainQuery = new ParseQuery <ParseObject>("Match").Include("playerOne,playerTwo,playerTurn").WhereEqualTo("playerOne", ParseUser.CurrentUser); var find = mainQuery.FindAsync(); while (!find.IsCompleted) { yield return(null); } if (find.IsCanceled || find.IsFaulted) { Debug.Log(find.Exception.InnerExceptions[0]); } IEnumerable <ParseObject> results = find.Result; //get matches where user is player2 mainQuery = new ParseQuery <ParseObject>("Match").Include("playerOne,playerTwo,playerTurn").WhereEqualTo("playerTwo", ParseUser.CurrentUser); find = mainQuery.FindAsync(); while (!find.IsCompleted) { yield return(null); } //merge the two results results = results.Concat(find.Result); //sort the results by status results = results.Where(x => x["status"].ToString() == "waiting").Concat(results.Where(x => x["status"].ToString() == "challenging")) .Concat(results.Where(x => x["status"].ToString() == "active" && (x["playerTurn"] as ParseUser).ObjectId.Equals(ParseUser.CurrentUser.ObjectId))) .Concat(results.Where(x => x["status"].ToString() == "active" && !(x["playerTurn"] as ParseUser).ObjectId.Equals(ParseUser.CurrentUser.ObjectId))) .Concat(results.Where(x => x["status"].ToString() == "finished")); //reset variables for these results refreshing = false; int counter = 0; int initialY = 0; int newScrollContainerY = -990; var scrollContainer = GameObject.Find("MatchesScrollContent").GetComponent <RectTransform>(); scrollContainer.sizeDelta = new Vector2(200, 1980); //iterate results foreach (ParseObject p in results) { //Get opponent ParseUser opponent = null; string opponentUserName = ""; string opponentDisplayName = ""; ParseUser playerOne = p["playerOne"] as ParseUser; if (playerOne.ObjectId.Equals(ParseUser.CurrentUser.ObjectId)) { if (p.ContainsKey("playerTwo")) { opponent = p["playerTwo"] as ParseUser; opponentUserName = opponent.Username.ToString(); opponentDisplayName = opponent["displayName"].ToString(); } } else { opponent = p["playerOne"] as ParseUser; opponentUserName = opponent.Username.ToString(); opponentDisplayName = opponent["displayName"].ToString(); } //Add friend button if (p["status"].ToString() != "waiting" && !existingFriends.Contains(opponentUserName)) { GameObject addFriendButtonInstance = Instantiate(AddFriendButton, new Vector3(455, initialY, 0), transform.rotation) as GameObject; addFriendButtonInstance.transform.SetParent(GameObject.Find("Matches").transform, false); addFriendButtonInstance.tag = "MatchButton"; //Store oppponent on add friend button AddFriendButtonScript afbs = addFriendButtonInstance.GetComponent <AddFriendButtonScript>(); afbs.userName = opponentUserName; //Add click event to add friend button Button addFriendButton = addFriendButtonInstance.GetComponent <Button>(); addClickEvent(addFriendButton, "AddFriend"); } //Instantiate match button GameObject matchButtonInstance = Instantiate(MatchButton, new Vector3(0, initialY, 0), transform.rotation) as GameObject; matchButtonInstance.transform.SetParent(GameObject.Find("Matches").transform, false); matchButtonInstance.tag = "MatchButton"; Text matchButtonText = matchButtonInstance.GetComponentInChildren <Text>(); //Set button text based on status if (p["status"].ToString() == "waiting") { matchButtonText.text = "Searching for opponent..."; } else if (p["status"].ToString() == "challenging") { ParseUser challengingPlayer = p["playerOne"] as ParseUser; if (challengingPlayer.ObjectId.Equals(ParseUser.CurrentUser.ObjectId)) { matchButtonText.text = "Challenging " + opponentUserName; } else { matchButtonInstance.SetActive(false); currentMatch = p; questionPanel.AskQuestion("Play against your mega awesome friend '" + opponentDisplayName + "'?", Challenge_QuestionPanel_Yes, Challenge_QuestionPanel_No, Challenge_QuestionPanel_Maybe); } } else if (p["status"].ToString() == "active") { ParseUser playerTurn = p["playerTurn"] as ParseUser; if (playerTurn.ObjectId.Equals(ParseUser.CurrentUser.ObjectId)) { matchButtonText.text = "Your turn against " + opponentDisplayName; } else { matchButtonText.text = "Waiting for " + opponentDisplayName; } //Store match object and current opponentUserName on button MatchButtonScript mbs = matchButtonInstance.GetComponent <MatchButtonScript>(); mbs.opponent = opponent; mbs.matchObject = p; //Add click event Button matchButton = matchButtonInstance.GetComponent <Button>(); addClickEvent(matchButton, "Match"); } else if (p["status"].ToString() == "finished") { ParseUser playerVictor = p["playerVictor"] as ParseUser; if (playerVictor.ObjectId.Equals(ParseUser.CurrentUser.ObjectId)) { matchButtonText.text = "You won against " + opponentDisplayName + "!"; } else { matchButtonText.text = "You lost against " + opponentDisplayName; } } counter++; initialY -= 180; newScrollContainerY -= 180; if (counter > 5) { var currentScrollContainerHeight = scrollContainer.sizeDelta.y; scrollContainer.sizeDelta = new Vector2(200, currentScrollContainerHeight + 180); } } scrollContainer.position = new Vector3(scrollContainer.position.x, newScrollContainerY, scrollContainer.position.z); }