using System.Threading.Tasks; using Activity; using asap.core; using EventSmash.Manager; using game; using Game; using GameCore; using UnityEngine; namespace EventSmash { /// /// 砸罐(开小猪)活动 Act:从 切换后打开主面板;离开时销毁相关 UI 并回到钓鱼场景 Act。 /// 需在 Addressables 中注册与 同名的预制体(可仅挂本组件的空物体)。 /// UI 与 一致按表路径 new UIType(...),不依赖 静态项。 /// public class EventSmashAct : AGameAct { public const string ActAddress = nameof(EventSmashAct); private string _uiPanelPath; private string _packPanelPath; private string _battlePassPanelPath; public override async Task StartAsync() { var manager = ActivityResolver.Resolve(); var data = manager?.LoadData(); if (data == null || !data.IsActive || data.MainConfig == null) { Debug.LogError("[EventSmashAct] 活动数据或 MainConfig 无效,无法打开砸罐界面,切回 FishingAct。"); GContext.Publish(new UnloadActToNextAct("FishingAct")); GContext.Publish(new EndTransition()); return await base.StartAsync(); } var main = data.MainConfig; _uiPanelPath = main.UIPanel; _packPanelPath = main.PackPanel; _battlePassPanelPath = main.BattlePassPanel; await UIManager.Instance.ShowUILoad(new UIType(_uiPanelPath)); GContext.Publish(new EndTransition()); return await base.StartAsync(); } public override async Task StopAsync() { if (!string.IsNullOrEmpty(_uiPanelPath)) UIManager.Instance.DestroyUI(new UIType(_uiPanelPath)); if (!string.IsNullOrEmpty(_packPanelPath)) UIManager.Instance.DestroyUI(new UIType(_packPanelPath)); if (!string.IsNullOrEmpty(_battlePassPanelPath)) UIManager.Instance.DestroyUI(new UIType(_battlePassPanelPath)); await base.StopAsync(); } protected override void OnDestroy() { } } }