Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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));
        }
    }