using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using asap.core;
using cfg;
using Event1v1Battle.Data;
using game;
using GameCore;
using TimeManager;
using TMPro;
using UIExtend.Component;
using UniRx;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.UI;
namespace Event1v1Battle.Panel.MainPanel
{
///
/// 1v1扇耳光大赛主战斗面板 Event1v1BattleSlapPanel
///
public class Event1v1BattleSlapPanel : BasePanel
{
#region UI Elements
// Top
private TMP_Text _textEventTime;
private TMP_Text _textStageHP;
private Image _imgStageHPBar;
private TMP_Text _textPlayerHP;
private Image _imgPlayerHPBar;
private Image[] _lifeImages;
/// fx_hploss 下与子节点,与 p_lives_icon 中心形顺序一一对应(本次扣第几颗心就开哪一个)
private GameObject[] _fxHpLossSlots;
private int? _overrideLifeDisplayCount;
private Head _myself;
private Head _enemy;
private GameObject _iconEmpty;
private Button _btnInfo;
private Button _btnPack; // 礼包按钮
//buff
private GameObject _saleObj;
private TMP_Text _textSaleTime;
private GameObject fx_ui_event1v1battle_slap_buff;
// Bottom
private Button _btnBattle;
private Button _btnStart;
private Button _btnReward;
private Button _btnClose;
private Button _btnRevive;
private TMP_Text _textRound;
private TMP_Text _textReviveBtn;
private StageItemCell[] _stageItemCells;
//chest
private PlayableDirector _chestDirector;
#endregion
#region Manager
private Event1v1BattleSlapManager _manager;
private Event1v1BattleSlapData Data => _manager?.LoadData();
#endregion
[Header("chest reward")]
[SerializeField] private float chestRewardTime = 1f;
[Header("fx_hploss")]
[Tooltip("子节点上无 Animation 默认 clip 时的等待时长(秒)")]
[SerializeField] private float _fxHpLossWaitSeconds = 0.5f;
private void Awake()
{
// Top
_textEventTime = gameObject.FindChildGameObject("p_text_event_time")?.GetComponent();
_lifeImages = gameObject.FindChildGameObject("p_lives_icon")?.GetComponentsInChildren(true);
var fxHpLossRoot = gameObject.FindChildGameObject("fx_hploss");
if (fxHpLossRoot != null)
{
var t = fxHpLossRoot.transform;
int childCount = t.childCount;
int slotCount = Mathf.Min(3, childCount);
_fxHpLossSlots = new GameObject[slotCount];
for (int i = 0; i < slotCount; i++)
{
_fxHpLossSlots[i] = t.GetChild(i).gameObject;
_fxHpLossSlots[i].SetActive(false);
}
}
_textStageHP = gameObject.FindChildGameObject("p_text_blood")?.GetComponent(); // NPC血量文本
_imgStageHPBar = gameObject.FindChildGameObject("p_bar_enermy")?.GetComponent(); // NPC血条
_enemy = gameObject.FindChildGameObject("head_enermy")?.GetComponent();
_iconEmpty = gameObject.FindChildGameObject("p_icon_empty");
_textPlayerHP = gameObject.FindChildGameObject("p_text_blood_myself")?.GetComponent(); // 玩家血量文本(在myself下)
_imgPlayerHPBar = gameObject.FindChildGameObject("p_bar_myself")?.GetComponent(); // 玩家血条
_myself = gameObject.FindChildGameObject("head_myself")?.GetComponent();
_btnPack = gameObject.FindChildGameObject("btn_pack")?.GetComponent