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); }
/// <summary> /// 移除buff /// </summary> /// <param name="buffData"></param> public void RemoveBuff(ActorBuff buffData) { if (_BuffList.Contains(buffData)) { buffData.CloseBuff(); } }
/// <summary> /// 添加buff /// </summary> /// <param name="buffData"></param> public void AddBuff(ActorBuff buffData) { if (!_BuffList.Contains(buffData)) { _BuffList.Add(buffData); buffData.StartBuff(); } }
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>(); }
/// <summary> /// 移除buff /// </summary> /// <param name="buffDataID"></param> public void RemoveBuff(int buffDataID) { ActorBuff bd = GetBuff(buffDataID); if (bd != null) { bd.CloseBuff(); } }
/// <summary> /// 创建BuffData /// </summary> /// <returns></returns> public static ActorBuff Create() { if (poolCache.Count < 1) { return(new ActorBuff()); } ActorBuff buffData = poolCache.Pop(); return(buffData); }
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); } }
/// <summary> /// 弹出 /// </summary> /// <returns></returns> private static ActorBuff Pop() { if (poolCache.Count < 1) { ActorBuff bd = new ActorBuff(); return(bd); } ActorBuff buffData = poolCache.Pop(); return(buffData); }
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); }
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); } }
/// <summary> /// 压入 /// </summary> /// <param name="buffData"></param> private static void Push(ActorBuff buffData) { poolCache.Push(buffData); }
public static void AddBuff(RoleData roleData, ActorBuff actorBuff, Buff buff) { actorBuff.AddBuff(roleData, buff); }