Advertisement
Guest User

FriendsListMediator

a guest
Nov 14th, 2019
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 55.15 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Facebook.Unity;
  6. using Firebase.Database;
  7. using Hashbang.Feature.Matchmaking;
  8. using Hashbang.Feature.Squads;
  9. using Hashbang.Window;
  10. using PlayFab;
  11. using PlayFab.ClientModels;
  12. using PrimalCarnage.Data;
  13. using PrimalCarnage.Menu;
  14. using RSG;
  15. using UniRx;
  16. using UnityEngine;
  17. using WindowManagerPack;
  18.  
  19. public enum FriendIdType { PlayFabId, Username, Email, DisplayName };
  20.  
  21. [System.Serializable]
  22. public class FetchUserInfoResult
  23. {
  24.  public int ELO;
  25.  public int Tier;
  26.  public int Level;
  27.  public PlayerStats Mods;
  28.  public Dictionary<string, TotalStats> Stats;
  29.  public int HeroCount;
  30.  public PlayFab.ClientModels.GetPlayerCombinedInfoResultPayload InfoResultPayload;
  31. }
  32.  
  33. public class PlayerTeamData
  34. {
  35.     public string PlayFabId;
  36.     public EntityKey EntityKey;
  37.     public int ELO;
  38.     public int Tier;
  39.     public int Level;
  40.     public bool Ready = false;
  41.     public bool SquadLeader = false;
  42. }
  43.  
  44. public class FriendsListMediator : WindowMediator, IOnShow, IOnHide
  45. {
  46.     public static System.Action CloseWindowEvent = null;
  47.  
  48.     [Inject] public FriendsListView View { get; set; }
  49.  
  50.     [Inject] public WindowManager WindowManager { get; set; }
  51.  
  52.     [Inject] public GameDataManager GameDataManager { get; set; }
  53.  
  54.     [Inject] public PlayerAccountData PlayerAccountData { get; set; }
  55.  
  56.     [Inject] public FirebaseService FirebaseService { get; set; }
  57.  
  58.     [Inject] public SquadService SquadService { get; set; }
  59.  
  60.     [Inject] public MatchMakingService MatchMakingService { get; set; }
  61.  
  62.     [Inject] public PlayFabManager PlayFabManager { get; set; }
  63.  
  64.     [Inject] public MenuPhotonManager MenuPhotonManager { get; set; }
  65.  
  66.     [Inject] public PhotonUtils PhotonUtils { get; set; }
  67.  
  68.     [Inject] public SetElementVisibleSignal SetElementVisibleSignal { get; set; }
  69.  
  70.     private ListView _friendList;
  71.     private ListView _recentList;
  72.     private ListView _clanList;
  73.     private ListView _facebookList;
  74.     private UserInfoMessageData _selectedPlayer;
  75.     private bool _fetchingUserInfo = false;
  76.     private List<PlayerTeamData> _userList = new List<PlayerTeamData> ();
  77.     private int _tier;
  78.     public int TierToJoin { get { return _tier; } }
  79.     private int _elo;
  80.     public int EloToJoin { get { return _elo; } }
  81.     private int _lowerElo;
  82.     public int LowerElo { get { return _lowerElo; } }
  83.     private int _upperElo;
  84.     public int UpperElo { get { return _upperElo; } }
  85.     private SquadState _squadState;
  86.     public SquadState SquadState { get { return _squadState; } }
  87.     private string[] _expectedUsers;
  88.     public string[] ExpectedUsers { get { return _expectedUsers; } }
  89.  
  90.     // public static Dictionary<string, UserInfoMessageData> UserInfoDictionary = new Dictionary<string, UserInfoMessageData> ();
  91.  
  92.     private Dictionary<string, PlayerListItemView> _friendMap = new Dictionary<string, PlayerListItemView> ();
  93.  
  94.     private List<PlayFab.ClientModels.FriendInfo> _recentPlayerList = new List<PlayFab.ClientModels.FriendInfo> ();
  95.     private List<PlayFab.ClientModels.FriendInfo> _facebookFriendList = new List<PlayFab.ClientModels.FriendInfo> ();
  96.  
  97.     public override void OnRegister ()
  98.     {
  99.         View.OnTabStateChanged += OnTabStateChanged;
  100.         View.CloseButton.OnClickAsObservable ().Subscribe (_ => CloseSquadWindow ()).AddTo (gameObject);
  101.         View.LeaveSquadButton.OnClickAsObservable ().Subscribe (_ => CloseSquadWindow ()).AddTo (gameObject);
  102.  
  103.         //Doing this because the foreach loop wasn't working and i'm out of time. (FML)
  104.         if (View.TabButtons[0] != null) View.TabButtons[0].OnClickAsObservable ().Subscribe ((_) => OnTabButtonClicked (0)).AddTo (gameObject);
  105.         if (View.TabButtons[1] != null) View.TabButtons[1].OnClickAsObservable ().Subscribe ((_) => OnTabButtonClicked (1)).AddTo (gameObject);
  106.         if (View.TabButtons[2] != null) View.TabButtons[2].OnClickAsObservable ().Subscribe ((_) => OnTabButtonClicked (2)).AddTo (gameObject);
  107.         if (View.TabButtons[3] != null) View.TabButtons[3].OnClickAsObservable ().Subscribe ((_) => OnTabButtonClicked (3)).AddTo (gameObject);
  108.  
  109.         View.SquadWindow.OnRegister (this);
  110.  
  111.         PlayerReference.FriendStateChanged += FriendStateChanged;
  112.  
  113.         _friendList = View.TabPanels[0].GetComponent<ListView> ();
  114.         _recentList = View.TabPanels[1].GetComponent<ListView> ();
  115.         _clanList = View.TabButtons[2].GetComponent<ListView> ();
  116.         _facebookList = View.TabPanels[3].GetComponent<ListView> ();
  117.         _friendList.ClearContainer ();
  118.         _recentList.ClearContainer ();
  119.         // RemoveFriendListeners ();
  120.         _friendList.OnContainerRebuild += OnBuildFriendList;
  121.         _recentList.OnContainerRebuild += OnBuildRecentList;
  122.  
  123.         View.ActionBar.SetActive (true);
  124.         View.SquadWindow.gameObject.SetActive (false);
  125.  
  126.         View.ShowAddFriendPanelButton.onClick.AddListener (ShowAddFriendPanel);
  127.  
  128.         View.AddFriendButton.onClick.RemoveAllListeners ();
  129.         View.AddFriendButton.onClick.AddListener (OnAddFriendClicked);
  130.  
  131.         View.CloseAddFriendPanelButton.onClick.AddListener (HideAddFriendPanel);
  132.  
  133.         View.UserInfoMessagePrefab.CloseUserInfoButton.onClick.AddListener (UserProfileCloseButtonOnClick);
  134.         View.UserInfoMessagePrefab.FriendRemove.onClick.AddListener (OnDeletePlayer);
  135.         View.UserInfoMessagePrefab.FriendInvite.onClick.AddListener (InviteFriendOnClick);
  136.         View.UserInfoMessagePrefab.ClanInvite.onClick.AddListener (AddPlayerToClan);
  137.         View.UserInfoMessagePrefab.ClanRemove.onClick.AddListener (RemovePlayerFromClan);
  138.         View.UserInfoMessagePrefab.SquadInvite.onClick.AddListener (SquadInviteOnClick);
  139.         View.UserInfoMessagePrefab.SquadCancel.onClick.AddListener (SquadCancelOnClick);
  140.  
  141.         // SquadService.SquadOutboxQueryResult += OnSquadOutboxQuery;
  142.         // SquadService.SquadInboxQueryResult += OnSquadInboxQuery;
  143.         // SquadService.SquadInSameSquadResult += OnSquadInSameSquadQuery;
  144.         SquadService.SquadOutboxAdded += OnSquadOutboxAdded;
  145.         SquadService.SquadOutboxRemoved += OnSquadOutboxRemoved;
  146.         // SquadService.SquadInboxAdded += OnSquadInboxAdded;
  147.         // SquadService.SquadInboxRemoved += OnSquadInboxRemoved;
  148.         SquadService.SquadSelfAcceptInvite += OnSquadSelfAcceptInvite;
  149.  
  150.         SquadService.SquadChildAddedResult += OnSquadChildAdded;
  151.         SquadService.SquadChildRemovedResult += OnSquadChildRemoved;
  152.         SquadService.SquadStateChangedResult += OnSquadStateChanged;
  153.  
  154.         CloseWindowEvent += CloseSquadWindow;
  155.         base.OnRegister ();
  156.     }
  157.  
  158.     public override void OnRemove ()
  159.     {
  160.         View.OnTabStateChanged -= OnTabStateChanged;
  161.         if (_friendList != null)
  162.         {
  163.             _friendList.ClearContainer ();
  164.             _friendList.OnContainerRebuild -= OnBuildFriendList;
  165.         }
  166.  
  167.         PlayerReference.FriendStateChanged -= FriendStateChanged;
  168.  
  169.         if (_recentList != null)
  170.         {
  171.             _recentList.ClearContainer ();
  172.             _recentList.OnContainerRebuild -= OnBuildRecentList;
  173.         }
  174.  
  175.         PlayerReference.ClearAll ();
  176.  
  177.         View.ShowAddFriendPanelButton.onClick.RemoveListener (ShowAddFriendPanel);
  178.         View.AddFriendButton.onClick.RemoveListener (OnAddFriendClicked);
  179.         View.CloseAddFriendPanelButton.onClick.RemoveListener (HideAddFriendPanel);
  180.  
  181.         View.UserInfoMessagePrefab.CloseUserInfoButton.onClick.RemoveListener (UserProfileCloseButtonOnClick);
  182.         View.UserInfoMessagePrefab.FriendRemove.onClick.RemoveListener (OnDeletePlayer);
  183.         View.UserInfoMessagePrefab.FriendInvite.onClick.RemoveListener (InviteFriendOnClick);
  184.         View.UserInfoMessagePrefab.ClanInvite.onClick.RemoveListener (AddPlayerToClan);
  185.         View.UserInfoMessagePrefab.ClanRemove.onClick.RemoveListener (RemovePlayerFromClan);
  186.         View.UserInfoMessagePrefab.SquadInvite.onClick.RemoveListener (SquadInviteOnClick);
  187.         View.UserInfoMessagePrefab.SquadCancel.onClick.RemoveListener (SquadCancelOnClick);
  188.  
  189.         // SquadService.SquadOutboxQueryResult -= OnSquadOutboxQuery;
  190.         // SquadService.SquadInboxQueryResult -= OnSquadInboxQuery;
  191.         // SquadService.SquadInSameSquadResult -= OnSquadInSameSquadQuery;
  192.         SquadService.SquadOutboxAdded -= OnSquadOutboxAdded;
  193.         SquadService.SquadOutboxRemoved -= OnSquadOutboxRemoved;
  194.         // SquadService.SquadInboxAdded -= OnSquadInboxAdded;
  195.         // SquadService.SquadInboxRemoved -= OnSquadInboxRemoved;
  196.         SquadService.SquadSelfAcceptInvite -= OnSquadSelfAcceptInvite;
  197.  
  198.         SquadService.SquadChildAddedResult -= OnSquadChildAdded;
  199.         SquadService.SquadChildRemovedResult -= OnSquadChildRemoved;
  200.         SquadService.SquadStateChangedResult -= OnSquadStateChanged;
  201.  
  202.         //SquadService.RoomInfoSetResult -= OnRoomInfoSet;
  203.  
  204.         // RemoveFriendListeners ();
  205.  
  206.         CloseWindowEvent -= CloseSquadWindow;
  207.         base.OnRemove ();
  208.     }
  209.  
  210.     private Queue<System.Action> _actionQueue = new Queue<System.Action> ();
  211.     public void Update ()
  212.     {
  213.         while (_actionQueue.Count > 0)
  214.         {
  215.             _actionQueue.Dequeue ().Invoke ();
  216.         }
  217.         if (View.Content.activeSelf)
  218.         {
  219.             string squadId = (SquadService.GetSquadID ());
  220.             // Debug.Log("squadId " + squadId);
  221.             View.SquadStatus.text = string.IsNullOrEmpty (squadId) ? "Squads" : "In squad " + squadId;
  222.         }
  223.  
  224.     }
  225.  
  226.     // private void RemoveFriendListeners (string friendId = "")
  227.     // {
  228.     //     if (string.IsNullOrEmpty (friendId))
  229.     //     {
  230.     //         foreach (var friend in _friendMap)
  231.     //         {
  232.     //             FirebaseService.DatabaseReference.Child (string.Format ("Players/{0}/State", friend.Key)).ValueChanged -= FriendInfoChanged;
  233.     //         }
  234.     //         _friendMap.Clear ();
  235.     //         return;
  236.     //     }
  237.     //     if (_friendMap.ContainsKey (friendId))
  238.     //     {
  239.     //         FirebaseService.DatabaseReference.Child (string.Format ("Players/{0}/State", friendId)).ValueChanged -= FriendInfoChanged;
  240.     //         _friendMap.Remove (friendId);
  241.     //     }
  242.     // }
  243.  
  244.     public void OnBuildFriendList (List<GameObject> objects)
  245.     {
  246.         // Debug.LogError("On build friends list");
  247.         int i = 0;
  248.  
  249.         // Debug.Log("GameDataManager.AccountData.Friends " + GameDataManager.AccountData.Friends.Count);
  250.         // Debug.Log("objects " + objects.Count);
  251.  
  252.         // RemoveFriendListeners ();
  253.  
  254.         _friendMap.Clear ();
  255.  
  256.         foreach (var item in objects)
  257.         {
  258.  
  259.             var playerItem = item.GetComponent<PlayerListItemView> ();
  260.  
  261.             var player = PlayerReference.AddData (GameDataManager.AccountData.Friends[i].FriendPlayFabId, GameDataManager.AccountData.Friends[i]);
  262.  
  263.             playerItem.ProfileInfo = GameDataManager.AccountData.Friends[i];
  264.  
  265.             var profile = playerItem.ProfileInfo.Profile;
  266.             // playerItem.transform.position = Vector3.zero;
  267.             // playerItem.transform.localPosition = Vector3.zero;
  268.             // playerItem.transform.localScale = Vector3.one;
  269.  
  270.             string value = profile.DisplayName;
  271.             string suffix = (value.Substring (Mathf.Max (0, value.Length - 5)));
  272.             int parsedSuffix = 0;
  273.             if (int.TryParse (suffix, out parsedSuffix))
  274.             {
  275.                 if (parsedSuffix > 0)
  276.                 {
  277.                     playerItem.PlayerName.text = (value.Substring (0, value.Length - 5));
  278.                 }
  279.                 else
  280.                 {
  281.                     playerItem.PlayerName.text = (value);
  282.                 }
  283.             }
  284.             else
  285.             {
  286.                 playerItem.PlayerName.text = (value);
  287.             }
  288.  
  289.             // playerItem.onPlayButtonClick += ;
  290.  
  291.             playerItem.Clear ();
  292.             playerItem.onPlayerInfoClick += OnProfileClicked;
  293.             if (profile.Statistics != null)
  294.             {
  295.                 var eloStat = profile.Statistics.Find (stat => stat.Name == "ELO");
  296.                 playerItem.PlayerRank.text = (eloStat != null) ? eloStat.Value.ToString () : "-";
  297.  
  298.                 var tierStat = profile.Statistics.Find (stat => stat.Name == "Tier");
  299.                 playerItem.PlayerTier.text = string.Format ("Tier {0}", (tierStat != null) ? tierStat.Value.ToString () : "");
  300.             }
  301.  
  302.             playerItem.SetState (player.State);
  303.  
  304.             _friendMap.Add (playerItem.ProfileInfo.FriendPlayFabId, playerItem);
  305.  
  306.             i++;
  307.         }
  308.     }
  309.  
  310.     public void OnBuildRecentList (List<GameObject> objects)
  311.     {
  312.         for (int i = 0, ilen = objects.Count; i < ilen; i++)
  313.         {
  314.             var recentPlayer = _recentPlayerList[i];
  315.             var playerItem = objects[i].GetComponent<PlayerListItemView> ();
  316.             playerItem.transform.position = Vector3.zero;
  317.             playerItem.transform.localPosition = Vector3.zero;
  318.             playerItem.transform.localScale = Vector3.one;
  319.  
  320.             //playerItem.CancelInviteButton.gameObject.SetActive(false);//button never visible
  321.             //playerItem.DeleteFriendButton.gameObject.SetActive(false);//button never visible
  322.             // perhaps change this to invite user?
  323.             //playerItem.InviteButton.gameObject.SetActive(false);//button never visible
  324.             playerItem.OnlineStatus.gameObject.SetActive (false);
  325.  
  326.             playerItem.ProfileInfo = GameDataManager.AccountData.Friends.Find (oldFriend => oldFriend.Profile.PlayerId == recentPlayer.FriendPlayFabId);
  327.             // if the player is not a friend make the item interactive to be invitable
  328.             if (playerItem.ProfileInfo == null)
  329.             {
  330.                 playerItem.PlayerTier.text = "";
  331.                 playerItem.PlayerRank.text = "";
  332.                 playerItem.PlayButtonText.text = "INVITE";
  333.                 playerItem.onPlayButtonClick += OnClickAddFriend;
  334.             }
  335.             else
  336.             {
  337.                 playerItem.OnlinePip.interactable = true;
  338.                 playerItem.PlayerRank.color = playerItem.Online;
  339.                 playerItem.PlayerRank.text = "FRIEND";
  340.  
  341.                 // playerItem.PlayButtonText.text = "INVITE";
  342.                 // playerItem.onPlayButtonClick += OnPlayButtonClicked;
  343.             }
  344.  
  345.             playerItem.Clear ();
  346.             playerItem.onPlayerInfoClick += OnProfileClicked;
  347.             playerItem.PlayerName.text = recentPlayer.Profile.DisplayName;
  348.             playerItem.State = -1;
  349.  
  350.         }
  351.     }
  352.  
  353.     private void FriendInfoChanged (object sender, ValueChangedEventArgs args)
  354.     {
  355.  
  356.         Debug.Log ("FriendInfoChanged");
  357.  
  358.         if (args.Snapshot != null)
  359.         {
  360.             string key = args.Snapshot.Reference.Parent.Key;
  361.             if (args.Snapshot.Value != null)
  362.             {
  363.                 int state = Convert.ToInt32 (args.Snapshot.Value);
  364.                 // _actionQueue.Enqueue(() =>
  365.                 // {
  366.                 FriendStateChanged (key, state);
  367.                 // });
  368.                 return;
  369.             }
  370.             // _actionQueue.Enqueue(() =>
  371.             // {
  372.             FriendStateChanged (key, 0);
  373.             // });
  374.         }
  375.     }
  376.  
  377.     private void FriendStateChanged (string senderPlayFabId, int state)
  378.     {
  379.  
  380.         if (_friendList == null) { return; }
  381.         PlayerListItemView playerListItemView = null;
  382.  
  383.         // If we're viewing them in detail view, update
  384.         if (_selectedPlayer != null)
  385.         {
  386.             if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == senderPlayFabId)
  387.             {
  388.  
  389.                 int mask = View.UserInfoMessagePrefab.GetButtonState ();
  390.                 if ((state & 1) == 0 || (state & 2) == 0 || (state & 4) == 4)
  391.                 {
  392.                     mask &= ~(int) FriendButtonLayout.Available;
  393.                 }
  394.                 else
  395.                 {
  396.                     // online and in menu
  397.                     if ((state & 1) == 1 && (state & 2) == 2)
  398.                     {
  399.                         mask |= (int) FriendButtonLayout.Available;
  400.                     }
  401.                 }
  402.                 View.UserInfoMessagePrefab.SetButtonState (mask);
  403.             }
  404.         }
  405.  
  406.         // if we have them in our item list, update
  407.         if (_friendMap.TryGetValue (senderPlayFabId, out playerListItemView))
  408.         {
  409.             if (playerListItemView == null) { return; }
  410.  
  411.             // playerListItemView.State = state;
  412.  
  413.             // playerListItemView.ProfileInfo = GameDataManager.AccountData.Friends.Find (friend => friend.FriendPlayFabId == senderPlayFabId);
  414.             // if (playerListItemView.ProfileInfo == null) { return; }
  415.             // playerListItemView.CanvasGroup.interactable = true;
  416.  
  417.             // default stuff
  418.             // playerListItemView.OnlinePip.interactable = false;
  419.             // playerListItemView.OnlineStatus.color = playerListItemView.Offline;
  420.             // playerListItemView.OnlineStatus.text = "offline";
  421.             // playerListItemView.OnlineStatus.gameObject.SetActive(true);
  422.  
  423.             // playerListItemView.gameObject.SetActive(false);
  424.  
  425.             // playerListItemView.PlayButton.gameObject.SetActive(((state & 1) == 1)); // Play button only available if online and not further
  426.  
  427.             playerListItemView.SetState (state);
  428.  
  429.             playerListItemView.gameObject.SetActive (true);
  430.             return;
  431.         }
  432.  
  433.         return;
  434.     }
  435.  
  436.     private void UserProfileCloseButtonOnClick ()
  437.     {
  438.         _selectedPlayer = null;
  439.         View.UserInfoMessagePrefab.gameObject.SetActive (false);
  440.     }
  441.  
  442.     private void OnSquadStateChanged (SquadState squadState)
  443.     {
  444.         _squadState = squadState;
  445.         switch (squadState)
  446.         {
  447.             case SquadState.Forming:
  448.                 break;
  449.                 // find match...
  450.             case SquadState.FindRoom:
  451.  
  452.                 if (View.SquadWindow.SquadLeader)
  453.                 {
  454.                     Debug.Log ("FindRoom");
  455.                     SquadService.SetSquadState (SquadState.JoinRoom);
  456.                 }
  457.                 // if (_userList.Count > 0 && View.SquadWindow.SquadLeader)
  458.                 // {
  459.                 // FindRoom ();
  460.                 // }
  461.  
  462.                 // var mainLobby = GameObject.FindObjectOfType<MainLobbyView>();
  463.                 // mainLobby.Battle.isOn = true;
  464.                 break;
  465.             case SquadState.JoinRoom:
  466.                 Debug.Log ("JoinRoom");
  467.                 // if (View.SquadWindow.SquadLeader) break;
  468.                 FindRoom ();
  469.                 break;
  470.         }
  471.     }
  472.  
  473.     private void FindRoom ()
  474.     {
  475.         Debug.Log ("FindRoom");
  476.  
  477.         // var squadLeader = _userList.Find (u => u.SquadLeader);
  478.         PlayerMatchupStateView.Instance.IsSquadMatchUp = true;
  479.  
  480.         PlayerMatchupStateView.Instance.IsSquadLeader = SquadService.SquadLeader;
  481.  
  482.         // Whether leader or not... join
  483.         var mainLobby = GameObject.FindObjectOfType<MainLobbyView> ();
  484.         mainLobby.Battle.isOn = true;
  485.     }
  486.  
  487.     private void ClearSquadInfo ()
  488.     {
  489.         _elo = -1;
  490.         _tier = -1;
  491.         _squadState = SquadState.Forming;
  492.     }
  493.  
  494.     private void OnProfileClicked (PlayerListItemView playerItem)
  495.     {
  496.         Debug.Log ("ON PROFILE CLICKED");
  497.         if (!playerItem || !playerItem.gameObject.activeInHierarchy) return;
  498.         if (_fetchingUserInfo) return;
  499.  
  500.         _fetchingUserInfo = true;
  501.         var friend = playerItem.ProfileInfo;
  502.  
  503.         View.UserInfoMessagePrefab.SetButtonState (-1);
  504.  
  505.         Debug.Log ("fetch user info....");
  506.  
  507.         Debug.Log ("friend.FriendPlayFabId " + friend.FriendPlayFabId);
  508.  
  509.         PlayFabClientAPI.ExecuteCloudScript<FetchUserInfoResult> (new ExecuteCloudScriptRequest
  510.         {
  511.             FunctionName = "FetchUserInfoRequest",
  512.                 FunctionParameter = new { UserPlayFabId = friend.FriendPlayFabId },
  513.                 GeneratePlayStreamEvent = true
  514.         }, (result) =>
  515.         {
  516.             Debug.Log ("result.FunctionResult " + result.FunctionResult.ToString ());
  517.  
  518.             foreach (var line in result.Logs)
  519.             {
  520.                 Debug.LogError ("cloud: " + line.Message);
  521.             }
  522.             Debug.Log ("result.Error " + result.Error);
  523.  
  524.             _fetchingUserInfo = false;
  525.  
  526.             // var json = PlayFab.PluginManager.GetPlugin<ISerializerPlugin>(PluginContract.PlayFab_Serializer);
  527.  
  528.             // string jsonString = json.SerializeObject(result.FunctionResult);
  529.             // FetchUserInfoResult friendData = json.DeserializeObject<FetchUserInfoResult>(jsonString);
  530.  
  531.             if (result.Error == null)
  532.             {
  533.                 FetchUserInfoResult friendData = result.FunctionResult as FetchUserInfoResult;
  534.  
  535.                 if (friendData != null)
  536.                 {
  537.                     int buttonState = View.UserInfoMessagePrefab.GetButtonState ();
  538.                     PlayFab.ClientModels.FriendInfo foundFriend = GameDataManager.AccountData.Friends.Find (oldFriend => oldFriend.FriendPlayFabId == friend.FriendPlayFabId);
  539.                     if (foundFriend == null)
  540.                     {
  541.                         buttonState &= ~(int) FriendButtonLayout.Friended;
  542.                     }
  543.                     else
  544.                     {
  545.                         buttonState |= (int) FriendButtonLayout.Friended;
  546.                     }
  547.  
  548.                     // not online, not in menu, in game
  549.                     if ((playerItem.State & 1) == 0 || (playerItem.State & 2) == 0 || (playerItem.State & 4) == 4)
  550.                     {
  551.                         buttonState &= ~(int) FriendButtonLayout.Available;
  552.                     }
  553.                     else
  554.                     {
  555.                         // online and in menu
  556.                         if ((playerItem.State & 1) == 1 && (playerItem.State & 2) == 2)
  557.                         {
  558.                             buttonState |= (int) FriendButtonLayout.Available;
  559.                         }
  560.                     }
  561.  
  562.                     var newInfo = new UserInfoMessageData
  563.                     {
  564.                         UserInfo = friendData,
  565.                         MaxHeroes = friendData.HeroCount,
  566.                         FriendButtonMask = buttonState
  567.                     };
  568.  
  569.                     PlayerReference.AddData (friend.FriendPlayFabId, newInfo);
  570.  
  571.                     _selectedPlayer = newInfo;
  572.  
  573.                     // SquadService.SquadInSameSquadQuery (_selectedPlayer);
  574.                     // SquadService.SquadOutboxQuery (_selectedPlayer);
  575.                     // SquadService.SquadInboxQuery (_selectedPlayer);
  576.  
  577.                     View.UserInfoMessagePrefab.SetData (_selectedPlayer);
  578.                     View.UserInfoMessagePrefab.gameObject.SetActive (true);
  579.                 }
  580.                 else
  581.                 {
  582.                     Debug.LogError ("friendData is null");
  583.                 }
  584.  
  585.             }
  586.             else
  587.             {
  588.                 Debug.LogError ("result error " + result.Error.Message + " | " + result.Error.StackTrace);
  589.             }
  590.         }, (error) =>
  591.         {
  592.             Debug.LogError ("FetchUserInfo Error " + error.ErrorMessage);
  593.         });
  594.     }
  595.  
  596.     // private void OnSquadInboxAdded (SquadInvite invite)
  597.     // {
  598.     //     Debug.Log ("OnSquadInboxAdded");
  599.     //     if (_selectedPlayer == null) { return; }
  600.     //     if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == invite.PlayFabId)
  601.     //     {
  602.     //         int mask = View.UserInfoMessagePrefab.GetButtonState ();
  603.     //         mask |= (int) FriendButtonLayout.SquadInviteReceived;
  604.     //         View.UserInfoMessagePrefab.SetButtonState (mask);
  605.     //     }
  606.     // }
  607.  
  608.     // private void OnSquadInboxRemoved (string playFabId)
  609.     // {
  610.     //     if (_selectedPlayer == null) { return; }
  611.     //     if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == playFabId)
  612.     //     {
  613.     //         int mask = View.UserInfoMessagePrefab.GetButtonState ();
  614.     //         mask &= ~(int) FriendButtonLayout.SquadInviteReceived;
  615.     //         View.UserInfoMessagePrefab.SetButtonState (mask);
  616.     //     }
  617.     // }
  618.  
  619.     private List<string> _invitedList = new List<string> ();
  620.     private void OnSquadOutboxAdded (string playFabId)
  621.     {
  622.         Debug.Log ("invited friend " + playFabId);
  623.         if (_friendMap.ContainsKey (playFabId))
  624.         {
  625.             if (!_invitedList.Contains (playFabId))
  626.             {
  627.                 _invitedList.Add (playFabId);
  628.             }
  629.             PlayerListItemView playerListItemView = _friendMap[playFabId];
  630.             playerListItemView.CanvasGroup.interactable = false;
  631.             playerListItemView.OnlineStatus.text = "invited";
  632.         }
  633.  
  634.         if (_selectedPlayer == null)
  635.         {
  636.             return;
  637.         }
  638.         if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == playFabId)
  639.         {
  640.             int mask = View.UserInfoMessagePrefab.GetButtonState ();
  641.             mask |= (int) FriendButtonLayout.SquadInviteSent;
  642.             View.UserInfoMessagePrefab.SetButtonState (mask);
  643.         }
  644.     }
  645.  
  646.     private void OnSquadOutboxRemoved (string playFabId)
  647.     {
  648.         if (_friendMap.ContainsKey (playFabId))
  649.         {
  650.             if (_invitedList.Contains (playFabId))
  651.             {
  652.                 _invitedList.Remove (playFabId);
  653.             }
  654.             PlayerListItemView playerListItemView = _friendMap[playFabId];
  655.             FriendStateChanged (playFabId, playerListItemView.State);
  656.         }
  657.         if (_selectedPlayer == null)
  658.         {
  659.             if (_friendMap.ContainsKey (playFabId))
  660.             {
  661.                 _friendMap[playFabId].CanvasGroup.interactable = true;
  662.             }
  663.             return;
  664.         }
  665.         if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == playFabId)
  666.         {
  667.             int mask = View.UserInfoMessagePrefab.GetButtonState ();
  668.             mask &= ~(int) FriendButtonLayout.SquadInviteSent;
  669.             View.UserInfoMessagePrefab.SetButtonState (mask);
  670.         }
  671.     }
  672.  
  673.     // private void OnSquadInSameSquadQuery (string playFabId, bool inSameSquad)
  674.     // {
  675.     //     // user info screen closed, don't care if they are invited or not
  676.     //     if (_selectedPlayer == null) { return; }
  677.     //     if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == playFabId)
  678.     //     {
  679.     //         int mask = View.UserInfoMessagePrefab.GetButtonState ();
  680.     //         if (inSameSquad)
  681.     //         {
  682.     //             mask |= (int) FriendButtonLayout.InMySquad;
  683.     //         }
  684.     //         else
  685.     //         {
  686.     //             mask &= ~(int) FriendButtonLayout.InMySquad;
  687.     //         }
  688.     //         View.UserInfoMessagePrefab.SetButtonState (mask);
  689.     //     }
  690.     // }
  691.  
  692.     // private void OnSquadInboxQuery (string playFabId, bool invited)
  693.     // {
  694.     //     // user info screen closed, don't care if they are invited or not
  695.     //     if (_selectedPlayer == null)
  696.     //     {
  697.  
  698.     //         return;
  699.     //     }
  700.     //     if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == playFabId)
  701.     //     {
  702.     //         int mask = View.UserInfoMessagePrefab.GetButtonState ();
  703.     //         if (invited)
  704.     //         {
  705.     //             mask |= (int) FriendButtonLayout.SquadInviteReceived;
  706.     //         }
  707.     //         else
  708.     //         {
  709.     //             mask &= ~(int) FriendButtonLayout.SquadInviteReceived;
  710.     //         }
  711.     //         View.UserInfoMessagePrefab.SetButtonState (mask);
  712.     //     }
  713.     // }
  714.  
  715.     // private void OnSquadOutboxQuery (string playFabId, bool invited)
  716.     // {
  717.     //     // user info screen closed, don't care if they are invited or not
  718.     //     if (_selectedPlayer == null)
  719.     //     {
  720.     //         return;
  721.     //     }
  722.     //     if (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == playFabId)
  723.     //     {
  724.     //         int mask = View.UserInfoMessagePrefab.GetButtonState ();
  725.     //         if (invited)
  726.     //         {
  727.     //             mask |= (int) FriendButtonLayout.SquadInviteSent;
  728.     //         }
  729.     //         else
  730.     //         {
  731.     //             mask &= ~(int) FriendButtonLayout.SquadInviteSent;
  732.     //         }
  733.     //         View.UserInfoMessagePrefab.SetButtonState (mask);
  734.     //     }
  735.     // }
  736.  
  737.     private void OnSquadSelfAcceptInvite (string playFabId)
  738.     {
  739.         Debug.LogError ("OnSquadSelfAcceptInvite ");
  740.         if (_selectedPlayer != null && _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId == playFabId)
  741.         {
  742.             int mask = View.UserInfoMessagePrefab.GetButtonState ();
  743.             mask |= (int) FriendButtonLayout.InMySquad;
  744.             View.UserInfoMessagePrefab.SetButtonState (mask);
  745.         }
  746.         View.SquadWindow.ClearSquadUsers ();
  747.         SquadService.SquadLeader = false;
  748.         for (int i = 0, ilen = View.SquadWindow.SquadSlots.Count; i < ilen; i++)
  749.         {
  750.             View.SquadWindow.SquadSlots[i].ClearData ();
  751.             View.SquadWindow.SquadStats[i].ClearData ();
  752.         }
  753.         _friendList = null;
  754.         // RemoveFriendListeners ();
  755.         OnHideWindow ();
  756.         WindowManager.WindowShow ("FriendsScreen");
  757.         View.SquadWindow.gameObject.SetActive (true);
  758.  
  759.         View.CloseButton.gameObject.SetActive (false);
  760.         View.LeaveSquadButton.gameObject.SetActive (true);
  761.         PlayerAccountData.SetPlayerStateFlag (8);
  762.     }
  763.  
  764.     private void OnSquadChildAdded (string playFabId, int index)
  765.     {
  766.         int squadSlot = index;
  767.         View.SquadWindow.PopulateSquadData (squadSlot, null);
  768.         PlayerReference.GetUserInfoMessage (playFabId, (userInfo) => // retreieve or fetch user info for squad slot
  769.             {
  770.                 View.SquadWindow.PopulateSquadData (squadSlot, userInfo);
  771.             });
  772.         return;
  773.  
  774.     }
  775.  
  776.     private void OnSquadChildRemoved (string playFabId, int index)
  777.     {
  778.         Debug.LogError ("OnSquadChildRemoved " + playFabId);
  779.         if (_squadState == SquadState.MatchMake || _squadState == SquadState.FindRoom)
  780.         {
  781.             SquadService.ClearSquadData ();
  782.  
  783.             View.SquadWindow.ClearSquadUsers ();
  784.             SquadService.SquadLeader = false;
  785.             for (int i = 0, ilen = View.SquadWindow.SquadSlots.Count; i < ilen; i++)
  786.             {
  787.                 View.SquadWindow.SquadSlots[i].ClearData ();
  788.                 View.SquadWindow.SquadStats[i].ClearData ();
  789.             }
  790.             _friendList = null;
  791.             _recentList = null;
  792.             // RemoveFriendListeners ();
  793.  
  794.             PlayerAccountData.SetPlayerStateValue (3);
  795.             OnHideWindow ();
  796.             HeaderMediator.OnSetNetLockActive (false);
  797.             HeaderMediator.OnSetNetLockText ("");
  798.             OnShowWindow ();
  799.             if (playFabId == PlayerAccountData.PlayFabId)
  800.             {
  801.                 return;
  802.             }
  803.  
  804.             MessageManager.Instance.ShowMessage (PCMessageType.Error, new MessageData
  805.             {
  806.                 Title = "User Left Squad",
  807.                     Body = "A squad member has left the squad."
  808.             });
  809.             return;
  810.         }
  811.  
  812.         // we're the one who left...
  813.         // clear everything and return to main friends window
  814.         if (playFabId == PlayerAccountData.PlayFabId)
  815.         {
  816.             View.SquadWindow.ClearSquadUsers ();
  817.             SquadService.SquadLeader = false;
  818.             for (int i = 0, ilen = View.SquadWindow.SquadSlots.Count; i < ilen; i++)
  819.             {
  820.                 View.SquadWindow.SquadSlots[i].ClearData ();
  821.                 View.SquadWindow.SquadStats[i].ClearData ();
  822.             }
  823.             _friendList = null;
  824.             _recentList = null;
  825.             // RemoveFriendListeners ();
  826.  
  827.             if (View.Content.gameObject.activeInHierarchy)
  828.             {
  829.                 OnHideWindow ();
  830.                 OnShowWindow ();
  831.             }
  832.             return;
  833.         }
  834.  
  835.         switch (index)
  836.         {
  837.             case 0:
  838.                 // leader left, clear squad and return to main friends window
  839.  
  840.                 View.SquadWindow.ClearSquadUsers ();
  841.                 SquadService.SquadLeader = false;
  842.                 for (int i = 0, ilen = View.SquadWindow.SquadSlots.Count; i < ilen; i++)
  843.                 {
  844.                     View.SquadWindow.SquadSlots[i].ClearData ();
  845.                     View.SquadWindow.SquadStats[i].ClearData ();
  846.                 }
  847.                 _friendList = null;
  848.                 _recentList = null;
  849.                 // RemoveFriendListeners ();
  850.                 OnHideWindow ();
  851.                 OnShowWindow ();
  852.                 break;
  853.             case 1:
  854.                 if (View.SquadWindow.SquadUsers[2] != null)
  855.                 {
  856.                     View.SquadWindow.SquadUsers[1] = View.SquadWindow.SquadUsers[2];
  857.                     View.SquadWindow.SquadUsers[2] = null;
  858.                     View.SquadWindow.ClearSquadData (2);
  859.                     View.SquadWindow.PopulateSquadData (1, View.SquadWindow.SquadUsers[1]);
  860.                 }
  861.                 else
  862.                 {
  863.                     View.SquadWindow.ClearSquadData (index);
  864.                 }
  865.                 break;
  866.             case 2:
  867.                 View.SquadWindow.ClearSquadData (index);
  868.                 break;
  869.         }
  870.     }
  871.  
  872.     private void OnTabButtonClicked (int i)
  873.     {
  874.         View.TabState = (FriendsListView.TabStates) i;
  875.     }
  876.  
  877.     public void CloseSquadWindow ()
  878.     {
  879.         Debug.Log ("CloseSquadWindow");
  880.  
  881.         if (View.SquadWindow.SquadLeader) // i am the squad leader... kill the squad?
  882.         {
  883.             MatchMakingService.Cancel ();
  884.         }
  885.  
  886.         View.SquadWindow.ClearSquadUsers ();
  887.         SquadService.SquadLeader = false;
  888.         for (int i = 0, ilen = View.SquadWindow.SquadSlots.Count; i < ilen; i++)
  889.         {
  890.             View.SquadWindow.SquadSlots[i].ClearData ();
  891.             View.SquadWindow.SquadStats[i].ClearData ();
  892.         }
  893.         _friendList = null;
  894.         _recentList = null;
  895.         // RemoveFriendListeners ();
  896.  
  897.         HeaderMediator.OnSetNetLockActive (false);
  898.         HeaderMediator.OnSetNetLockText ("");
  899.  
  900.         SetElementVisibleSignal.Dispatch ("LobbyScreen", true);
  901.  
  902.         View.Modal.SetActive (false);
  903.         WindowManager.WindowHide ("FriendsScreen");
  904.  
  905.         // SquadService.ClearSquadOutbox ();
  906.  
  907.         PlayerAccountData.SetPlayerStateValue (1);
  908.         ClearSquadInfo ();
  909.     }
  910.  
  911.     private void OnTabStateChanged (FriendsListView.TabStates tabstate)
  912.     {
  913.         ClearTabsStates ();
  914.         if (PlayerAccountData.PlayerStateValue < 3) { return; }
  915.         switch (tabstate)
  916.         {
  917.             case FriendsListView.TabStates.Friends:
  918.                 ShowFriendList (null);
  919.                 break;
  920.             case FriendsListView.TabStates.Recent:
  921.                 ShowRecentList ();
  922.                 break;
  923.             case FriendsListView.TabStates.Clan:
  924.                 break;
  925.             case FriendsListView.TabStates.Facebook:
  926.                 Debug.Log ("Clicked tab 3 (facebook)");
  927.                 ShowFacebookList ();
  928.                 break;
  929.         }
  930.  
  931.         if (View.TabPanels[(int) tabstate].gameObject != null)
  932.         {
  933.             View.TabPanels[(int) tabstate].gameObject.SetActive (true);
  934.         }
  935.     }
  936.  
  937.     private void ClearTabsStates ()
  938.     {
  939.         foreach (var tab in View.TabPanels)
  940.         {
  941.             tab.gameObject.SetActive (false);
  942.         }
  943.     }
  944.  
  945.     public void OnShowWindow ()
  946.     {
  947.         Debug.Log("FriendsListMediator OnShowWindow");
  948.         View.CloseButton.gameObject.SetActive (true);
  949.         View.LeaveSquadButton.gameObject.SetActive (false);
  950.         _actionQueue.Clear ();
  951.         View.Modal.SetActive (false);
  952.         SetElementVisibleSignal.Dispatch ("LobbyScreen", false);
  953.         _fetchingUserInfo = false;
  954.         SquadService.SquadLeader = false;
  955.         View.ActionBar.SetActive (true);
  956.         View.UserInfoMessagePrefab.gameObject.SetActive (false);
  957.         View.SquadWindow.gameObject.SetActive (false);
  958.         View.MainFriendsPanels.SetActive (true);
  959.         View.TabState = FriendsListView.TabStates.Friends;
  960.  
  961.         ClearSquadInfo ();
  962.  
  963.         OnTabButtonClicked (0);
  964.         // PlayerAccountData.SetPlayerStateValue (3);
  965.     }
  966.     // called when user is kicked from a squad
  967.     // or they are the squad leader and they left the squad
  968.     public void OnHideWindow ()
  969.     {
  970.         Debug.Log("OnHideWindow");
  971.         View.CloseButton.gameObject.SetActive (true);
  972.         View.LeaveSquadButton.gameObject.SetActive (false);
  973.         View.Modal.SetActive (false);
  974.         _friendList = null;
  975.         _recentList = null;
  976.     }
  977.  
  978.     private void ShowAddFriendPanel ()
  979.     {
  980.         View.AddFriendPanel.SetActive (true);
  981.     }
  982.  
  983.     private void HideAddFriendPanel ()
  984.     {
  985.         View.AddFriendPanel.SetActive (false);
  986.     }
  987.  
  988.     #region UserInfoButtons
  989.  
  990.     private void OnDeletePlayer ()
  991.     {
  992.         if (_selectedPlayer == null) { return; }
  993.         View.UserInfoMessagePrefab.FriendRemove.transform.parent.gameObject.SetActive (false);
  994.         // RemoveFriendListeners (_selectedPlayer.FriendData.InfoResultPayload.AccountInfo.PlayFabId);
  995.         PlayFab.PlayFabClientAPI.RemoveFriend (new RemoveFriendRequest ()
  996.         {
  997.             FriendPlayFabId = _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId
  998.         }, (result) =>
  999.         {
  1000.             View.UserInfoMessagePrefab.gameObject.SetActive (false);
  1001.             PlayFab.ClientModels.FriendInfo foundFriend = GameDataManager.AccountData.Friends.Find (oldFriend => oldFriend.Profile.PlayerId == _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId);
  1002.             if (foundFriend != null)
  1003.             {
  1004.                 GameDataManager.AccountData.Friends.Remove (foundFriend);
  1005.             }
  1006.             Promise p = new Promise ();
  1007.             p.Then (() => ShowRecentList ());
  1008.             ShowFriendList (p);
  1009.         }, null);
  1010.     }
  1011.  
  1012.     [System.Obsolete] //depreciated cause the button this binds to is NEVER enabled
  1013.     private void OnDeletePlayer (PlayerListItemView playerItem, PlayFab.ClientModels.FriendInfo friend)
  1014.     {
  1015.         //TODO: popup to remove friend.
  1016.         // RemoveFriendListeners (friend.FriendPlayFabId);
  1017.         PlayFab.PlayFabClientAPI.RemoveFriend (new RemoveFriendRequest ()
  1018.         {
  1019.             FriendPlayFabId = friend.FriendPlayFabId
  1020.         }, (result) =>
  1021.         {
  1022.             PlayFab.ClientModels.FriendInfo foundFriend = GameDataManager.AccountData.Friends.Find (oldFriend => oldFriend.Profile.PlayerId == friend.FriendPlayFabId);
  1023.             if (foundFriend != null)
  1024.             {
  1025.                 PlayerReference.RemovePlayer (friend.FriendPlayFabId);
  1026.                 GameDataManager.AccountData.Friends.Remove (foundFriend);
  1027.             }
  1028.         }, null);
  1029.     }
  1030.  
  1031.     private void InviteFriendOnClick ()
  1032.     {
  1033.         if (null == _selectedPlayer)
  1034.         {
  1035.             return;
  1036.         }
  1037.         AddFriend (FriendIdType.PlayFabId, _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId);
  1038.     }
  1039.  
  1040.     private void OnAddFriendClicked ()
  1041.     {
  1042.         if (string.IsNullOrEmpty (View.AddFriendNameText.text))
  1043.         {
  1044.             return;
  1045.         }
  1046.         else
  1047.         {
  1048.             AddFriend (FriendIdType.DisplayName, View.AddFriendNameText.text);
  1049.         }
  1050.     }
  1051.  
  1052.     private void OnClickAddFriend (PlayerListItemView playerItem)
  1053.     {
  1054.         Debug.Log ("On Click Add Friend");
  1055.         AddFriend (FriendIdType.PlayFabId, playerItem.ProfileInfo.FriendPlayFabId);
  1056.     }
  1057.  
  1058.     private void AddFriend (FriendIdType idType, string friendId)
  1059.     {
  1060.         //var request = new GetAccountInfoRequest();
  1061.         var request = new AddFriendRequest ();
  1062.         switch (idType)
  1063.         {
  1064.             case FriendIdType.PlayFabId:
  1065.                 request.FriendPlayFabId = friendId;
  1066.                 break;
  1067.             case FriendIdType.Username:
  1068.                 request.FriendUsername = friendId;
  1069.                 break;
  1070.             case FriendIdType.Email:
  1071.                 request.FriendEmail = friendId;
  1072.                 break;
  1073.             case FriendIdType.DisplayName:
  1074.                 request.FriendTitleDisplayName = friendId;
  1075.                 break;
  1076.         }
  1077.  
  1078.         //PlayFabClientAPI.GetAccountInfo(request, (accountInfoResult)=> {
  1079.         // Execute request and update friends when we are done
  1080.         PlayFabClientAPI.AddFriend (request,
  1081.             result =>
  1082.             {
  1083.  
  1084.                 PlayFab.ClientModels.FriendInfo foundFriend = GameDataManager.AccountData.Friends.Find (oldFriend => oldFriend.Profile.PlayerId == friendId);
  1085.                 if (foundFriend == null)
  1086.                 {
  1087.  
  1088.                     PlayFab.ClientModels.FriendInfo friendInfo = new PlayFab.ClientModels.FriendInfo
  1089.                     {
  1090.                         FriendPlayFabId = friendId,
  1091.                         Profile = new PlayerProfileModel
  1092.                         {
  1093.                             DisplayName = "new friend",
  1094.                             PlayerId = friendId
  1095.                         }
  1096.                     };
  1097.  
  1098.                     GameDataManager.AccountData.Friends.Add (friendInfo);
  1099.                     // PlayerReference.AddData(friendId, friendInfo);
  1100.  
  1101.                     PlayerReference.GetUserInfoMessage (friendId, (userInfo) =>
  1102.                     {
  1103.                         Debug.Log ("fetched user info..."); // ... maybe want to refetch friends...
  1104.  
  1105.                     });
  1106.                 }
  1107.                 Promise p = new Promise ();
  1108.                 p.Then (() => ShowRecentList ());
  1109.                 ShowFriendList (p);
  1110.                 HideAddFriendPanel ();
  1111.                 View.UserInfoMessagePrefab.gameObject.SetActive (false);
  1112.                 View.AddFriendNameText.text = "";
  1113.             }, (error) =>
  1114.             {
  1115.                 switch (error.ErrorMessage)
  1116.                 {
  1117.                     case "User not found":
  1118.                         MessageManager.Instance.ShowMessage (PCMessageType.Error, new ErrorMessageData
  1119.                         {
  1120.                             Title = "Player Not Found",
  1121.                                 Body = "Player \"" + friendId + "\" not found."
  1122.                         });
  1123.                         break;
  1124.                 }
  1125.  
  1126.                 Debug.Log ("Error Addind Friend");
  1127.                 Debug.Log (error.ErrorMessage);
  1128.                 Debug.Log (error.ErrorDetails);
  1129.             });
  1130.     }
  1131.  
  1132.     private void AddPlayerToClan ()
  1133.     {
  1134.         Debug.Log ("Add Player: " + _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId + " to Clan");
  1135.     }
  1136.  
  1137.     private void RemovePlayerFromClan ()
  1138.     {
  1139.         Debug.Log ("Remove Player: " + _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId + " from Clan");
  1140.     }
  1141.  
  1142.     private void SquadInviteOnClick ()
  1143.     {
  1144.         Debug.LogError ("SquadInviteOnClick");
  1145.         if (_selectedPlayer == null) { Debug.LogError ("_selectedPlayer == null"); return; }
  1146.  
  1147.         PlayerListItemView playerListItemView = null;
  1148.         if (_friendMap.TryGetValue (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId, out playerListItemView))
  1149.         {
  1150.  
  1151.             if (playerListItemView == null) { Debug.Log ("playerListItemView == null(return)"); return; }
  1152.  
  1153.             if ((playerListItemView.State & 1) == 0) { Debug.Log ("Friend offline(return)"); return; }
  1154.             if ((playerListItemView.State & 2) == 0 || (playerListItemView.State & 4) == 4) { Debug.Log ("Friend not ready or in game(return)"); return; }
  1155.  
  1156.             playerListItemView.OnInviteClicked (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId);
  1157.  
  1158.             Debug.Log ("Add Player: " + _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId + " to Squad");
  1159.             // SquadService.SquadInviteAdd(_selectedPlayer);
  1160.  
  1161.         }
  1162.         else
  1163.         {
  1164.             Debug.LogError ("Could not find player in _friendMap(return)");
  1165.             return;
  1166.         }
  1167.  
  1168.     }
  1169.  
  1170.     private void SquadCancelOnClick ()
  1171.     {
  1172.         if (_selectedPlayer == null) { Debug.Log ("_selectedPlayer == null"); return; }
  1173.         Debug.LogError ("Remove Player: " + _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId + " from Squad");
  1174.         // SquadService.SquadInviteRemove (_selectedPlayer);
  1175.     }
  1176.  
  1177.     private void SquadAcceptOnClick ()
  1178.     {
  1179.         if (_selectedPlayer == null) { Debug.Log ("_selectedPlayer == null"); return; }
  1180.         Debug.LogError ("Remove Player: " + _selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId + " from Squad");
  1181.         // SquadService.SquadInviteAccept (_selectedPlayer.UserInfo.InfoResultPayload.AccountInfo.PlayFabId);
  1182.     }
  1183.  
  1184.     #endregion
  1185.     private void error (PlayFabError obj)
  1186.     {
  1187.         throw new NotImplementedException ();
  1188.     }
  1189.  
  1190.     public void ShowFriendList (Promise p = null)
  1191.     {
  1192.         ShowFriendList (_friendList == null ? View.TabPanels[0].GetComponent<ListView> () : _friendList, p);
  1193.     }
  1194.  
  1195.     public void ShowRecentList ()
  1196.     {
  1197.         ShowRecentList (_recentList == null ? View.TabPanels[1].GetComponent<ListView> () : _recentList);
  1198.     }
  1199.  
  1200.     public void ShowFacebookList ()
  1201.     {
  1202.         Debug.Log ("show facebook list first");
  1203.         ShowFacebookList (_facebookList == null ? View.TabPanels[3].GetComponent<ListView> () : _facebookList);
  1204.     }
  1205.  
  1206.     private PlayerProfileViewConstraints _profileConstraints = new PlayFab.ClientModels.PlayerProfileViewConstraints
  1207.     {
  1208.         ShowAvatarUrl = true,
  1209.         ShowDisplayName = true,
  1210.         ShowMemberships = true,
  1211.         ShowStatistics = true,
  1212.         ShowTags = true,
  1213.     };
  1214.  
  1215.     public void ShowFriendList (ListView listView = null, Promise p = null)
  1216.     {
  1217.         if (!PlayFab.PlayFabClientAPI.IsClientLoggedIn ())
  1218.             return;
  1219.  
  1220.         if (GameDataManager.AccountData.Friends == null)
  1221.         {
  1222.             PlayFabManager.FetchFriendsList ((success) =>
  1223.             {
  1224.                 if (success)
  1225.                 {
  1226.                     RefreshFriendsListObjects (listView);
  1227.                     if (p != null)
  1228.                     {
  1229.                         p.Resolve ();
  1230.                     }
  1231.                 }
  1232.                 else
  1233.                 {
  1234.                     Debug.LogError ("Failed to fetch friends, resolve promise anyway");
  1235.                     p.Resolve ();
  1236.                 }
  1237.             });
  1238.         }
  1239.         else
  1240.         {
  1241.             RefreshFriendsListObjects (listView);
  1242.         }
  1243.     }
  1244.  
  1245.     public void RefreshFriendsListObjects (ListView listView = null)
  1246.     {
  1247.         if (_friendList != null)
  1248.         {
  1249.             //for(int i = 0, ilen = _friendList.)
  1250.             _friendList.ClearContainer ();
  1251.             _friendList.OnContainerRebuild -= OnBuildFriendList;
  1252.         }
  1253.         _friendList = listView == null ? _friendList == null ? View.TabPanels[0].GetComponent<ListView> () : _friendList : listView;
  1254.         _friendList.OnContainerRebuild -= OnBuildFriendList;
  1255.         _friendList.OnContainerRebuild += OnBuildFriendList;
  1256.         //_friendList = View.TabPanels[0].GetComponent<ListView>();
  1257.         _friendList.ClearContainer ();
  1258.         _friendList.BulkAddToContainer (View.PlayerListItemPrefab, GameDataManager.AccountData.Friends.Count);
  1259.     }
  1260.  
  1261.     private void ShowFacebookList (ListView listView = null)
  1262.     {
  1263.         Debug.Log ("Show facebook friends real");
  1264.  
  1265.         if (!FB.IsInitialized || !FB.IsLoggedIn) { return; }
  1266.  
  1267.         /*string FriendsText;
  1268.         string query = "/me/friends";
  1269.         FB.API(query, HttpMethod.GET, result =>
  1270.         {
  1271.             var dictionary = (Dictionary<string, object>)Facebook.MiniJSON.Json.Deserialize(result.RawResult);
  1272.             var friendsList = (List<object>)dictionary["data"];
  1273.             FriendsText = string.Empty;
  1274.             foreach (var dict in friendsList)
  1275.             {
  1276.                 FriendsText += ((Dictionary<string, object>)dict)["name"];
  1277.             }
  1278.             Debug.Log(FriendsText);
  1279.         });*/
  1280.  
  1281.         PlayFab.PlayFabClientAPI.GetFriendsList (new PlayFab.ClientModels.GetFriendsListRequest ()
  1282.         {
  1283.             IncludeFacebookFriends = true,
  1284.                 IncludeSteamFriends = false,
  1285.                 ProfileConstraints = _profileConstraints
  1286.         }, (response) =>
  1287.         {
  1288.             if (_facebookList != null)
  1289.             {
  1290.                 //for(int i = 0, ilen = _friendList.)
  1291.                 _facebookList.ClearContainer ();
  1292.                 _facebookList.OnContainerRebuild -= OnBuildFacebookFriendList;
  1293.             }
  1294.             Debug.Log ("fetched friends.Count:" + response.Friends.Count);
  1295.             //GameDataManager.AccountData.Friends
  1296.             List<PlayFab.ClientModels.FriendInfo> facebookFriends = GameDataManager.AccountData.Friends.Where (friend => !response.Friends.Any (fbFriend => fbFriend.FriendPlayFabId == friend.FriendPlayFabId)).ToList ();
  1297.             facebookFriends = facebookFriends.OrderBy (o => o.Profile.DisplayName).ToList ();
  1298.             Debug.Log ("facebookFriends.Count:" + facebookFriends.Count);
  1299.             _facebookList = listView == null ? _facebookList == null ? View.TabPanels[0].GetComponent<ListView> () : _facebookList : listView;
  1300.             _facebookList.OnContainerRebuild -= OnBuildFacebookFriendList;
  1301.             _facebookList.OnContainerRebuild += OnBuildFacebookFriendList;
  1302.  
  1303.             _facebookFriendList.Clear ();
  1304.  
  1305.             for (int i = 0, ilen = facebookFriends.Count; i < ilen; i++)
  1306.             {
  1307.                 _facebookFriendList.Add (facebookFriends[i]);
  1308.             }
  1309.  
  1310.             _facebookList.ClearContainer ();
  1311.             _facebookList.BulkAddToContainer (View.PlayerListItemPrefab, facebookFriends.Count);
  1312.         }, (error) => Debug.LogError (error.ErrorMessage));
  1313.     }
  1314.  
  1315.     private void OnBuildFacebookFriendList (List<GameObject> objects)
  1316.     {
  1317.         int i = 0;
  1318.  
  1319.         foreach (var item in objects)
  1320.         {
  1321.             var playerItem = item.GetComponent<PlayerListItemView> ();
  1322.             var friend = _facebookFriendList[i];
  1323.             playerItem.transform.position = Vector3.zero;
  1324.             playerItem.transform.localPosition = Vector3.zero;
  1325.             playerItem.transform.localScale = Vector3.one;
  1326.             var profile = playerItem.ProfileInfo.Profile;
  1327.             string value = profile.DisplayName;
  1328.             string suffix = (value.Substring (Mathf.Max (0, value.Length - 5)));
  1329.             int parsedSuffix = 0;
  1330.             if (int.TryParse (suffix, out parsedSuffix))
  1331.             {
  1332.                 if (parsedSuffix > 0)
  1333.                 {
  1334.                     playerItem.PlayerName.text = (value.Substring (0, value.Length - 5));
  1335.                 }
  1336.                 else
  1337.                 {
  1338.                     playerItem.PlayerName.text = (value);
  1339.                 }
  1340.             }
  1341.             else
  1342.             {
  1343.                 playerItem.PlayerName.text = (value);
  1344.             }
  1345.  
  1346.             playerItem.Clear ();
  1347.             //playerItem.PlayerName.text = friend.Profile.DisplayName;
  1348.             playerItem.onPlayerInfoClick += OnProfileClicked;
  1349.             if (friend.Profile.Statistics != null)
  1350.             {
  1351.                 var eloStat = friend.Profile.Statistics.Find (stat => stat.Name == "ELO");
  1352.                 playerItem.PlayerRank.text = "-";
  1353.                 if (eloStat != null)
  1354.                 {
  1355.                     playerItem.PlayerRank.text = eloStat.Value.ToString ();
  1356.                 }
  1357.             }
  1358.  
  1359.             playerItem.OnlinePip.interactable = false;
  1360.             playerItem.OnlineStatus.color = playerItem.Offline;
  1361.             playerItem.OnlineStatus.text = "offline";
  1362.             playerItem.OnlineStatus.gameObject.SetActive (true);
  1363.  
  1364.             _friendMap.Add (friend.FriendPlayFabId, playerItem);
  1365.  
  1366.             FirebaseService.DatabaseReference.Child (string.Format ("Players/{0}/State", friend.FriendPlayFabId)).ValueChanged += FriendInfoChanged;
  1367.  
  1368.             //playerItem.DeleteFriendButton.onClick.AddListener(() => { OnDeletePlayer(playerItem, friend); });//button never visible
  1369.             //playerItem.gameObject.SetActive(false);
  1370.             i++;
  1371.         }
  1372.     }
  1373.  
  1374.     public void ShowRecentList (ListView listView = null)
  1375.     {
  1376.         _recentPlayerList.Clear ();
  1377.         if (_recentList != null)
  1378.         {
  1379.             _recentList.ClearContainer ();
  1380.             _recentList.OnContainerRebuild -= OnBuildRecentList;
  1381.         }
  1382.  
  1383.         _recentList = listView == null ? _recentList == null ? View.TabPanels[1].GetComponent<ListView> () : _recentList : listView;
  1384.         _recentList.OnContainerRebuild -= OnBuildRecentList;
  1385.         _recentList.OnContainerRebuild += OnBuildRecentList;
  1386.         _recentList.ClearContainer ();
  1387.  
  1388.         Dictionary<string, PlayFab.ClientModels.FriendInfo> recentMap = new Dictionary<string, PlayFab.ClientModels.FriendInfo> ();
  1389.  
  1390.         for (int e = 0, i = GameDataManager.AccountData.MatchHistory.Count - 1; i > -1 && e < 10; i--)
  1391.         {
  1392.             var match = GameDataManager.AccountData.MatchHistory[i];
  1393.             for (int j = 0, jlen = match.BlueStats.Count; j < jlen; j++)
  1394.             {
  1395.                 var stat = match.BlueStats[j];
  1396.  
  1397.                 if (string.IsNullOrEmpty (stat.PlayFabId) || stat.PlayFabId == "-1")
  1398.                 {
  1399.                     continue;
  1400.                 }
  1401.  
  1402.                 if (stat.PlayFabId == PlayerAccountData.PlayFabId)
  1403.                 {
  1404.                     continue;
  1405.                 }
  1406.  
  1407.                 if (recentMap.ContainsKey (stat.PlayFabId))
  1408.                 {
  1409.                     continue;
  1410.                 }
  1411.  
  1412.                 PlayFab.ClientModels.FriendInfo friendInfo = new PlayFab.ClientModels.FriendInfo
  1413.                 {
  1414.                     FriendPlayFabId = stat.PlayFabId,
  1415.                     Profile = new PlayerProfileModel
  1416.                     {
  1417.                     DisplayName = stat.DisplayName,
  1418.                     PlayerId = stat.PlayFabId
  1419.                     }
  1420.                 };
  1421.  
  1422.                 e++;
  1423.                 _recentPlayerList.Add (friendInfo);
  1424.                 recentMap.Add (stat.PlayFabId, friendInfo);
  1425.             }
  1426.  
  1427.             for (int j = 0, jlen = match.RedStats.Count; j < jlen; j++)
  1428.             {
  1429.                 var stat = match.RedStats[j];
  1430.  
  1431.                 if (string.IsNullOrEmpty (stat.PlayFabId) || stat.PlayFabId == "-1")
  1432.                 {
  1433.                     continue;
  1434.                 }
  1435.  
  1436.                 if (stat.PlayFabId == PlayerAccountData.PlayFabId)
  1437.                 {
  1438.                     continue;
  1439.                 }
  1440.  
  1441.                 if (recentMap.ContainsKey (stat.PlayFabId))
  1442.                 {
  1443.                     continue;
  1444.                 }
  1445.  
  1446.                 PlayFab.ClientModels.FriendInfo friendInfo = new PlayFab.ClientModels.FriendInfo
  1447.                 {
  1448.                     FriendPlayFabId = stat.PlayFabId,
  1449.                     Profile = new PlayerProfileModel
  1450.                     {
  1451.                     DisplayName = stat.DisplayName,
  1452.                     PlayerId = stat.PlayFabId
  1453.                     }
  1454.                 };
  1455.  
  1456.                 e++;
  1457.                 _recentPlayerList.Add (friendInfo);
  1458.                 recentMap.Add (stat.PlayFabId, friendInfo);
  1459.             }
  1460.         }
  1461.  
  1462.         _recentList.BulkAddToContainer (View.PlayerListItemPrefab, _recentPlayerList.Count);
  1463.     }
  1464.  
  1465. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement