示例#1
0
    void RefreshListItem(int rowIdx, int friendIdx)
    {
        ListRow row = GetRow(rowIdx);

        LobbyGang.FriendInfo friend = GetFriend(friendIdx);

        if (friend != null)
        {
            row.FriendIndex = friendIdx;

            int statusTextId;
            if (friend.IsReady)
            {
                statusTextId = 0109047;
            }
            else if (friend.IsWaiting)
            {
                statusTextId = 0109046;
            }
            else if (friend.IsOnline)
            {
                statusTextId = 0109044;
            }
            else if (friend.IsPlaying)
            {
                statusTextId = 0109063;
            }
            else
            {
                statusTextId = 0109045;
            }

            if (row.Root.Visible == false)
            {
                row.Root.Show(true, true);
            }

            row.Name.SetNewText(GuiBaseUtils.FixNameForGui(friend.Nickname));
            row.Status.SetNewText(string.Format("({0})", TextDatabase.instance[statusTextId]));
            row.RankValue.SetNewText(friend.Rank.ToString());
            row.RankIcon.State = string.Format("Rank_{0}", Mathf.Min(friend.Rank, row.RankIcon.Count - 1).ToString("D2"));

            bool available = LobbyGang.FriendsInvited < MAX_INVITES ? friend.IsOnline : false;
            bool canInvite = available ? friend.CanInvite : false;

            row.AddButton.IsDisabled    = friend.IsInvited ? true : !canInvite;
            row.RemoveButton.IsDisabled = friend.IsInvited ? false : !available;

            row.WaitingBg.Widget.Show(friend.IsWaiting, true);
            row.ReadyBg.Widget.Show(friend.IsReady, true);
            row.AddButton.Widget.Show(!friend.IsInvited && available, true);
            row.RemoveButton.Widget.Show(friend.IsInvited && available, true);
        }
        else
        {
            row.FriendIndex = -1;

            row.Root.Show(false, true);
        }
    }
示例#2
0
    void OnIsReadyReceived(string primaryKey, string messageId, string messageText)
    {
        //Debug.Log(">>>> IS READY: "+messageText);

        JsonData data = JsonMapper.ToObject(messageText);

        if (data["master"].ToString() != m_PrimaryKey)
        {
            Debug.Log("LobbyGang :: Received status update from non-invited user '" + data["primaryKey"].ToString() + "'!");
            return;
        }

        LobbyGang.FriendInfo friend = GetFriendByPrimaryKey(data["primaryKey"].ToString());
        if (friend == null)
        {
            return;
        }
        if (friend.IsInvited == false)
        {
            return;
        }

        bool status;

        if (bool.TryParse(data["status"].ToString(), out status) == true)
        {
            friend.IsReady = status;
        }
        else
        {
            friend.IsReady = false;
        }

        SetDirty();
    }
示例#3
0
    void OnAddFriend(int rowIdx, GUIBase_Widget widget, object evt)
    {
        LobbyGang.FriendInfo friend = GetFriendByRowIdx(rowIdx);
        if (friend == null)
        {
            return;
        }
        if (friend.CanInvite == false)
        {
            return;
        }
        if (friend.IsInvited == true)
        {
            return;
        }

        friend.IsInvited = true;
        friend.IsWaiting = true;

        // send invite
        var data = new
        {
            master   = m_PrimaryKey,
            gametype = m_GametypeRoller.Selection
        };

        LobbyClient.SendMessageToPlayer(friend.PrimaryKey, LobbyGangMessage.INVITE, JsonMapper.ToJson(data));

        SetDirty();
    }
示例#4
0
    void OnPlayPressed(E_MPGameType gameType)
    {
        Game.Settings.SetInt("Gametype", m_GametypeRoller.Selection);

        List <string> friends = new List <string>();

        for (int idx = 0; idx < LobbyGang.Friends.Length; ++idx)
        {
            LobbyGang.FriendInfo friend = GetFriend(idx);
            if (friend == null)
            {
                continue;
            }
            if (friend.IsReady == false)
            {
                continue;
            }

            friends.Add(friend.PrimaryKey);
        }

        Play(gameType, friends.ToArray());
    }
示例#5
0
    void OnRemoveFriend(int rowIdx, GUIBase_Widget widget, object evt)
    {
        LobbyGang.FriendInfo friend = GetFriendByRowIdx(rowIdx);
        if (friend == null)
        {
            return;
        }
        if (friend.IsInvited == false)
        {
            return;
        }

        friend.IsInvited = false;

        // send remove
        var data = new
        {
            master = m_PrimaryKey
        };

        LobbyClient.SendMessageToPlayer(friend.PrimaryKey, LobbyGangMessage.KICK, JsonMapper.ToJson(data));

        SetDirty();
    }
示例#6
0
    void RefreshFriends()
    {
        LobbyGang.FriendsInvited = 0;
        LobbyGang.FriendsReady   = 0;

        bool updateInvited = m_IsDirty;

        // update firend list
        List <FriendList.FriendInfo> friends = GameCloudManager.friendList.friends;

        if (LobbyGang.Friends.Length != friends.Count)
        {
            LobbyGang.FriendInfo[] newFriends = new LobbyGang.FriendInfo[friends.Count];

            for (int idx = 0; idx < friends.Count; ++idx)
            {
                string primaryKey           = friends[idx].PrimaryKey;
                LobbyGang.FriendInfo friend = System.Array.Find(LobbyGang.Friends, obj => obj.PrimaryKey == primaryKey);

                newFriends[idx] = new LobbyGang.FriendInfo()
                {
                    PrimaryKey = primaryKey,
                    Nickname   = friends[idx].Nickname,
                    Rank       = friends[idx].Rank,
                    IsOnline   = friend != null ? friend.IsOnline : false,
                    IsInvited  = friend != null ? friend.IsInvited : false,
                    IsReady    = friend != null ? friend.IsReady : false,
                };
            }

            LobbyGang.Friends = newFriends;

            updateInvited = true;
        }

        // add user first
        List <object> data = new List <object>();

        data.Add(new
        {
            primaryKey = m_PrimaryKey,
            nickname   = CloudUser.instance.nickName,
            rank       = PPIManager.Instance.GetLocalPPI().Rank,
            status     = true
        });

        // check friends and add invited ones
        for (int idx = 0; idx < LobbyGang.Friends.Length; ++idx)
        {
            LobbyGang.FriendInfo friend = GetFriend(idx);
            if (friend == null)
            {
                continue;
            }

            CheckFriendOnlineStatus(friend.PrimaryKey, friends, ref friend.IsOnline, ref friend.IsPlaying);
            if (friend.IsOnline == false || friend.IsPlaying == true)
            {
                friend.IsInvited = false;
                updateInvited    = true;
            }

            if (friend.IsInvited == true)
            {
                LobbyGang.FriendsInvited += 1;

                data.Add(new
                {
                    primaryKey = friend.PrimaryKey,
                    nickname   = friend.Nickname,
                    rank       = friend.Rank,
                    status     = friend.IsReady
                });
            }

            if (friend.IsReady == true)
            {
                LobbyGang.FriendsReady += 1;
            }
        }

        // sort list by online status and primaryKey
        System.Array.Sort(LobbyGang.Friends,
                          (x, y) =>
        {
            if (x.IsOnline != y.IsOnline)
            {
                if (x.IsOnline == true)
                {
                    return(-1);
                }
                if (y.IsOnline == true)
                {
                    return(1);
                }
            }
            return(string.IsNullOrEmpty(x.PrimaryKey) == false ? x.PrimaryKey.CompareTo(y.PrimaryKey) : 0);
        });

        // forward information to invited friends
        if (updateInvited == true)
        {
            string json = JsonMapper.ToJson(new
            {
                gametype = m_GametypeRoller.Selection,
                friends  = data
            });
            foreach (var friend in LobbyGang.Friends)
            {
                if (friend.IsInvited == true)
                {
                    LobbyClient.SendMessageToPlayer(friend.PrimaryKey, LobbyGangMessage.REFRESH, json);
                }
            }
        }
    }