Ejemplo n.º 1
0
 public static void AddBuffs(RoleData roleData, ActorBuff actorBuff, List <Buff> buffs)
 {
     for (int i = 0; i < buffs.Count; i++)
     {
         actorBuff.AddBuff(roleData, buffs[i]);
     }
 }
    /// <summary>
    /// 玩家是否已经有此buff
    /// </summary>
    /// <param name="mActor"></param>
    /// <param name="buffBase"></param>
    /// <returns></returns>
    private bool IsAdd(Actor mActor, BuffBase buffBase)
    {
        ActorBuff oldBuff = mActor.mActorBuffManager.GetBuffByBaseID(buffBase.BuffID);

        if (oldBuff != null)
        {
            Debug.Log("IsAdd===>BuffID:" + buffBase.BuffID + ",叠加类型:" + buffBase.buffOverlapType);
            switch (buffBase.buffOverlapType)
            {
            case BuffOverlapType.ResetTime:
                oldBuff.ResetTime();
                break;

            case BuffOverlapType.AddLayer:
                oldBuff.AddLayer();
                break;

            case BuffOverlapType.AddTime:
                oldBuff.ChangeTotalFrame(oldBuff.GetTotalFrame + buffBase.TotalFrame);
                break;

            default:
                break;
            }
            return(true);
        }
        return(false);
    }
Ejemplo n.º 3
0
 /// <summary>
 /// 移除buff
 /// </summary>
 /// <param name="buffData"></param>
 public void RemoveBuff(ActorBuff buffData)
 {
     if (_BuffList.Contains(buffData))
     {
         buffData.CloseBuff();
     }
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 添加buff
 /// </summary>
 /// <param name="buffData"></param>
 public void AddBuff(ActorBuff buffData)
 {
     if (!_BuffList.Contains(buffData))
     {
         _BuffList.Add(buffData);
         buffData.StartBuff();
     }
 }
Ejemplo n.º 5
0
 public virtual void Awake()
 {
     cc        = this.gameObject.GetComponent <CharacterController>();
     actorBuff = this.gameObject.AddComponent <ActorBuff>();
     roleData  = new RoleData(RoleConfig.GetRoleDataById(this.roleId));
     roleData.SetCtrl(this);
     anim = GetComponent <Animator>();
 }
Ejemplo n.º 6
0
    /// <summary>
    /// 移除buff
    /// </summary>
    /// <param name="buffDataID"></param>
    public void RemoveBuff(int buffDataID)
    {
        ActorBuff bd = GetBuff(buffDataID);

        if (bd != null)
        {
            bd.CloseBuff();
        }
    }
Ejemplo n.º 7
0
    /// <summary>
    /// 创建BuffData
    /// </summary>
    /// <returns></returns>
    public static ActorBuff Create()
    {
        if (poolCache.Count < 1)
        {
            return(new ActorBuff());
        }
        ActorBuff buffData = poolCache.Pop();

        return(buffData);
    }
Ejemplo n.º 8
0
    public void StartBuff(RoleData roleData, ActorBuff actorBuff)
    {
        this.roleData  = roleData;
        this.actorBuff = actorBuff;

        if (buffType.Equals(BuffType.AddHp))
        {
            roleData.hp += amount;
            EffectPerform.Instance.ShowDamageUI(amount, this.actorBuff.transform);
        }
        else if (buffType.Equals(BuffType.AddSpeed))
        {
            roleData.speed += amount;
        }
        else if (buffType.Equals(BuffType.AddAtkPower))
        {
            roleData.atkPower += amount;
        }
        else if (buffType.Equals(BuffType.AddDefPower))
        {
            roleData.defPower += amount;
        }

        if (buffType.Equals(BuffType.SubHp))
        {
            roleData.hp -= amount;
            EffectPerform.Instance.ShowDamageUI(amount, this.actorBuff.transform);

            if (roleData.hp <= 0)
            {
                roleData.ctrl.Die();
            }
        }
        else if (buffType.Equals(BuffType.SubSpeed))
        {
            roleData.speed -= amount;
            if (roleData.speed <= 0)
            {
                roleData.speed = 0;
            }
        }
        else if (buffType.Equals(BuffType.SubAtkPower))
        {
            roleData.atkPower -= amount;
        }
        else if (buffType.Equals(BuffType.SubDefPower))
        {
            roleData.defPower -= amount;
        }

        if (this.buffSettleType.Equals(BuffSettleType.Permernant))
        {
            actorBuff.RemoveBuff(this);
        }
    }
Ejemplo n.º 9
0
    /// <summary>
    /// 弹出
    /// </summary>
    /// <returns></returns>
    private static ActorBuff Pop()
    {
        if (poolCache.Count < 1)
        {
            ActorBuff bd = new ActorBuff();
            return(bd);
        }
        ActorBuff buffData = poolCache.Pop();

        return(buffData);
    }
Ejemplo n.º 10
0
    public static ActorBuff Create(BuffBase buffBase, Action onCallBack, Action <ActorBuff> addLayerAcion, Action <ActorBuff> subLayerAction)
    {
        ActorBuff db = Pop();

        db.buffRepeatType    = buffBase.buffRepeatType;
        db.BuffID            = buffBase.BuffID;
        db.CallIntervalFrame = buffBase.CallIntervalFrame;
        db.TotalFrame        = buffBase.TotalFrame;
        db.buffOverlapType   = buffBase.buffOverlapType;
        db.buffShutDownType  = buffBase.buffShutDownType;
        db.buffEffectType    = buffBase.buffEffectType;
        db.MaxLimit          = buffBase.MaxLimit;
        db.OnCallBack        = onCallBack;
        db.OnAddLayer        = addLayerAcion;
        db.OnSubLayer        = subLayerAction;
        db._Limit            = 1;
        return(db);
    }
Ejemplo n.º 11
0
    private void DoBuff(Collider[] cols)
    {
        if (this.buffId.Count == 0)
        {
            return;
        }

        List <Buff> buffs = new List <Buff>();

        for (int i = 0; i < buffId.Count; i++)
        {
            if (buffId[i] != 0)
            {
                buffs.Add(BuffManager.GetBuffById(this.buffId[i]));
            }
        }

        for (int i = 0; i < cols.Length; i++)
        {
            ActorBuff actorBuff = cols[i].GetComponent <ActorBuff>();
            BuffManager.AddBuffs(cols[i].GetComponent <RoleBaseCtrl>().RoleData, actorBuff, buffs);
        }
    }
    /// <summary>
    /// 执行buff
    /// </summary>
    /// <param name="mActor"></param>
    /// <param name="buffBase"></param>
    public void DoBuff(Actor mActor, BuffBase buffBase)
    {
        if (buffBase == null)
        {
            return;
        }
        ActorBuff db = null;

        Debug.Log("DoBuff===>BuffID:" + buffBase.BuffID + ",buffEffectType:" + buffBase.buffEffectType);
        switch (buffBase.buffEffectType)
        {
        case BuffEffectType.AddHp:     //增加血量
            if (!IsAdd(mActor, buffBase))
            {
                db = ActorBuff.Create(buffBase, delegate
                {
                    mActor.mActorAttr.Hp += buffBase.Num;
                });
            }
            break;

        case BuffEffectType.AddMaxHp:     //增加最大血量
            if (!IsAdd(mActor, buffBase))
            {
                db = ActorBuff.Create(buffBase, delegate
                {
                    mActor.mActorAttr.HpMax += buffBase.Num;
                }, delegate {
                    mActor.mActorAttr.HpMax += buffBase.Num;
                }, delegate {
                    mActor.mActorAttr.HpMax -= buffBase.Num;
                });
            }
            break;

        case BuffEffectType.SubHp:     //减少血量
            if (!IsAdd(mActor, buffBase))
            {
                db = ActorBuff.Create(buffBase, delegate
                {
                    mActor.mActorAttr.Hp -= buffBase.Num;
                });
            }
            break;

        case BuffEffectType.SubMaxHp:     //减少最大血量
            if (!IsAdd(mActor, buffBase))
            {
                db = ActorBuff.Create(buffBase, delegate
                {
                    mActor.mActorAttr.HpMax -= buffBase.Num;
                }, delegate
                {
                    mActor.mActorAttr.HpMax -= buffBase.Num;
                }, delegate
                {
                    mActor.mActorAttr.HpMax += buffBase.Num;
                });
            }
            break;

        case BuffEffectType.AddSpeed:
            if (!IsAdd(mActor, buffBase))
            {
                db         = ActorBuff.Create(buffBase, null);
                db.TempNum = mActor.Speed * buffBase.Num / 100;//增减数值是百分比
                db.OnStart = delegate
                {
                    Debug.Log("AddSpeed===>OnStart>Speed:" + mActor.Speed + "==>TempNum:" + db.TempNum);
                    mActor.Speed += db.TempNum;
                    if (buffBase.Effect != null)
                    {
                        db.EffectObject = _AssetManager.GetGameObject("prefab/effect/" + buffBase.Effect + "/" + buffBase.Effect + "_prefab");
                        //Effect.name = "Effect_" + buffBase.BuffID;
                        db.EffectObject.transform.position = mActor.AllTSTransform.position.ToVector();
                        db.EffectObject.transform.SetParent(mActor.ActorObj.transform);
                    }
                };
                db.OnFinsh = delegate
                {
                    Debug.Log("AddSpeed===>OnFinsh>Speed:" + mActor.Speed + "==>TempNum:" + db.TempNum);
                    mActor.Speed -= db.TempNum;
                    //GameObject Effect = mActor.ActorObj.transform.FindChild("Effect_" + buffBase.BuffID).gameObject;
                    Destroy(db.EffectObject);
                    _AssetManager.UnLoadUnUseAsset("prefab/effect/" + buffBase.Effect + "/" + buffBase.Effect + "_prefab");
                };
            }
            break;

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

        case BuffEffectType.AddFloated:
            if (!IsAdd(mActor, buffBase))
            {
                db = ActorBuff.Create(buffBase, delegate
                {
                    //Vector3 moveDir = Vector3.up;
                    //moveDir *= buff.Num;
                    //actor.CharacterController.Move(moveDir*Time.deltaTime);
                });
            }
            break;
        }
        if (db != null)
        {
            mActor.mActorBuffManager.AddBuff(db);
        }
    }
Ejemplo n.º 13
0
 /// <summary>
 /// 压入
 /// </summary>
 /// <param name="buffData"></param>
 private static void Push(ActorBuff buffData)
 {
     poolCache.Push(buffData);
 }
Ejemplo n.º 14
0
 public static void AddBuff(RoleData roleData, ActorBuff actorBuff, Buff buff)
 {
     actorBuff.AddBuff(roleData, buff);
 }