public void LoadEffect(EFFECT_ID effID, InstanceCallBack callback, EffectAPI.MetaData metadata) { if (EffectAssetsData.GetData((int)effID) == null) { return; } GameObject eff = GetEffect(effID); if (eff != null) { EffectInst ei = eff.AddComponent <EffectInst> (); ei.ID = effID; callback(ei, metadata); return; } requestQue_.Enqueue(new LoadRequest(effID, callback, metadata)); }
public void PreLoadEffect(EFFECT_ID effID, InstanceCallBack callback) { if (EffectAssetsData.GetData((int)effID) == null) { if (callback != null) { callback(null, null); } return; } if (HasEffect(effID)) { if (callback != null) { callback(null, null); } } else { requestQue_.Enqueue(new LoadRequest(effID, callback, null)); } }
void PlayBrustAnim() { //如果是乱射 EffectAssetsData ead = EffectAssetsData.GetData(crt_data_._EffectID); EffectBehaviourData ebd = null; if (ead != null) { ebd = EffectBehaviourData.GetData(ead.behaviour_id_); } bool needTimerCallback = false; if (ebd != null && !isMelee_ && ebd.cast_type_ == EffectBehaviourData.CASTTYPE.OneByOne) { //没有目标了 if (aimsQue_.Count == 0) { return; } } else { needTimerCallback = true; //Brust(); } if (!isMelee_) { caster_.ControlEntity.SetAnimationParam(caster_.castAnim_, AnimatorParamType.APT_Trigger); if (needTimerCallback) { GlobalInstanceFunction.Instance.Invoke(() => { Brust(); }, 0.5f); } } else { Brust(); } }
void AfterCastEffect(int iVal = 0) { //如果是乱射 则设置完成回调代理 EffectAssetsData ead = EffectAssetsData.GetData(crt_data_._EffectID); EffectBehaviourData ebd = null; if (ead != null) { ebd = EffectBehaviourData.GetData(ead.behaviour_id_); } //注意!!! 只有乱射才是onebyone if (ebd != null && !isMelee_ && ebd.cast_type_ == EffectBehaviourData.CASTTYPE.OneByOne) { //设置远程类技能的触发点回调 caster_.ControlEntity.SetSingBrustCallBack(Brust); //设置远程类技能的完成回调 caster_.ControlEntity.SetSingCallBack(PlayBrustAnim); } //else //{ // caster_.ControlEntity.SetSingCallBack(Brust); //} PlayBrustAnim(); }
public static void Play(EFFECT_ID id, GameObject caster, GameObject[] aims = null, TakeDmgCallBackPack takedmagepack = null, EffectInst.FinishCallBack finishcallback = null, EffectInstanceCallBack effectinstancecallback = null, ParamData data = null) { EffectAssetsData ead = EffectAssetsData.GetData((int)id); if (ead == null) { return; } EffectBehaviourData ebd = EffectBehaviourData.GetData(ead.behaviour_id_); Vector3 vcaster = new Vector3(0f, 0f, 0f); Vector3[] vaims = null; if (null != aims) { vaims = new Vector3[aims.Length]; } if (ebd.effect_positionType == EffectBehaviourData.EffectPositionType.Up) { if (caster != null) { vcaster = new Vector3(caster.collider.bounds.center.x, caster.collider.bounds.center.y + caster.collider.bounds.size.y / 2, caster.collider.bounds.center.z); } if (aims != null) { for (int iCount = 0; iCount < aims.Length; ++iCount) { vaims[iCount] = new Vector3(aims[iCount].collider.bounds.center.x, aims[iCount].collider.bounds.center.y + aims[iCount].collider.bounds.size.y / 2, aims[iCount].collider.bounds.center.z); } } } else if (ebd.effect_positionType == EffectBehaviourData.EffectPositionType.Center) { if (caster != null) { vcaster = caster.collider.bounds.center; } if (aims != null) { for (int iCount = 0; iCount < aims.Length; ++iCount) { vaims[iCount] = aims[iCount].collider.bounds.center; } } } else if (ebd.effect_positionType == EffectBehaviourData.EffectPositionType.Down) { if (caster != null) { vcaster = new Vector3(caster.collider.bounds.center.x, caster.collider.bounds.center.y - caster.collider.bounds.size.y / 2, caster.collider.bounds.center.z); } if (aims != null) { for (int iCount = 0; iCount < aims.Length; ++iCount) { vaims[iCount] = new Vector3(aims[iCount].collider.bounds.center.x, aims[iCount].collider.bounds.center.y - aims[iCount].collider.bounds.size.y / 2, aims[iCount].collider.bounds.center.z); } } } else { } Play(id, vcaster, vaims, takedmagepack, finishcallback, effectinstancecallback, data); }
public static void Play(EFFECT_ID id, Vector3 caster, Vector3[] aims = null, TakeDmgCallBackPack takedmagepack = null, EffectInst.FinishCallBack finishcallback = null, EffectInstanceCallBack effectinstancecallback = null, ParamData data = null, Transform[] parents = null) { EffectAssetsData ead = EffectAssetsData.GetData((int)id); if (ead == null) { ClientLog.Instance.LogError("could not find the effect asset by id: " + id + " caster position is " + caster); return; } int SoundId = EffectAssetsData.GetData((int)id).SoundID; SoundTools.PlaySound((SOUND_ID)SoundId); ////////////////////////////////////////////////////////////////////////// // aims 有可能是null // 但在进场景那一刻 有可能会出现 需要有目标的特效没有目标 可能会导致卡死 // 考虑是否加一个完成回调 EffectBehaviourData ebd = EffectBehaviourData.GetData(ead.behaviour_id_); if (ebd != null) { EffectBehaviourData.CASTTYPE castType = ebd.cast_type_; int maxCount = (aims == null? 0: aims.Length); // int maxCount = aims.Length; if (castType.Equals(EffectBehaviourData.CASTTYPE.SameTime) || castType.Equals(EffectBehaviourData.CASTTYPE.OneByOne)) { if (aims != null) { for (int i = 0; i < maxCount; ++i) { EffectMgr.Instance.LoadEffect( id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null? null: takedmagepack.changeVal, i == aims.Length - 1? finishcallback: null, caster, new Vector3[] { aims[i] }, data == null? i: data.iParam, effectinstancecallback, data == null? new ParamData(i): data, parents)); } } else { EffectMgr.Instance.LoadEffect(id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null ? null : takedmagepack.changeVal, finishcallback, caster, aims, 0, effectinstancecallback, data, parents)); } } else if (castType.Equals(EffectBehaviourData.CASTTYPE.OnlyOne)) { EffectMgr.Instance.LoadEffect(id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null ? null : takedmagepack.changeVal, finishcallback, caster, aims, 0, effectinstancecallback, data, parents)); } } else { EffectMgr.Instance.LoadEffect(id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null ? null : takedmagepack.changeVal, finishcallback, caster, aims, 0, effectinstancecallback, data, parents)); } }