Files
ft/Client/Assets/Scripts/UI/PartnerStatue/EventPartnerStatueAct.cs
2026-06-29 21:18:33 +08:00

162 lines
5.6 KiB
C#

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<bool> StartAsync()
{
var arc = GContext.container.Resolve<EventPartnerStatueArc>();
arc.EventAggregator.GetEvent<EventPartnerStatueEnterMain>().Subscribe(OnEnterMainPanel).AddTo(this);
arc.EventAggregator.GetEvent<EventPartnerStatueEnterBuild>().Subscribe(OnEnterBuildPanel).AddTo(this);
arc.EventAggregator.GetEvent<EventPartnerStatueSwitchBuild>().Subscribe(e => ShowScene(e.SlotIdx)).AddTo(this);
arc.EventAggregator.GetEvent<EventPartnerStatueSelfBuild>().Subscribe(OnSelfBuild).AddTo(this);
arc.EventAggregator.GetEvent<EventPartnerStatuePartnerBuild>().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<EventPartnerStatueArc>();
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<EventPartnerStatueArc>();
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<EventPartnerStatueArc>();
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<EventPartnerStatueMainPanel>();
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<EventPartnerStatueArc>();
var go = await UIManager.Instance.ShowUINotLoading(UITypes.EventPartnerStatueBuildPanel);
var panel = go.GetComponent<EventPartnerStatueBuildPanel>();
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<int> 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;
}
}