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); } }
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(); }
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(); }
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()); }
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(); }
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); } } } }