hch
2025-10-30 dc7922d80c1d133b6261b8af1d521567d2c0a35d
Main/System/Battle/UIComp/DamageContent.cs
@@ -4,23 +4,50 @@
using System;
using Cysharp.Threading.Tasks;
public class DamageContent : MonoBehaviour
public class DamageContent : MonoBehaviour, IBattleFloatingUI
{
   public GameObject line;
   public RectTransform parent;
    public Vector2 beginPos = Vector2.zero;
    public Vector2 endPos = new Vector2(0, 150);
   protected List<DamageLine> damageLineList = new List<DamageLine>();
   public PositionTween posTween;
   public ScaleTween scaleTween;
   private BattleDmgInfo battleDmgInfo;
    private BattleFloatingUIController controller;
    //  飘血优化:初始放大200%,透明度50%,7~8帧内缩放回100%,透明度回到100%,再往上飘14~16帧【30帧/秒】,暴击初始放大300%,缩回150%
    //   战斗帧BattleConst.skillMotionFps 1秒=30帧
   void Awake()
   {
      line.SetActive(false);
    }
    private void InitController()
    {
        if (controller != null) return;
        RectTransform rectTransform = GetComponent<RectTransform>();
        controller = new BattleFloatingUIController(rectTransform, gameObject, ApplyColor);
        // 使用当前设置的 beginPos 和 endPos
        controller.beginPos = beginPos;
        controller.endPos = endPos;
        // controller.scaleChangeTime = scaleChangeTime;
        // controller.totalShowTime = totalShowTime;
        // controller.normalBeginScale = normalBeginScale;
        // controller.normalEndScale = normalEndScale;
        // controller.critBeginScale = critBeginScale;
        // controller.critEndScale = critEndScale;
        // controller.beginColor = beginColor;
        // controller.endColor = endColor;
    }
    public void SetRatio(float speed, float scale)
    {
        InitController();
        controller.SetRatio(speed, scale);
   }
   public async void SetDamage(BattleDmgInfo _damageInfo, Action _onComplete)
@@ -34,12 +61,9 @@
         damageLineList[i].SetActive(false);
      }
      posTween.Play(_onComplete);
      if (battleDmgInfo.IsCrit())
      {
         scaleTween.Play();
      }
        // 使用控制器的Play方法
        bool isCrit = battleDmgInfo.IsCrit();
        Play(isCrit, _onComplete);
      for (int i = 0; i < damages.Count; i++)
      {
@@ -54,21 +78,41 @@
      }
   }
    public void Play(bool isCrit, Action onComplete = null)
    {
        InitController();
        // 每次Play前更新controller的位置设置
        controller.beginPos = beginPos;
        controller.endPos = endPos;
        controller.Play(isCrit, onComplete);
    }
    public void Run()
    {
        if (controller == null) return;
        controller.Run();
    }
   public void Stop()
   {
      posTween.Stop();
      if (battleDmgInfo.IsCrit())
      {
         scaleTween.Stop();
      }
        if (controller == null) return;
        controller.Stop();
   }
   public void Resume()
   {
      posTween.Resume();
      if (battleDmgInfo.IsCrit())
        if (controller == null) return;
        controller.Resume();
    }
    private void ApplyColor(Color color)
      {
         scaleTween.Resume();
        for (int i = 0; i < damageLineList.Count; i++)
        {
            if (damageLineList[i].gameObject.activeSelf)
            {
                damageLineList[i].SetColor(color);
            }
      }
   }
}