using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
using System; 
 | 
using DG.Tweening; 
 | 
  
 | 
  
 | 
public class BattleHeroInfoBar : MonoBehaviour 
 | 
{ 
 | 
    protected BattleObject battleObject; 
 | 
  
 | 
    public Slider sliderHp; 
 | 
  
 | 
    public Slider sliderXp; //怒气 
 | 
  
 | 
    protected float timer = 0f; 
 | 
  
 | 
    public float PopUpInterval = 0.2f; 
 | 
  
 | 
  
 | 
    // public List<BattleBuffCell> buffCells = new List<BattleBuffCell>(); 
 | 
  
 | 
    protected List<string> messages = new List<string>(); 
 | 
  
 | 
    public BasicHeroInfoContainer heroInfoContainer; 
 | 
  
 | 
    public BattleTips textTips; 
 | 
  
 | 
    protected Tween hpTween; 
 | 
  
 | 
    protected Tween xpTween; 
 | 
  
 | 
    protected List<BattleTips> tipsList = new List<BattleTips>(); 
 | 
  
 | 
    protected List<HB428_tagSCBuffRefresh> buffList = new List<HB428_tagSCBuffRefresh>(); 
 | 
  
 | 
    public ScrollerController scroller; 
 | 
  
 | 
    public void SetBattleObject(BattleObject _battleObject) 
 | 
    { 
 | 
        battleObject = _battleObject; 
 | 
        heroInfoContainer.SetHeroInfo(battleObject.teamHero); 
 | 
        RefreshBuff(buffList); 
 | 
        UpdateHP(battleObject.teamHero.curHp, battleObject.teamHero.curHp, battleObject.teamHero.maxHp, false); 
 | 
        UpdateXP(battleObject.teamHero.rage, battleObject.teamHero.rage, 100, false); 
 | 
    } 
 | 
  
 | 
    public void RefreshBuff(List<HB428_tagSCBuffRefresh> datas) 
 | 
    { 
 | 
        buffList = datas; 
 | 
        //  更新buff图标 or 创建新的buff图标 
 | 
        scroller.Refresh(); 
 | 
        for (int i = 0; i < buffList.Count; i++) 
 | 
        { 
 | 
            if (i % 5 == 0) 
 | 
            { 
 | 
                scroller.AddCell(ScrollerDataType.Header, i); 
 | 
            } 
 | 
        } 
 | 
        scroller.Restart(); 
 | 
    } 
 | 
  
 | 
    protected void OnEnable() 
 | 
    { 
 | 
        scroller.OnRefreshCell += OnRefreshCell;         
 | 
    } 
 | 
  
 | 
    protected void OnDisable() 
 | 
    { 
 | 
        scroller.OnRefreshCell -= OnRefreshCell;      
 | 
        //  TODO YYL 考虑池化 
 | 
        messages.Clear(); 
 | 
        for (int i = 0; i < tipsList.Count; i++) 
 | 
        { 
 | 
            var tip = tipsList[i]; 
 | 
            tip.OnFinish = null; 
 | 
            GameObject.DestroyImmediate(tip.gameObject); 
 | 
        } 
 | 
        tipsList.Clear(); 
 | 
    } 
 | 
  
 | 
    protected void OnRefreshCell(ScrollerDataType type, CellView cell) 
 | 
    { 
 | 
        var _cell = cell as BattleBuffLineCell; 
 | 
        _cell.Display(buffList, cell.index); 
 | 
    } 
 | 
  
 | 
    public void ShowTips(string message) 
 | 
    { 
 | 
        messages.Add(message); 
 | 
    } 
 | 
  
 | 
    public void SetActive(bool active) 
 | 
    { 
 | 
        gameObject.SetActive(active); 
 | 
    } 
 | 
  
 | 
    public void PopUpTipsDirectly(string message) 
 | 
    { 
 | 
        GameObject prefab = textTips.gameObject; 
 | 
  
 | 
        GameObject go = GameObject.Instantiate(prefab, transform); 
 | 
  
 | 
        BattleTips tips = go.GetComponent<BattleTips>(); 
 | 
  
 | 
        tips.SetText(message); 
 | 
  
 | 
        tips.OnFinish = () => 
 | 
        { 
 | 
            //  TODO YYL 考虑池化 
 | 
            tipsList.Remove(tips); 
 | 
            GameObject.DestroyImmediate(tips.gameObject); 
 | 
        }; 
 | 
  
 | 
        tipsList.Add(tips); 
 | 
    } 
 | 
  
 | 
  
 | 
    public void UpdateHP(long fromHp, long toHp, long maxHp,  bool tween = true) 
 | 
    { 
 | 
        //  做hp增加或者减少的动画 
 | 
        // sliderHp.value = ((float)fromHp) / ((float)maxHp); 
 | 
        if (hpTween != null) 
 | 
        { 
 | 
            battleObject.battleField.battleTweenMgr.OnKillTween(hpTween); 
 | 
        } 
 | 
  
 | 
        if (tween) 
 | 
        { 
 | 
            hpTween = sliderHp.DOValue((float)toHp / (float)maxHp, 0.3f); 
 | 
            battleObject.battleField.battleTweenMgr.OnPlayTween(hpTween); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            sliderHp.value = ((float)toHp) / ((float)maxHp); 
 | 
        } 
 | 
  
 | 
        // BattleDebug.LogError("update hp from " + fromHp + " to " + toHp + " maxHp " + maxHp); 
 | 
    } 
 | 
  
 | 
    public void UpdateXP(long fromXp, long toXp, long maxXp, bool tween = true) 
 | 
    { 
 | 
        //  做Xp增加或者减少的动画 
 | 
        // sliderXp.value = ((float)fromXp) / ((float)maxXp); 
 | 
        if (xpTween != null) 
 | 
        { 
 | 
            battleObject.battleField.battleTweenMgr.OnKillTween(xpTween); 
 | 
        } 
 | 
  
 | 
        if (tween) 
 | 
        { 
 | 
            xpTween = sliderXp.DOValue((float)toXp / (float)maxXp, 0.2f); 
 | 
            battleObject.battleField.battleTweenMgr.OnPlayTween(xpTween); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            sliderXp.value = ((float)toXp) / ((float)maxXp); 
 | 
        } 
 | 
  
 | 
        // BattleDebug.LogError("update xp from " + fromXp + " to " + toXp + " maxXp " + maxXp); 
 | 
    } 
 | 
  
 | 
    public void Run() 
 | 
    { 
 | 
        // 倒序遍历 删除.run里删除元素不受影响 
 | 
        for (int i = tipsList.Count - 1; i >= 0; i--) 
 | 
        { 
 | 
            tipsList[i].Run(); 
 | 
        } 
 | 
  
 | 
        timer += Time.deltaTime; 
 | 
  
 | 
        if (messages.Count > 0 && timer >= PopUpInterval) 
 | 
        { 
 | 
            // 播放飘字 
 | 
            string message = messages[0]; 
 | 
            messages.RemoveAt(0); 
 | 
  
 | 
            PopUpTipsDirectly(message); 
 | 
  
 | 
            timer = 0f; 
 | 
        } 
 | 
    } 
 | 
} 
 |