yyl
4 天以前 440e8a4e3febfc1d98f11da2fbd7eaf75c12e877
125 战斗 细节调整
1个文件已修改
83 ■■■■ 已修改文件
Main/System/Battle/UIComp/TotalDamageDisplayer.cs 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/TotalDamageDisplayer.cs
@@ -8,12 +8,7 @@
{
    public Image damageBackground;
    public Text textDamage;
    public Text textTotalDesc; //总伤害或者总治疗
    public UniTask task = default;
    private Coroutine hideCoroutine;
    private int hideVersion = 0;
    public Image imgTotalDesc; //总伤害或者总治疗
    private long damage = 0;
@@ -21,8 +16,7 @@
    public void SetDamage(BattleDmgInfo dmgInfo)
    {
        // 先统一停止并清理此前的隐藏协程(如果有)
        ClearHideCoroutine();
        var battleField = BattleManager.Instance.GetBattleField(dmgInfo.battleFieldGuid);
        if (!gameObject.activeInHierarchy)
            gameObject.SetActive(true);
@@ -38,7 +32,8 @@
                heal += h;
            }
            textDamage.text = BattleUtility.DisplayDamageNum(heal, BattleConst.BattleTotalRecoverType);
            textTotalDesc.text = "总治疗";
            damageBackground.sprite = UILoader.LoadSprite("Fight", "Fight1_img_83");
            imgTotalDesc.sprite = UILoader.LoadSprite("Fight", "Fight1_img_80");
        }
        else if (dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsType(DamageType.Realdamage))
        {
@@ -48,72 +43,22 @@
                damage += d;
            }
            textDamage.text = BattleUtility.DisplayDamageNum(damage, BattleConst.BattleTotalDamageType);
            textTotalDesc.text = "总伤害";
            imgTotalDesc.sprite = UILoader.LoadSprite("Fight", "Fight1_img_85");
            damageBackground.sprite = UILoader.LoadSprite("Fight", "Fight1_img_88");
        }
        textDamage.transform.DOPunchScale(Vector3.one * 0.2f, 0.2f, 1).OnComplete(() =>
        var tween = textDamage.transform.DOPunchScale(Vector3.one * 0.2f, 0.8f / battleField.speedRatio, 1).OnComplete(() =>
        {
            textDamage.transform.localScale = Vector3.one;
            if (dmgInfo.isLastHit)
            {
                gameObject.SetActive(false);
                damage = 0;
                heal = 0;
            }
        });
        if (dmgInfo.isLastHit)
        {
            // 启动新的隐藏协程,先生成新的版本号以用于协程有效性校验
            hideVersion++;
            int myVersion = hideVersion;
        battleField.battleTweenMgr.OnPlayTween(tween);
            damage = 0;
            heal = 0;
            var battleField = BattleManager.Instance.GetBattleField(dmgInfo.battleFieldGuid);
            float ms = 500f / battleField.speedRatio;
            hideCoroutine = StartCoroutine(HideAfterDelayCoroutine(ms, myVersion));
            task = default;
        }
    }
    protected void OnDisable()
    {
        ClearHideCoroutine();
        hideVersion++;
    }
    protected void OnDestroy()
    {
        ClearHideCoroutine();
        hideVersion++;
    }
    public void CancelHide()
    {
        ClearHideCoroutine();
        hideVersion++;
    }
    private void ClearHideCoroutine()
    {
        if (hideCoroutine != null)
        {
            try { StopCoroutine(hideCoroutine); } catch { }
            hideCoroutine = null;
        }
    }
    private IEnumerator HideAfterDelayCoroutine(float secondsDelay, int version = 0)
    {
        yield return new WaitForSeconds(secondsDelay);
        if (version != 0 && version != hideVersion)
            yield break;
        if (this == null) yield break;
        if (gameObject != null)
            gameObject.SetActive(false);
        if (hideCoroutine != null)
            hideCoroutine = null;
    }
}