using asap.core; using GameCore; using UnityEngine; using UniRx; using Cinemachine; public class EventPartnerStatueAct : AGameAct { [SerializeField] private EventPartnerStatueBuild buildScene; [SerializeField] private CinemachineVirtualCamera vc; [SerializeField] private Animation ani; public override async System.Threading.Tasks.Task StartAsync() { var arc = GContext.container.Resolve(); arc.EventAggregator.GetEvent().Subscribe(OnEnterMainPanel).AddTo(this); arc.EventAggregator.GetEvent().Subscribe(OnEnterBuildPanel).AddTo(this); arc.EventAggregator.GetEvent().Subscribe(e => ShowScene(e.SlotIdx)).AddTo(this); arc.EventAggregator.GetEvent().Subscribe(OnSelfBuild).AddTo(this); arc.EventAggregator.GetEvent().Subscribe(OnPartnerBuild).AddTo(this); await OnEnterMainPanelAsync(); return await base.StartAsync(); } public override async System.Threading.Tasks.Task StopAsync() { Debug.Log("[EventPartnerStatue] Stop Act!"); Camera.main.orthographic = false; var arc = GContext.container.Resolve(); arc.RtSystem.Unsubscribe(); UIManager.Instance.DestroyUI(UITypes.EventPartnerStatuePanel); await base.StopAsync(); } protected override void OnDestroy() { // UIManager.Instance.DestroyUI(UITypes.EventPartnerStatuePanel); Debug.Log($"[EventPartnerStatue] Exit act."); } private void HideScene() { buildScene.gameObject.SetActive(false); } private void ShowScene(int slotIdx) { var arc = GContext.container.Resolve(); var c = arc.Model.ComponentList[slotIdx]; buildScene.gameObject.SetActive(true); buildScene.Init(arc.GetEventPartnerStatueBuildSceneData(slotIdx)); ani.Play("camera_bg_show"); if (c.IsRewardClaimed) buildScene.SetFinished(); } private async void OnEnterMainPanel(EventPartnerStatueEnterMain e) { try { await OnEnterMainPanelAsync(e); } catch (System.Exception ex) { Debug.LogError(ex); } } private async void OnEnterBuildPanel(EventPartnerStatueEnterBuild e) { try { await OnEnterBuildPanelAsync(e.SlotIdx); } catch (System.Exception ex) { Debug.LogError(ex); } } private async System.Threading.Tasks.Task OnEnterMainPanelAsync(EventPartnerStatueEnterMain e = null) { var arc = GContext.container.Resolve(); if (arc.DoRefreshDetail) { var detail = await arc.Requests.GetDetail(); if (detail != null) arc.ResolveWithDetail(detail, EventPartnerStatuePlayfabData.Load()); } var go = await UIManager.Instance.ShowUINotLoading(UITypes.EventPartnerStatuePanel); var panel = go.GetComponent(); if (e != null && e.SlotIdx >= 0) panel.PlayTaskItemFx(e.SlotIdx); arc.TryGrantFinalReward(); HideScene(); UIManager.Instance.DestroyUI(UITypes.EventPartnerStatueBuildPanel); if (arc.IsFirstTime) { arc.IsFirstTime = false; arc.SavePlayerPreference(); await UIManager.Instance.ShowUINotLoading(UITypes.EventPartnerStatueInfoPopupPanel); } } private async System.Threading.Tasks.Task OnEnterBuildPanelAsync(int slotIdx) { var arc = GContext.container.Resolve(); var go = await UIManager.Instance.ShowUINotLoading(UITypes.EventPartnerStatueBuildPanel); var panel = go.GetComponent(); panel.Init(arc.GetEventPartnerStatueBuildPanelData(slotIdx), buildScene); ShowScene(slotIdx); UIManager.Instance.DestroyUI(UITypes.EventPartnerStatuePanel); } public void OnSelfBuild(EventPartnerStatueSelfBuild e) { buildScene.PlayDice(e.Combination); buildScene.PlayToolAnimation(e.Combination, e.OldStage, e.MaxStage); buildScene.SetStatue(e.NewStage); } public void OnPartnerBuild(EventPartnerStatuePartnerBuild e) { buildScene.PlayToolAnimation((1, 2, 3), e.OldStage, e.MaxStage); buildScene.SetStatue(e.NewStage); } } public class EventPartnerStatueEnterMain { public int SlotIdx { get; set; } = -1; } public class EventPartnerStatueEnterBuild { public int SlotIdx { get; set; } } public class EventPartnerStatueSwitchBuild { public int SlotIdx { get; set; } } public class EventPartnerStatueSelfBuild { public (int c1, int c2, int c3) Combination { get; set; } public int OldStage { get; set; } public int NewStage { get; set; } public int MaxStage { get; set; } public EventPartnerStatueSelfBuild((int c1, int c2, int c3) combination, int oldStage, int maxStage, int newStage) { Combination = combination; OldStage = oldStage; MaxStage = maxStage; NewStage = newStage; } } public class EventPartnerStatuePartnerBuild { // public List Combination { get; set;} public int OldStage { get; set; } public int NewStage { get; set; } public int MaxStage { get; set; } public EventPartnerStatuePartnerBuild(int oldStage, int maxStage, int newStage) { OldStage = oldStage; MaxStage = maxStage; NewStage = newStage; } }