Esempio n. 1
0
    protected override void OnShow(object userData)
    {
        base.OnShow(userData);

        flowTextData = userData as FlowTextData;
        if (flowTextData == null)
        {
            Log.Error("FlowHPText data is invalid.");
            return;
        }

        // GameEntry.Entity.AttachEntity (this.Id, flowTextData.OwnerId);

        flowText.text  = flowTextData.Text;
        flowText.color = flowTextData.Color.ToColor();

        hideTime = Time.time + 1;

        CachedTransform.localScale = Vector3.one / 2;

        Sequence seq = DOTween.Sequence();

        seq.Append(CachedTransform.DOScale(1, 0.4f))
        .Append(CachedTransform.DOBlendableLocalMoveBy(new Vector3(0.3f, 0.7f, 0), 0.3f))
        .OnComplete(() => { GameEntry.Entity.HideEntity(this.Id); });
    }
Esempio n. 2
0
    /// <summary>
    /// 真正执行伤害/加血逻辑
    /// </summary>
    /// <param name="damageHP">伤害值,可以正负,如果小于1,则按百分比执行</param>
    /// <param name="effectFollowMaxHP">是否以最大生命值为准</param>
    public void OnDamage(float damageHP, bool effectFollowMaxHP = false)
    {
        int changeHP = 0;

        // 按百分比改变当前血量
        if ((damageHP > 0 && damageHP < 1) || (damageHP < 0 && damageHP > -1))
        {
            if (effectFollowMaxHP)
            {
                changeHP = (int)(fightEntityData.MaxHP * damageHP);
            }
            else
            {
                changeHP = (int)(fightEntityData.HP * damageHP);
            }
        }
        else
        {
            changeHP = (int)damageHP;
        }

        bool forceAdd = false;

        // 伤害
        if (changeHP > 0)
        {
            changeHP -= fightEntityData.Def;

            if (changeHP < 0)
            {
                changeHP = 1;
            }

            if (changeHP > 0)
            {
                fightEntityData.HP -= changeHP;

                OnHurt();
            }
        }
        // 加血
        else if (changeHP < 0)
        {
            forceAdd = true;

            if (fightEntityData.HP - changeHP > fightEntityData.MaxHP)
            {
                changeHP = fightEntityData.HP - fightEntityData.MaxHP;
            }

            fightEntityData.HP += -changeHP;

            OnCure();
        }

        FlowTextData flowTextData = new FlowTextData(EntityExtension.GenerateSerialId(), this.Id, -changeHP, forceAdd);

        flowTextData.Position = this.CachedTransform.position + new Vector3(0.4f, 1, 0);
        flowTextData.Rotation = Camera.main.transform.rotation;

        EntityExtension.ShowFlowText(
            typeof(FlowText),
            "FlowTextGroup", flowTextData
            );

        // 更新血量条
        RefreshHPBar();

        if (fightEntityData.HP <= 0)
        {
            OnDead();
        }
    }