using asap.core; using cfg; using DG.Tweening; using EnhancedUI.EnhancedScroller; using game; using Game; using GameCore; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using TMPro; using UniRx; using UnityEngine; using UnityEngine.UI; using static EnhancedUI.EnhancedScroller.EnhancedScroller; using Tween = DG.Tweening.Tween; namespace Assets.Scripts.UI.JigsawPuzzle { public class JigsawPuzzlePanel : BasePanel, IEnhancedScrollerDelegate { #region UI_ELEMENTS //top ui private Button btn_questionmark; private TextMeshProUGUI text_time; private Image bar; private TextMeshProUGUI text_progress; private RewardItemNew p_current_reward; private Image p_icon_piece; private GameObject fx_ui_jigsawpuzzlebuilding_reward_light; private GameObject fx_ui_jigsawpuzzlebuilding_light; //center ui private Toggle[] toggles; private GameObject[] selecteds; private JigsawPuzzleSlotsComponent slots; private EnhancedScroller enhancedScroller; private JigsawPuzzlePictureCell cellView; private RewardFlyBatchController RewardFlyBatchCtrl; //botom ui private Button btn_spin; private Button btn_add; private Image p_icon_ticket; private TextMeshProUGUI p_text_num_item; private TextMeshProUGUI p_repeat_text_num; private Image p_repeat_bar; private Image p_repeat_icon_ticket; private GameObject fx_ui_jigsawpuzzlebuilding_piece_light; private Button btn_close; private Button btn_repeat_piece; private GameObject piece_tips; private Button p_btn_close_tips; #endregion UI_ELEMENTS #region 动效参数 [Header("progress")] [SerializeField, Min(0)] private float progressTime = 0.5f; [SerializeField, Min(0)] private float repeatPieceProgressTime = 0.5f; [Header("item")] [SerializeField, Min(0)] private float itemDelayShow = 0.5f; [Header("rewardFly")] [SerializeField, Min(0)] private float rewardFlyStartIconSize = 180f; [SerializeField, Min(0)] private float rewardFlyTargetIconSize = 100f; [SerializeField, Min(0)] private float rewardFlyEndAwaitTime = 0.2f; [Header("tab effect")] [SerializeField, Min(0)] private float tabSwitchEachTime = 0.5f; [SerializeField, Min(0)] private float tabSwitchEndAwaitTime = 0.2f; [SerializeField] private Ease ease = Ease.InOutCirc; [Header("button click")] [SerializeField] private float cdTime= 0.5f; #endregion 动效参数 private JigsawPuzzleManager _jigsawPuzzleManager; private JigsawPuzzleManager JigsawPuzzleManager => _jigsawPuzzleManager ??= GContext.container.Resolve(); private JigsawPuzzleData Data => JigsawPuzzleManager?.Data; private float cellViewSize => cellView.GetComponent()?.sizeDelta.x ?? 1020f; private List targetIndex; private int delayShowPictureID = 0; private int currentSelectedToggleIndex = 0; private List puzzleRewards; private List piecePuzzleRewards; private int pieceAmount => cellView?.PieceCount ?? 6; private string flyTrailName = "fx_ui_jigsawpuzzlebuilding_piece_flytrail0"; private IDeferredRewardStashService _service; private IDeferredRewardStashService service => _service ??= GContext.container.Resolve(); private const string GuideKey = "JigsawPuzzleGuide"; private float lastSpinClickTime; private void Awake() { //top ui btn_questionmark = this.gameObject.FindChildGameObject("p_panel_btn_questionmark").GetComponent