using System; using System.Collections.Generic; using System.Threading.Tasks; using asap.core; using cfg; using DataCenter; using game; using TMPro; using UnityEngine; using UnityEngine.UI; namespace UI.PartnerGather.Mining { /// /// 事件合作伙伴抽奖挖矿面板控制器 /// 负责管理抽奖转盘UI、挖矿进度显示、场景控制器绑定等核心功能 /// /// 建议挂载在:EventPartnerDrawMiningPanel UI预制体的根对象上 /// /// UI结构建议: /// EventPartnerDrawMiningPanel (挂载此脚本) /// ├── root/ /// │ ├── turntable/Scroll_item (转盘滚动区域) /// │ ├── btn_common_green/btn_green (抽奖按钮) /// │ └── turnable/select (选中效果) /// ├── btn_close (关闭按钮) /// └── SettlementPanel/ (结算面板,可选) /// ├── Rewards/ (奖励显示区域) /// └── Trophy/ (奖杯显示区域) /// /// 重要说明: /// - 此脚本会自动查找和绑定采集场景控制器 /// - 需要正确设置转盘相关的UI引用 /// - 支持节点结算过场动画和奖杯显示系统 /// public class EventPartnerDrawMiningPanel : MonoBehaviour { // 管理器 private EventPartnerGatherManager _eventPartnerGatherManager; [Header("采集场景配置(运行时自动设置)")] [SerializeField] private EventPartnerMiningSceneController miningScene; private bool _isProcessingResult = false; // 更新点数即等级 [Header("=== 等级进度显示 ===")] [Tooltip("等级节点控制器数组 - 每个节点对应一个挖矿阶段")] public EventPartnerMiningLevelController[] levels; public float contentDeltaX = 24; public Image bar; private Transform _level; private Transform _turntable; // 转盘 private PanelScroll _scrollList; // 滚动列表 private Transform _select; // 选中效果 private Transform _priceItem; // 列表滚动中的数据 // 按钮 private Button _btnClose; private Button _btnSpin; private ScrollRect _scrollRect; private RectTransform _viewport; private RectTransform _content; private RectTransform _itemTemplate; // 记录当前的Item private readonly List _spinItemViews = new(); // private readonly List _rects = new List(); private readonly List _dataIndexMap = new List(); [Header("结算过场配置")] public Transform settlementPanel; // 结算面板 public Transform trophyDisplay; // 奖杯显示区域 public Transform nodeCompletionEffect; // 节点完成特效 public AudioClip settlementSound; // 结算音效 public AudioClip trophySound; // 奖杯音效 private bool _isShowingSettlement = false; // 当前点数列表 private List _spinPointDatas; // 0,1,2 停靠在第二个格子 private readonly int _starGrid = 2; private int _dataCount; private int _poolSize; private float _itemWidth; private bool _animating; private float _autoScrollSpeed = 60f; private bool _autoScroll = false; // 自动滚动累积位移(用于与步进动画叠加) private float _autoScrollAccumulation = 0f; private void Awake() { // _eventPartnerGatherManager = GContext.container.Resolve(); // _btnSpin = transform.Find("root/btn_common_green/btn_green").GetComponent