Пример #1
0
    public void addFriendButtonClicked(Button b)
    {
        AddFriendButtonScript afbs = b.GetComponent <AddFriendButtonScript> ();
        string opponentUserName    = afbs.userName;

        FriendHelper.DoCoroutine(FriendHelper.AddFriend(opponentUserName));
        b.gameObject.SetActive(false);
    }
Пример #2
0
    //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);
    }