Ejemplo n.º 1
0
    /// <summary>
    /// 执行buff
    /// </summary>
    /// <param name="actor"></param>
    /// <param name="buff"></param>
    public void DoBuff(Actor actor, BuffBase buff)
    {
        if (buff == null)
        {
            return;
        }
        BuffData db = null;

        switch (buff.BuffType)
        {
        case BuffType.AddHp:     //增加血量
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, delegate
                {
                    // actor.ActorAttr.AddHP((int)buff.Num);
                });
            }
            break;

        case BuffType.AddMaxHp:     //增加最大血量
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, delegate
                {
                    // actor.ActorAttr.AddMaxHP((int)buff.Num);
                }, delegate {
                    // actor.ActorAttr.AddMaxHP((int)buff.Num);
                }, delegate {
                    // actor.ActorAttr.SubMaxHp((int)buff.Num);
                });
            }
            break;

        case BuffType.SubHp:     //减少血量
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, delegate
                {
                    // actor.ActorAttr.SubHp((int)buff.Num);
                });
            }
            break;

        case BuffType.SubMaxHp:     //减少最大血量
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, delegate
                {
                    // actor.ActorAttr.SubMaxHp((int)buff.Num);
                }, delegate
                {
                    // actor.ActorAttr.SubMaxHp((int)buff.Num);
                }, delegate
                {
                    // actor.ActorAttr.AddMaxHP((int)buff.Num);
                });
            }
            break;

        case BuffType.AddDamageFloated:     //浮空
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, delegate
                {
                    // if (actor.ActorState != ActorState.DamageRise)
                    //     actor.ActorAttr.DamageRiseAbility = buff.Num;
                    // actor.SetDamageRiseState();
                });
            }
            break;

        case BuffType.AddFloated:
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, delegate
                {
                    Vector3 moveDir = Vector3.up;
                    moveDir        *= buff.Num;
                    // actor.CharacterController.Move(moveDir*Time.deltaTime);
                });
            }
            break;

        case BuffType.AddSprint:
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, delegate {
                    Vector3 moveDir = actor.transform.forward;
                    moveDir        *= buff.Num;
                    moveDir.y      += -20;
                    // actor.CharacterController.Move(moveDir*Time.deltaTime);
                    //actor.Translate(Vector3.forward * buff.Num * Time.deltaTime);
                });
            }
            break;

        case BuffType.AddIsIgnoreGravity:
            if (!IsAdd(actor, buff))
            {
                db = BuffData.Create(buff, null);
                // db.OnStart = delegate { actor.ActorPhysical.IsIgnoreGravity = true; };
                db.OnFinsh = delegate
                {
                    // actor.ActorPhysical.IsIgnoreGravity = false;
                };
            }
            break;
        }
        if (db != null)
        {
        }
        // actor.ActorBuff.AddBuff(db);
    }