using System.Collections.Generic; using ET; using FairyGUI; using UI.Poem; using UnityEngine; namespace GFGGame { class TabType { /// /// 首页 /// public static int RECOVER = 0; /// /// 投稿 /// public static int JOIN = 1; /// /// 收藏 /// public static int FAVORITES = 2; } class RecommendType { /// /// 推荐 /// public static int RECOMMEND = 0; /// /// 好友 /// public static int FRIEND = 1; /// /// 排行榜 /// public static int RANK = 2; } class FavoritesType { /// /// 我的收藏 /// public static int FAVORITE = 0; /// /// 我的作品 /// public static int MY_SELF = 1; } public class PoemGalleryView : BaseWindow { private UI_PoemGalleryUI _ui; private GList _list; private GList _list1; private GComponent _comScroll; // private List _galleryDatas = new List(); private List _galleryDatas = new List(); private int _sortType = 0;//由GallerySortType定义 private int _pageCount = 10; private int _tabIndex = 0;//当前选中大页签下标,首页0投稿1收藏2 private int _subtabIndex = 0;//当前选中小页签下标,推荐0好友1排行榜2;我的收藏0我的作品1 private bool isPullDown = false;//是否下拉刷新中,刷新中再次下拉不会重新请求更新数据 private bool isPullUp = false;//是否上拉刷新中,刷新中再次下拉不会重新请求更新数据 public override void Dispose() { if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_PoemGalleryUI.PACKAGE_NAME; _ui = UI_PoemGalleryUI.Create(); this.viewCom = _ui.target; isfullScreen = true; _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("hc_bj_1"); _ui.m_comNormal.m_comBoBox.items = new string[] { "推荐", "最新" }; _ui.m_comNormal.m_comBoBox.icons = new string[] { "ui://Poem/hl_pxpx", "ui://Poem/hl_zxzx" }; _ui.m_comNormal.m_comBoBox.onChanged.Add(OnNormalTabChange); _ui.m_btnback.onClick.Add(OnBtnBackClick); _ui.m_btnRecover.onClick.Add(OnBtnRecoverClick); _ui.m_btnJoin.onClick.Add(OnBtnJoinClick); _ui.m_btnFavorites.onClick.Add(OnBtnFavoritesClick); _ui.m_comNormal.m_comScroll.target.scrollPane.onPullDownRelease.Add(onPullDownRelease); _ui.m_comNormal.m_comScroll.target.scrollPane.onPullUpRelease.Add(OnPullUpToRefresh); _ui.m_comNormal.m_comScroll.target.scrollPane.onScrollEnd.Add(onScrollEnd); _ui.m_comFavorites.m_comScroll.target.scrollPane.onPullDownRelease.Add(onPullDownRelease); _ui.m_comFavorites.m_comScroll.target.scrollPane.onPullUpRelease.Add(OnPullUpToRefresh); _ui.m_comFavorites.m_comScroll.target.scrollPane.onScrollEnd.Add(onScrollEnd); _ui.m_comNormal.m_comScroll.m_listRecommend.itemRenderer = RenderListItem; _ui.m_comNormal.m_comScroll.m_listRecommend1.itemRenderer = RenderListItem1; _ui.m_comFavorites.m_comScroll.m_listRecommend.itemRenderer = RenderListItem; _ui.m_comFavorites.m_comScroll.m_listRecommend1.itemRenderer = RenderListItem1; _ui.m_comNormal.m_listRank.itemRenderer = RenderListRankItem; _ui.m_comNormal.m_listRank.SetVirtual(); _ui.m_comNormal.m_btnShop.onClick.Add(OnBtnShopClick); _ui.m_comNormal.m_btnReward.onClick.Add(OnBtnRewardClick); _ui.m_comNormal.m_c1.onChanged.Add(OnNormalTabChange); _ui.m_comFavorites.m_c1.onChanged.Add(OnFavoritesTabChange); } protected override void AddEventListener() { base.AddEventListener(); // EventAgent.AddEventListener(ConstMessage.GALLERY_DATA_CHANGE, UpdateGalleryList); // EventAgent.AddEventListener(ConstMessage.GALLERY_RANK_DATA_CHANGE, UpdateGalleryRankList); } protected override async void OnShown() { base.OnShown(); if (this.viewData != null) { _tabIndex = (int)(this.viewData as object[])[0]; _subtabIndex = (int)(this.viewData as object[])[1]; _ui.m_comNormal.m_comBoBox.selectedIndex = (int)(this.viewData as object[])[2]; if (_tabIndex == TabType.RECOVER) { _ui.m_comNormal.m_c1.selectedIndex = _subtabIndex; } else if (_tabIndex == TabType.FAVORITES) { _ui.m_comFavorites.m_c1.selectedIndex = _subtabIndex; } UpdateGalleryList(); } else { _tabIndex = TabType.RECOVER; _subtabIndex = RecommendType.RECOMMEND; _ui.m_comNormal.m_comBoBox.selectedIndex = 0; _ui.m_comNormal.m_c1.selectedIndex = _subtabIndex; _ui.m_comFavorites.m_c1.selectedIndex = _subtabIndex; _comScroll = _ui.m_comNormal.m_comScroll.target; if (_ui.m_comNormal.m_comScroll.m_listRecommend.numItems > 0) _ui.m_comNormal.m_comScroll.m_listRecommend.ScrollToView(0); if (_ui.m_comNormal.m_comScroll.m_listRecommend1.numItems > 0) _ui.m_comNormal.m_comScroll.m_listRecommend1.ScrollToView(0); if (_ui.m_comFavorites.m_comScroll.m_listRecommend.numItems > 0) _ui.m_comFavorites.m_comScroll.m_listRecommend.ScrollToView(0); if (_ui.m_comFavorites.m_comScroll.m_listRecommend1.numItems > 0) _ui.m_comFavorites.m_comScroll.m_listRecommend1.ScrollToView(0); _ui.m_comNormal.m_comScroll.m_listRecommend.numItems = 0; _ui.m_comNormal.m_comScroll.m_listRecommend1.numItems = 0; _ui.m_comFavorites.m_comScroll.m_listRecommend.numItems = 0; _ui.m_comFavorites.m_comScroll.m_listRecommend1.numItems = 0; OnFavoritesTabChange(); OnNormalTabChange(); } _ui.m_c1.selectedIndex = _tabIndex; UpdateView(); if (PoemGalleryDataManager.Instance.HasBonus) { bool result = await PoemGallerySProxy.ReqGetGalleryRankBonus(); if (result && PoemGalleryDataManager.Instance.MyWorksRanks.Count > 0) { ViewManager.Show(); } } } protected override void OnHide() { base.OnHide(); ResetPullRelease(); _ui.m_comNormal.m_comBoBox.selectedIndex = 0; } protected override void RemoveEventListener() { base.RemoveEventListener(); // EventAgent.RemoveEventListener(ConstMessage.GALLERY_DATA_CHANGE, UpdateGalleryList); // EventAgent.RemoveEventListener(ConstMessage.GALLERY_RANK_DATA_CHANGE, UpdateGalleryRankList); } private void OnBtnBackClick() { ViewManager.GoBackFrom(typeof(PoemGalleryView).FullName); } /// /// 积分商店 /// private void OnBtnShopClick() { object[] gobackParamDatas = new object[] { _tabIndex, _subtabIndex, _ui.m_comNormal.m_comBoBox.selectedIndex }; ViewManager.Show(new object[] { ConstStoreId.GALLERY_STORE_ID }, new object[] { typeof(PoemGalleryView).FullName, gobackParamDatas }, true); } /// /// 排行榜奖励 /// private void OnBtnRewardClick() { ViewManager.Show(null, new object[] { typeof(PoemGalleryView).FullName, this.viewData }); } /********************************************************页签切换*************************************************/ /// /// 首页 /// private void OnBtnRecoverClick() { if (_tabIndex == TabType.RECOVER)//当前在推荐页要刷新 { if (_ui.m_comNormal.m_c1.selectedIndex == RecommendType.RECOMMEND)//重新拉取数据 { PullDown(); onPullDownRelease(); } else//切页签并重新拉取数据 { _ui.m_comNormal.m_c1.selectedIndex = RecommendType.RECOMMEND; } } else//更新列表 { _ui.m_comNormal.m_c1.selectedIndex = RecommendType.RECOMMEND; UpdateList(); UpdateGalleryList(); } _tabIndex = _ui.m_c1.selectedIndex; _subtabIndex = _ui.m_comNormal.m_c1.selectedIndex; _comScroll = _ui.m_comNormal.m_comScroll.target; } /// /// 投稿 /// private void OnBtnJoinClick() { object[] gobackParamDatas = new object[] { _tabIndex, _subtabIndex, _ui.m_comNormal.m_comBoBox.selectedIndex }; ViewManager.Show(1, new object[] { typeof(PoemGalleryView).FullName, gobackParamDatas }, true); } /// ///收藏夹 /// private void OnBtnFavoritesClick() { if (_tabIndex == TabType.FAVORITES) return; ResetPullRelease(); _tabIndex = _ui.m_c1.selectedIndex; _comScroll = _ui.m_comFavorites.m_comScroll.target; _ui.m_comFavorites.m_c1.selectedIndex = FavoritesType.FAVORITE; _subtabIndex = _ui.m_comFavorites.m_c1.selectedIndex; OnFavoritesTabChange(); } /// /// 切换首页页签 /// private void OnNormalTabChange() { ResetPullRelease(); _ui.m_comNormal.m_comScroll.target.scrollPane.header.visible = false; _subtabIndex = _ui.m_comNormal.m_c1.selectedIndex; if (_ui.m_comNormal.m_c1.selectedIndex == RecommendType.RANK)//排行榜 { _galleryDatas = PoemGalleryDataManager.Instance.RankDatas; ReqGalleryRankList(); } else { UpdateList(); if (_list.numItems > 0) _list.ScrollToView(0); if (_list1.numItems > 0) _list.ScrollToView(0); _list.numItems = 0; _list1.numItems = 0; ReqGalleryList(0); } } private void UpdateList() { if (_ui.m_comNormal.m_c1.selectedIndex == RecommendType.RECOMMEND)//首页 { _ui.m_comNormal.m_comScroll.target.scrollPane.header.visible = true; if (_ui.m_comNormal.m_comBoBox.selectedIndex == 0)//推荐 { _sortType = (int)GallerySortType.Recommend; _galleryDatas = PoemGalleryDataManager.Instance.RecommendDatas; } else//最新 { _sortType = (int)GallerySortType.Newest; _galleryDatas = PoemGalleryDataManager.Instance.NewestDatas; } } else if (_ui.m_comNormal.m_c1.selectedIndex == RecommendType.FRIEND)//好友 { _sortType = (int)GallerySortType.Friend; _galleryDatas = PoemGalleryDataManager.Instance.FrinedDatas; } _list = _ui.m_comNormal.m_comScroll.m_listRecommend; _list1 = _ui.m_comNormal.m_comScroll.m_listRecommend1; } /// /// 切换收藏页签 /// private void OnFavoritesTabChange() { _ui.m_comFavorites.m_comScroll.target.scrollPane.header.visible = false; _subtabIndex = _ui.m_comFavorites.m_c1.selectedIndex; if (_ui.m_comFavorites.m_c1.selectedIndex == FavoritesType.FAVORITE)//我的收藏 { _sortType = (int)GallerySortType.MyCollect; _galleryDatas = PoemGalleryDataManager.Instance.FavoriteDatas; } else if (_ui.m_comFavorites.m_c1.selectedIndex == FavoritesType.MY_SELF)//我的作品 { _sortType = (int)GallerySortType.MyWorks; _galleryDatas = PoemGalleryDataManager.Instance.MySelfDatas; } _list = _ui.m_comFavorites.m_comScroll.m_listRecommend; _list1 = _ui.m_comFavorites.m_comScroll.m_listRecommend1; if (_list.numItems > 0) _list.ScrollToView(0); if (_list1.numItems > 0) _list.ScrollToView(0); ReqGalleryList(0); } /********************************************************请求更新列表*************************************************/ private void onScrollEnd() { if (_comScroll.scrollPane.percY == 1) { ReqGalleryList(_galleryDatas.Count + 1); } } //请求刷新 private async void ReqGalleryList(int startIndex) { bool result = await PoemGallerySProxy.ReqGalleryList(_sortType, startIndex, _pageCount); if (result) { Timers.inst.StartCoroutine(PictureStorageHelper.Download(_galleryDatas, startIndex, UpdateGalleryList)); } } private void UpdateGalleryList() { if (_tabIndex == TabType.RECOVER && _subtabIndex == RecommendType.RANK) { _ui.m_comNormal.m_listRank.numItems = _galleryDatas.Count; } else { if (_galleryDatas.Count % 2 == 0) { _list.numItems = _galleryDatas.Count / 2; _list1.numItems = _galleryDatas.Count / 2; } else { _list.numItems = (_galleryDatas.Count + 1) / 2; _list1.numItems = (_galleryDatas.Count - 1) / 2; } _list.ResizeToFit(); _list1.ResizeToFit(); } UpdateView(); ResetPullRelease(); } //请求排行榜刷新 private async void ReqGalleryRankList() { bool result = await PoemGallerySProxy.ReqRankList(); if (result) { Timers.inst.StartCoroutine(PictureStorageHelper.Download(_galleryDatas, 0, UpdateGalleryRankList)); } } private void UpdateGalleryRankList() { _ui.m_comNormal.m_listRank.numItems = _galleryDatas.Count; UpdateView(); } /********************************************************界面更新*************************************************/ private void UpdateView() { GalleryThemeCfg themeCfg = GalleryThemeCfgArray.Instance.GetCfg((int)PoemGalleryDataManager.Instance.ThemeId); _ui.m_comNormal.m_txtTheme.text = string.Format("本期主题:{0}", themeCfg.theme); _ui.m_comNormal.m_txtRank.text = string.Format("我的排名: {0}", PoemGalleryDataManager.Instance.MyRank > 0 ? PoemGalleryDataManager.Instance.MyRank.ToString() : "- -"); _ui.m_comNormal.m_txtRewardCount.text = string.Format("奖励次数:{0}/{1}", GameGlobal.myNumericComponent.GetAsInt(NumericType.LikeGalleryWorksCountDaily), GalleryRewardCfgArray.Instance.dataArray.Length); _ui.m_comNormal.m_txtTime.text = string.Format("截止日期:{0}", PoemGalleryDataManager.Instance.GetThemeTime()); _ui.m_comNormal.m_grpResult.visible = PoemGalleryDataManager.Instance.IsResulting(); } private void RenderListItem(int index, GObject obj) { long workId = _galleryDatas[index * 2]; UpdateListItem(workId, obj); } private void RenderListItem1(int index, GObject obj) { long workId = _galleryDatas[index * 2 + 1]; UpdateListItem(workId, obj); } private void UpdateListItem(long workId, GObject obj) { PoemGalleryData data = PoemGalleryDataManager.Instance.GetGalleryDataById(workId); UI_ListItem item = UI_ListItem.Proxy(obj); item.m_loaIcon.texture = data.Ntexture; item.m_loaIcon.height = item.m_loaIcon.width * item.m_loaIcon.texture.height / item.m_loaIcon.texture.width; item.m_txtName.text = data.AuthorName; item.m_btnCollect.title = data.CollectCount.ToString(); item.m_btnCollect.selected = data.CollectOrNot; item.m_btnVote.title = data.VoteCount.ToString(); item.m_btnVote.selected = data.VoteOrNot; if (item.m_loaIcon.data == null) { item.m_loaIcon.onClick.Add(OnLoaIconClick); } item.m_loaIcon.data = workId; if (item.m_btnCollect.data == null) { item.m_btnCollect.onClick.Add(OnBtnCollectClick); } item.m_btnCollect.data = workId; if (item.m_btnVote.data == null) { item.m_btnVote.onClick.Add(OnBtnVoteClick); } item.m_btnVote.data = workId; UI_ListItem.ProxyEnd(); } private void RenderListRankItem(int index, GObject obj) { long workId = _galleryDatas[index]; PoemGalleryData data = PoemGalleryDataManager.Instance.GetGalleryDataById(workId); UI_ListRankItem item = UI_ListRankItem.Proxy(obj); item.m_loaIcon.texture = data.Ntexture; item.m_loaIcon.height = item.m_loaIcon.width * item.m_loaIcon.texture.height / item.m_loaIcon.texture.width; item.m_txtName.text = data.AuthorName; item.m_btnCollect.title = data.CollectCount.ToString(); item.m_btnCollect.selected = data.CollectOrNot; item.m_btnVote.title = data.VoteCount.ToString(); item.m_btnVote.selected = data.VoteOrNot; item.m_txtRank.text = data.Rank.ToString(); item.m_c1.selectedIndex = index < 3 ? index : 3; if (item.m_loaIcon.data == null) { item.m_loaIcon.onClick.Add(OnLoaIconClick); } item.m_loaIcon.data = workId; if (item.m_btnCollect.data == null) { item.m_btnCollect.onClick.Add(OnBtnCollectClick); } item.m_btnCollect.data = workId; if (item.m_btnVote.data == null) { item.m_btnVote.onClick.Add(OnBtnVoteClick); } item.m_btnVote.data = workId; UI_ListRankItem.ProxyEnd(); } private void OnLoaIconClick(EventContext context) { GObject obj = context.sender as GObject; long workId = (long)obj.data; object[] gobackParamDatas = new object[] { _tabIndex, _subtabIndex, _ui.m_comNormal.m_comBoBox.selectedIndex }; ViewManager.Show(new object[] { _sortType, workId }, new object[] { typeof(PoemGalleryView).FullName, gobackParamDatas }); } private async void OnBtnCollectClick(EventContext context) { GObject obj = context.sender as GObject; long workId = (long)obj.data; PoemGalleryData galleryData = PoemGalleryDataManager.Instance.GetGalleryDataById(workId); if (galleryData.CollectOrNot) { bool result = await PoemGallerySProxy.ReqCancelCollecteGalleryWorks(workId); if (result) { if (_tabIndex == TabType.FAVORITES && _subtabIndex == FavoritesType.FAVORITE) { ReqGalleryList(0);//当前为收藏页要重新拉取数据 } else { UpdateGalleryList(); } } } else { bool result = await PoemGallerySProxy.ReqCollecteGalleryWorks(workId); if (result) { if (_tabIndex == TabType.FAVORITES && _subtabIndex == FavoritesType.FAVORITE) { ReqGalleryList(0);//当前为收藏页要重新拉取数据 } else { UpdateGalleryList(); } } } } private async void OnBtnVoteClick(EventContext context) { GObject obj = context.sender as GObject; long workId = (long)obj.data; PoemGalleryData galleryData = PoemGalleryDataManager.Instance.GetGalleryDataById(workId); if (galleryData.VoteOrNot) return; bool result = await PoemGallerySProxy.ReqVoteGalleryWorks(workId); if (result) { UpdateGalleryList(); int Count = GameGlobal.myNumericComponent.GetAsInt(NumericType.LikeGalleryWorksCountDaily); GalleryIntegralCfg integralCfg = GalleryIntegralCfgArray.Instance.GetCfg(Count); if (integralCfg != null) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(integralCfg.itemId); PromptController.Instance.ShowFloatTextPrompt(string.Format("{0} +{1}", itemCfg.name, integralCfg.Count)); } } } /********************************************************下拉刷新*************************************************/ //自动下拉 private void PullDown() { _list.ScrollToView(0); GComponent header = _comScroll.scrollPane.header; header.height = header.sourceHeight; } //下拉刷新 private async void onPullDownRelease() { GComponent header = _comScroll.scrollPane.header; if (!header.visible || header.height < header.sourceHeight || isPullDown) return; isPullDown = true; _comScroll.scrollPane.LockHeader(header.sourceHeight); bool result = await PoemGallerySProxy.ReqGalleryList(_sortType, 0, _pageCount); // OnPullDownTimeComplete(); if (result) { Timers.inst.StartCoroutine(PictureStorageHelper.Download(_galleryDatas, 0, UpdateGalleryList)); } } private void OnPullDownTimeComplete() { GComponent header = _comScroll.scrollPane.header; Transition transition = header.GetTransition("t0"); transition.Stop(); _comScroll.scrollPane.LockHeader(0); isPullDown = false; } //上拉刷新 private async void OnPullUpToRefresh() { GComponent footer = _comScroll.scrollPane.footer; if (footer.height < footer.sourceHeight || isPullUp) return; isPullUp = true; _comScroll.scrollPane.LockFooter(footer.sourceHeight + 10); bool result = await PoemGallerySProxy.ReqGalleryList(_sortType, _galleryDatas.Count, _pageCount); // OnPullUpTimeComplete(); if (result) { Timers.inst.StartCoroutine(PictureStorageHelper.Download(_galleryDatas, _galleryDatas.Count, UpdateGalleryList)); } } private void OnPullUpTimeComplete() { GComponent footer = _comScroll.scrollPane.footer; Transition transition = footer.GetTransition("t0"); transition.Stop(); // header.GetController("c1").selectedIndex = 2; _comScroll.scrollPane.LockFooter(0); isPullUp = false; } //重置上拉/下拉刷新状态 private void ResetPullRelease() { // Timers.inst.Remove(OnPullDownTimeComplete); OnPullDownTimeComplete(); // Timers.inst.Remove(OnPullUpTimeComplete); OnPullUpTimeComplete(); } } }