123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Xml;
- using Sfs2X.Util;
- using UnityEngine;
- using UnityEngine.UI;
- public class FriendPanel : Regist
- {
- #region Config
- public static Text NicknameTitle;
- public static Text ContentTitle;
- public static Text CloseButtonTitle;
- public static Text ApplicantTitle;
- public static Text PanelTitle;
- public static Text AcceptAllButtonTitle;
- public static Text AddFriendTitle;
- public static Text FriendAmountText;
- public static Image NewApplicantFlagImage;
- public static Button OpenPanelButton;
- public static Button AcceptAllButton;
- public static Button AddFriendButton;
- public static Button CloseButton;
- public static Toggle ApplicantButton;
- public static Transform OpenPanelButtonParent;
- public static Transform FriendGrid;
- public static Transform ApplicantGrid;
- public static Transform FriendPanelParentMask;
- public static Transform FriendPanelMask;
- public static CanvasGroup PanelParentCanvasGroup;
- public static VirtualScrollRectPlus FriendScrollRect;
- public static VirtualScrollRectPlus ApplicantScrollRect;
- private static float RefreshApplicantTime = 15f;
- private static float RefreshApplicantTimer = RefreshApplicantTime;
- private static List<ApplicantItem> ApplicantItems = new List<ApplicantItem>();
- public static List<AccountData> ApplicantAccountDatas = new List<AccountData>();
- public static int MaxFriend
- {
- get { return maxFriend; }
- set
- {
- maxFriend = value;
- UpdateFriendAmountText();
- }
- }
- public static int maxFriend = 25;
- private static float RefreshFriendTime = 15f;
- private static float RefreshFriendTimer;
- public static List<FriendItem> FriendItems = new List<FriendItem>();
- public static List<AccountData> FriendAccountDatas = new List<AccountData>();
- private static float RefreshPrivateMessageTime = 15f;
- private static float RefreshPrivateMessageTimer;
- public static bool HaveNewApplicant;
- public static bool HaveNewPrivateMessage
- {
- get
- {
- foreach (var friendItem in FriendItems)
- {
- if (HaveNewMessage(friendItem.AccountData.SerialNumber))
- {
- return true;
- }
- }
- return false;
- }
- }
- public static TweenOutline OpenPanelButtonOutlineTween;
- public static int ActivateLevel = TutorialManager.VisitTutorialLevel;
- public static Action<List<AccountData>> OnFriendListRefresh;
- #endregion
- public override void ThirdInit()
- {
- RefreshFriendList();
- }
- public override void RegistReference()
- {
- NicknameTitle = ResourceManager.Get<Text>(ObjectLabel.AF_NicknameTitle);
- ContentTitle = ResourceManager.Get<Text>(ObjectLabel.AF_ContentTitle);
- CloseButtonTitle = ResourceManager.Get<Text>(ObjectLabel.AF_CloseButtonTitle);
- ApplicantTitle = ResourceManager.Get<Text>(ObjectLabel.AF_ApplicantTitle);
- PanelTitle = ResourceManager.Get<Text>(ObjectLabel.AF_PanelTitle);
- AcceptAllButtonTitle = ResourceManager.Get<Text>(ObjectLabel.AF_AcceptAllButtonTitle);
- AddFriendTitle = ResourceManager.Get<Text>(ObjectLabel.AF_AddFriendTitle);
- FriendAmountText = ResourceManager.Get<Text>(ObjectLabel.AF_FriendAmountText);
- NewApplicantFlagImage = ResourceManager.Get<Image>(ObjectLabel.AF_NewApplicantFlagImage);
- AcceptAllButton = ResourceManager.Get<Button>(ObjectLabel.AF_AcceptAllButton);
- AddFriendButton = ResourceManager.Get<Button>(ObjectLabel.AF_AddFriendButton);
- CloseButton = ResourceManager.Get<Button>(ObjectLabel.AF_CloseButton);
- ApplicantButton = ResourceManager.Get<Toggle>(ObjectLabel.AF_ApplicantButton);
- OpenPanelButton = ResourceManager.Get<Button>(ObjectLabel.C_FriendButton);
- OpenPanelButtonParent = ResourceManager.Get(ObjectLabel.C_FriendButtonParent);
- FriendGrid = ResourceManager.Get(ObjectLabel.AF_FriendGrid);
- ApplicantGrid = ResourceManager.Get(ObjectLabel.AF_ApplicantGrid);
- FriendPanelParentMask = ResourceManager.Get(ObjectLabel.AF_FriendPanelParent);
- FriendPanelMask = ResourceManager.Get(ObjectLabel.AF_FriendPanelMask);
- PanelParentCanvasGroup = ResourceManager.Get<CanvasGroup>(ObjectLabel.AF_FriendPanelParent);
- FriendScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(ObjectLabel.AF_FriendScrollRect);
- ApplicantScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(ObjectLabel.AF_ApplicantScrollRect);
- LanguageManager.Add(NicknameTitle, new MulLanStr(LanguageLabel.UI__AF_NicknameTitle));
- LanguageManager.Add(ContentTitle, new MulLanStr(LanguageLabel.UI__AF_ContentTitle));
- LanguageManager.Add(CloseButtonTitle, new MulLanStr(LanguageLabel.UI__AF_CloseButtonTitle));
- LanguageManager.Add(ApplicantTitle, new MulLanStr(LanguageLabel.UI__AF_ApplicantTitle));
- LanguageManager.Add(PanelTitle, new MulLanStr(LanguageLabel.UI__AF_PanelTitle));
- LanguageManager.Add(AcceptAllButtonTitle, new MulLanStr(LanguageLabel.UI__AF_AcceptAllButtonTitle));
- LanguageManager.Add(AddFriendTitle, new MulLanStr(LanguageLabel.UI__AF_AddFriendTitle));
- OpenPanelButton.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
- FriendPanelParentMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
- FriendPanelMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
- OpenPanelButtonOutlineTween = OpenPanelButton.CreateTweenOutline(0, 201/255f, 1f, true, true, Curve.EaseOutQuad);
- OpenPanelButtonOutlineTween.PingPong = true;
- OpenPanelButtonOutlineTween.IgnoreActiveControll = true;
- OpenPanelButton.onClick.AddListener(OpenRootFriendPanel);
- CloseButton.onClick.AddListener(CloseRootFriendPanel);
- ApplicantButton.onValueChanged.AddListener(OnApplicantToggleClick);
- AddFriendButton.onClick.AddListener(OnAddFriendButtonClick);
- AcceptAllButton.onClick.AddListener(OnAcceptAllButtonClick);
- Manager.OnLevelChange += level =>
- {
- if (level >= ActivateLevel)
- {
- OpenPanelButton.TweenForCG();
- OpenPanelButtonParent.SetActive(true);
- }
- };
- MessagePanel.OnHaveNewMessage += SortFriendItems;
- VisitManager.OnEnterVisteeGarden += OnEnterVisiteeGarden;
- VisitManager.OnExitVisteeGarden += OnExitVisiteeGarden;
- HttpManager.OnConnect += OnConnect;
- }
- private void Update()
- {
- RefreshApplicantTimer += Time.deltaTime;
- if (RefreshApplicantTimer >= RefreshApplicantTime)
- {
- RefreshApplicantTimer = 0;
- RefreshApplicant();
- }
- RefreshFriendTimer += Time.deltaTime;
- if (RefreshFriendTimer >= RefreshFriendTime)
- {
- RefreshFriendTimer = 0;
- RefreshFriendList();
- }
- RefreshPrivateMessageTimer += Time.deltaTime;
- if (RefreshPrivateMessageTimer >= RefreshPrivateMessageTime)
- {
- RefreshPrivateMessageTimer = 0;
- //RefreshPrivateMessage();
- }
- }
- public static void PlayFriendButtonOutline()
- {
- if (!OpenPanelButtonOutlineTween.IsPlaying)
- {
- OpenPanelButtonOutlineTween.PingPong = true;
- OpenPanelButtonOutlineTween.StartForward();
- }
- }
- public static void StopFriendButtonOutline()
- {
- if (OpenPanelButtonOutlineTween.IsPlaying)
- {
- OpenPanelButtonOutlineTween.PingPong = false;
- OpenPanelButtonOutlineTween.StartBackward();
- }
- }
- public static void UpdateFriendButtonOutlineStatus()
- {
- if (HaveNewApplicant || HaveNewPrivateMessage)
- {
- PlayFriendButtonOutline();
- }
- else if (!HaveNewApplicant && !HaveNewPrivateMessage)
- {
- StopFriendButtonOutline();
- }
- }
- public static void AddFriendItem(AccountData accountData)
- {
- FriendItem item = ResourceManager.Get(FriendItemLabel.FriendItem, Folder.UI, false, ApplicantScrollRect.content, false, ObjType.FriendItem, typeof(FriendItem)).GetComponent<FriendItem>();
- item.Init();
- item.Reset(accountData);
- item.SetParent(FriendScrollRect.content);
- FriendItems.Add(item);
- FriendAccountDatas.Add(accountData);
- UpdateFriendAmountText();
- }
- public static void SaveFriendItem(FriendItem item)
- {
- ResourceManager.Save(item);
- FriendItems.Remove(item);
- FriendAccountDatas.Remove(item.AccountData);
- UpdateFriendAmountText();
- }
- public static void UpdateFriendAmountText()
- {
- FriendAmountText.text = $"{FriendItems.Count}/{maxFriend}";
- }
- public static void RefreshFriendList()
- {
- HttpManager.GetBuddyList(RefreshFriendListCallback, () => {});
- }
- private static void RefreshFriendListCallback(List<AccountData> accountDatas)
- {
- for (int i = 0; i < FriendItems.Count; i++)
- {
- SaveFriendItem(FriendItems[i--]);
- }
- foreach (var accountData in accountDatas)
- {
- AddFriendItem(accountData);
- }
- FriendAccountDatas = accountDatas;
- if (OnFriendListRefresh != null)
- {
- OnFriendListRefresh.Invoke(accountDatas);
- }
- SortFriendItems(null);
- RefreshPrivateMessage();
- }
- public static void SortFriendItems(string targetSerialNumber)
- {
- FriendItem friendItem = null;
- List<FriendItem> haveNewPrivateMessageItems = new List<FriendItem>();
- List<FriendItem> dontHaveNewPrivateMessageItems = new List<FriendItem>();
- foreach (var item in FriendItems)
- {
- if (item.AccountData.SerialNumber == targetSerialNumber)
- {
- friendItem = item;
- }
- else if (HaveNewMessage(item.AccountData.SerialNumber))
- {
- haveNewPrivateMessageItems.Add(item);
- }
- else
- {
- dontHaveNewPrivateMessageItems.Add(item);
- }
- }
- haveNewPrivateMessageItems.MySort((item0, item1) => item0.AccountData.LastLoginDate.Ticks < item1.AccountData.LastLoginDate.Ticks);
- dontHaveNewPrivateMessageItems.MySort((item0, item1) => item0.AccountData.LastLoginDate.Ticks < item1.AccountData.LastLoginDate.Ticks);
- List<FriendItem> friendItems = new List<FriendItem>();
- friendItems.AddRange(haveNewPrivateMessageItems);
- friendItems.AddRange(dontHaveNewPrivateMessageItems);
- for (int i = 0; i < friendItems.Count; i++)
- {
- friendItems[i].transform.SetSiblingIndex(i);
- }
- if (friendItem != null)
- {
- friendItem.transform.SetAsFirstSibling();
- }
- }
- public static void AddApplicantItem(AccountData accountData)
- {
- ApplicantItem item = ResourceManager.Get(ApplicantItemLabel.ApplicantItem, Folder.UI, false, ApplicantScrollRect.content, false, ObjType.ApplicantItem, typeof(ApplicantItem)).GetComponent<ApplicantItem>();
- item.Init();
- item.Reset(accountData);
- ApplicantItems.Add(item);
- ApplicantAccountDatas.Add(accountData);
- }
- public static void SaveApplicantItem(ApplicantItem item)
- {
- ResourceManager.Save(item);
- ApplicantItems.Remove(item);
- ApplicantAccountDatas.Remove(item.AccountData);
- if (ApplicantItems.Count == 0)
- {
- OnDontHaveApplicant();
- }
- SaveLastApplicantSerialNumber();
- SetNewApplicantStatus();
- }
- private static void RefreshApplicant()
- {
- HttpManager.GetApplicantList(RefreshApplicantCallback, () => { });
- }
- private static void RefreshApplicantCallback(List<AccountData> accountDatas)
- {
- for (int i = 0; i < ApplicantItems.Count; i++)
- {
- SaveApplicantItem(ApplicantItems[i--]);
- }
- for (int i = 0; i < accountDatas.Count; i++)
- {
- AddApplicantItem(accountDatas[i]);
- }
- ApplicantAccountDatas = accountDatas;
- if (ApplicantItems.Count > 0)
- {
- OnHaveApplicant();
- }
- else
- {
- OnDontHaveApplicant();
- }
- SetNewApplicantStatus();
- }
- private static void OnHaveApplicant()
- {
- AcceptAllButton.image.material = null;
- AcceptAllButton.interactable = true;
- }
- private static void OnDontHaveApplicant()
- {
- AcceptAllButton.image.material = Lib.GrayMat;
- AcceptAllButton.interactable = false;
- }
- private static void SetNewApplicantStatus()
- {
- string lastApplicantSerialNumber = ConfigManager.GetStringFormConfig(PlayerConfigLabel.LastApplicantSerialNumber);
- if (ApplicantItems.Count == 0 || ApplicantItems.Back(0).AccountData.SerialNumber == lastApplicantSerialNumber)
- {
- NewApplicantFlagImage.SetActive(false);
- HaveNewApplicant = false;
- }
- else
- {
- NewApplicantFlagImage.SetActive(true);
- HaveNewApplicant = true;
- }
- UpdateFriendButtonOutlineStatus();
- }
- private static void SaveLastApplicantSerialNumber()
- {
- if (ApplicantItems.Count > 0)
- {
- ConfigManager.SaveStringToConfig(PlayerConfigLabel.LastApplicantSerialNumber, ApplicantItems.Back(0).AccountData.SerialNumber);
- }
- }
- private static void RefreshPrivateMessage()
- {
- foreach (var friendAccountData in FriendAccountDatas)
- {
- HttpManager.GetPrivateMessage(friendAccountData.SerialNumber, "0", MessagePanel.RefreshPrivateMessageSucceedCallback, MessagePanel.RefreshPrivateMessageFailedCallback);
- }
- }
- public static void OpenRootFriendPanel()
- {
- AudioManager.PlayClip(ResourceLabel.BtnClip);
- FriendPanelParentMask.TweenForCG();
- }
- public static void CloseRootFriendPanel()
- {
- AudioManager.PlayClip(ResourceLabel.CloseClip);
- FriendPanelParentMask.TweenBacCG();
- }
- public static void OpenFriendPanel()
- {
- AudioManager.PlayClip(ResourceLabel.BtnClip);
- FriendPanelMask.TweenForCG();
- }
- public static void CloseFriendPanel()
- {
- AudioManager.PlayClip(ResourceLabel.CloseClip);
- FriendPanelMask.TweenBacCG();
- }
- private static void OnApplicantToggleClick(bool value)
- {
- AudioManager.PlayClip(ResourceLabel.BtnClip);
- if (value)
- {
- SaveLastApplicantSerialNumber();
- SetNewApplicantStatus();
- SaveLastApplicantSerialNumber();
- AcceptAllButton.SetActive(true);
- AddFriendButton.SetActive(false);
- ApplicantScrollRect.SetActive(true);
- FriendScrollRect.SetActive(false);
- }
- else
- {
- AcceptAllButton.SetActive(false);
- AddFriendButton.SetActive(true);
- ApplicantScrollRect.SetActive(false);
- FriendScrollRect.SetActive(true);
- }
- }
- private static void OnAddFriendButtonClick()
- {
- AudioManager.PlayClip(ResourceLabel.BtnClip);
- AddFriendPanel.OpenPanel();
- }
- private static void OnAcceptAllButtonClick()
- {
- AudioManager.PlayClip(ResourceLabel.BtnClip);
- foreach (var applicantItem in ApplicantItems)
- {
- applicantItem.OnAcceptButtonClick();
- }
- }
- public static bool IsFriendFull(bool showBubble)
- {
- if (FriendItems.Count >= MaxFriend)
- {
- if (showBubble)
- {
- Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__FriendFullSelf));
- }
- return true;
- }
- else
- {
- return false;
- }
- }
- public static bool IsPrivateMessageNew(string targetSerialNumber, DateTime dateTime)
- {
- XmlNodeList nodes = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate).SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
- for (int i = 0; i < nodes.Count; i++)
- {
- string[] strings = nodes[i].Attributes[0].Value.Split('|');
- string serialNumber = strings[0];
- DateTime lastDateTime = DateTime.Parse(strings[1]);
- //Debug.Log(dateTime + " " + lastDateTime);
- //Debug.Log(targetSerialNumber == serialNumber && dateTime == lastDateTime);
- if (targetSerialNumber == serialNumber && dateTime == lastDateTime)
- {
- return false;
- }
- }
- return true;
- }
- public static bool HaveNewMessage(string targetSerialNumber)
- {
- if (MessagePanel.PrivateMessageDataDictionary.ContainsKey(targetSerialNumber))
- {
- PrivateMessageDataStash dataStash = MessagePanel.PrivateMessageDataDictionary[targetSerialNumber];
- if (dataStash.PrivateMessageDatas.Count > 0)
- {
- return IsPrivateMessageNew(targetSerialNumber, dataStash.PrivateMessageDatas[0].Date);
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- public static void SaveLastPrivateMessageDate(string targetSerialNumber, DateTime dateTime)
- {
- XmlNode parentNode = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate);
- XmlNodeList nodes = parentNode.SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
- for (int i = 0; i < nodes.Count; i++)
- {
- string[] strings = nodes[i].Attributes[0].Value.Split('|');
- string serialNumber = strings[0];
- if (targetSerialNumber == serialNumber)
- {
- nodes[i].Attributes[0].Value = $"{targetSerialNumber}|{dateTime}";
- //ConfigManager.SaveConfigDocument();
- return;
- }
- }
-
- XmlNode node = ConfigManager.ConfigDocument.CreateNode(XmlNodeType.Element, PlayerConfigLabel.LastPrivateMessageDate, null);
- XmlAttribute attribute = node.Attributes.Append(ConfigManager.ConfigDocument.CreateAttribute(PlayerConfigLabel.AttributeName));
- attribute.Value = $"{targetSerialNumber}|{dateTime}";
- parentNode.AppendChild(node);
- //ConfigManager.SaveConfigDocument();
- }
- public static void DeleteLastPrivateMessageDate(string targetSerialNumber)
- {
- XmlNode parentNode = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate);
- XmlNodeList nodes = parentNode.SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
- for (int i = 0; i < nodes.Count; i++)
- {
- string[] strings = nodes[i].Attributes[0].Value.Split('|');
- string serialNumber = strings[0];
- if (targetSerialNumber == serialNumber)
- {
- parentNode.RemoveChild(nodes[i]);
- return;
- }
- }
- }
- public static void OnConnect()
- {
- MaxFriend = HttpManager.MaxFriend;
- }
- public static void OnEnterVisiteeGarden()
- {
- OpenPanelButtonParent.SetActive(false);
- }
- public static void OnExitVisiteeGarden()
- {
- OpenPanelButtonParent.SetActive(true);
- }
- }
|