备份CatanBuilding瘦身独立工程
This commit is contained in:
175
Assets/Scripts/UI/PartnerFishBowl/EventPartnerEntryButton.cs
Normal file
175
Assets/Scripts/UI/PartnerFishBowl/EventPartnerEntryButton.cs
Normal file
@@ -0,0 +1,175 @@
|
||||
using asap.core;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UniRx;
|
||||
using GameCore;
|
||||
using game;
|
||||
using static EventPartnerData;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class EventPartnerEntryButton : EventButtonResource
|
||||
{
|
||||
[SerializeField] private TMP_Text _textTimer;
|
||||
[SerializeField] private Button _btn;
|
||||
[SerializeField] CanvasGroup _homeCanvasGroup;
|
||||
[SerializeField] private Image icon;
|
||||
private readonly IUserService _userService = GContext.container.Resolve<IUserService>();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Debug.Log($"<color=#e23f31>[EventPartner] Icon Awake</color>");
|
||||
GContext.OnEvent<EventPartnerDataLoaded>().Subscribe(_ => OnDataLoaded()).AddTo(this);
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
var _data = GContext.container.Resolve<EventPartnerData>();
|
||||
// _data.LogActivation();
|
||||
|
||||
//var manager = GContext.container.Resolve(Partainer)?
|
||||
|
||||
if (!_data.IsEventActivated)
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
return;
|
||||
}
|
||||
_textTimer.text = ConvertTools.ConvertTime2(_data.RemainingTime);
|
||||
RedPointManager.Instance.SetRedPointState("Home.Fishbowl", _data.DoNeedRedPoint);
|
||||
Observable.Interval(System.TimeSpan.FromSeconds(1.0f)).Subscribe(_ =>
|
||||
{
|
||||
_textTimer.text = ConvertTools.ConvertTime2(_data.RemainingTime);
|
||||
RedPointManager.Instance.SetRedPointState("Home.Fishbowl", _data.DoNeedRedPoint);
|
||||
if (_data.RemainingTime.TotalSeconds <= 0) gameObject.SetActive(false);
|
||||
}).AddTo(this);
|
||||
// Debug.Log($"<color=#e23f31>icon: {_data.Icon}</color>");
|
||||
CheckResource(new List<string>() { "EventPartnerCommonPrefabs", _data.AddressableLabel, _data.Icon });
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_btn.onClick.AddListener(() => EnterEventPartnerAct());
|
||||
}
|
||||
|
||||
private async void EnterEventPartnerAct()
|
||||
{
|
||||
try
|
||||
{
|
||||
var _data = GContext.container.Resolve<EventPartnerData>();
|
||||
_homeCanvasGroup.blocksRaycasts = false;
|
||||
var isWithinCoolDown = _data.LastDetailRequestFromEntranceButton != null
|
||||
&& ZZTimeHelper.UtcNow() - _data.LastDetailRequestFromEntranceButton <= System.TimeSpan.FromSeconds(15);
|
||||
|
||||
if (!_data.IsWhole || !isWithinCoolDown)
|
||||
{
|
||||
_data.LastDetailRequestFromEntranceButton = ZZTimeHelper.UtcNow();
|
||||
var dataRes = await LoadData();
|
||||
if (!dataRes)
|
||||
{
|
||||
Debug.Log($"<color=red>[EventPartner] LoadData Failed.</color>");
|
||||
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_107"));
|
||||
_homeCanvasGroup.blocksRaycasts = true;
|
||||
_data.IsLastTimeDetailRequestFromEntranceButtonValid = false;
|
||||
return;
|
||||
}
|
||||
_data.IsLastTimeDetailRequestFromEntranceButtonValid = true;
|
||||
// else open panel.
|
||||
}
|
||||
else if (!_data.IsLastTimeDetailRequestFromEntranceButtonValid)
|
||||
{
|
||||
Debug.Log($"<color=red>[EventPartner] Too frequent.</color>");
|
||||
ToastPanel.Show(LocalizationMgr.GetText("UI_ToastPanel_107"));
|
||||
_homeCanvasGroup.blocksRaycasts = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Load resource and enter event act
|
||||
_data.SubscribeEvent();
|
||||
if (await LoadAssetBundle())
|
||||
GContext.Publish(new UnloadActToNextAct("EventPartnerAct"));
|
||||
else
|
||||
{
|
||||
var panel = await UIManager.Instance.ShowUI(UITypes.CloudTransitionPanel);
|
||||
panel.GetComponent<CloudTransitionPanel>().SetBtn(true, () => GContext.Publish(new UnloadActToNextAct("EventPartnerAct")));
|
||||
}
|
||||
_homeCanvasGroup.blocksRaycasts = true;
|
||||
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Debug.Log($"<color=#22a6f2>[EventPartner] EnterActError: {e.Message}\n{e.StackTrace}</color>");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private async System.Threading.Tasks.Task<bool> LoadData()
|
||||
{
|
||||
var _data = GContext.container.Resolve<EventPartnerData>();
|
||||
var _playerPreferenceKey = "EventPartnerRecommendCache" + _userService.UserId;
|
||||
//Load Player Preferences
|
||||
var pfString = PlayFabMgr.Instance.GetLocalData(EventPartnerPlayfabData.Key);
|
||||
EventPartnerPlayfabData pfData = EventPartnerPlayfabData.FromString(pfString);
|
||||
Debug.Log($"<color=#2d7cee>[EventPartner] Try get response in load data from entrance:</color>");
|
||||
var detailRequest = new EventBuildDetailRequest() { eventId = _data.EventId };
|
||||
var response = await GContext.container.Resolve<ICustomServerMgr>()
|
||||
.EventPartnerRequest<EventBuildDetailResp>(DetailUrl, detailRequest);
|
||||
if (response == null)
|
||||
{
|
||||
Debug.Log($"<color=red>[EventPartner] No response. </color>");
|
||||
return false;
|
||||
}
|
||||
Debug.Log($"<color=#2d7cee>[EventPartner] Response: {response}</color>");
|
||||
Debug.Log($"<color=#2d7cee>[EventPartner] ResponseState: {response.State}</color>");
|
||||
Debug.Log($"<color=#2d7cee>[EventPartner] ResponseMessage: {response.Message}</color>");
|
||||
switch (response.State)
|
||||
{
|
||||
case EEventBuildState.Failed:
|
||||
Debug.Log($"<color=red>[EventPartner] Load data error from server: {response.Message} </color>");
|
||||
return false;
|
||||
case EEventBuildState.NoActiveEvent:
|
||||
Debug.Log($"<color=red>[EventPartner] Event partner not active in server: {response.Message}, but this is not supposed to happen any more.</color>");
|
||||
return false;
|
||||
case EEventBuildState.Success:
|
||||
_data.ResolveAllDataButEvent(response, _data.Cache, pfData);
|
||||
return true;
|
||||
default:
|
||||
Debug.Log($"<color=red>[EventPartner] Unexpected status: {response.State}./nMessage: {response.Message} </color>");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private async System.Threading.Tasks.Task<bool> LoadAssetBundle()
|
||||
{
|
||||
var _data = GContext.container.Resolve<EventPartnerData>();
|
||||
var loadResourceService = GContext.container.Resolve<ILoadResourceService>();
|
||||
var isCommentAssetLoaded = await loadResourceService.Load("EventPartnerCommonPrefabs");
|
||||
var isCurrentAssetLoaded = await loadResourceService.Load(_data.AddressableLabel);
|
||||
return isCommentAssetLoaded && isCurrentAssetLoaded;
|
||||
}
|
||||
|
||||
private async void OnDataLoaded()
|
||||
{
|
||||
Debug.Log($"<color=#2d7cee>[EventPartner]On Loaded.</color>");
|
||||
await Awaiters.NextFrame;
|
||||
//gameObject.SetActive(true);
|
||||
var _data = GContext.container.Resolve<EventPartnerData>();
|
||||
CheckResource(new List<string>() { "EventPartnerCommonPrefabs", _data.AddressableLabel, _data.Icon });
|
||||
}
|
||||
|
||||
protected override void OnLoadEventResource()
|
||||
{
|
||||
var _data = GContext.container.Resolve<EventPartnerData>();
|
||||
if (_data == null)
|
||||
{
|
||||
Debug.LogError("EventPartnerEntryButton EventPartnerData 为空");
|
||||
return;
|
||||
}
|
||||
// _data.LogActivation();
|
||||
if (_data.IsEventActivated)
|
||||
{
|
||||
GContext.container.Resolve<IUIService>().SetImageSprite(icon, _data.Icon);
|
||||
gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
public class EventPartnerDataLoaded { }
|
||||
Reference in New Issue
Block a user