public uint AttachEffect(int id, string mountname)
    {
        if (!DataManager.EffectTable.ContainsKey(id))
        {
            return(uint.MaxValue);
        }
        EffectTableItem effectitem   = DataManager.EffectTable[id] as EffectTableItem;
        bool            nullmount    = string.IsNullOrEmpty(mountname);
        MeshVisual      attachparent = mVisual;

        if (!nullmount)
        {
            if (mountname[0] == '%')
            {
                attachparent = mWeapon;
            }
            mountname = mountname.Substring(1);
        }

        Transform bone = attachparent.GetBoneByName(mountname);

        if (bone == null)
        {
            bone = attachparent.VisualTransform;
        }

        TransformData trans = new TransformData();

        trans.Scale     = Vector3.one * effectitem.scale;
        trans.notFollow = effectitem.notFollow;
        return(SceneManager.Instance.GetCurScene().GetParticleManager().AddParticle(effectitem.effect_name, effectitem.loop, bone, trans, effectitem.limitry));
    }
Exemple #2
0
    /// <summary>
    /// 给单位添加特效.
    /// </summary>
    public static void AddEffect2Object(BattleUnit owner, uint effectID, string bindpoint, float dir = float.NaN, bool loop = false, ClientBehaviourIdContainer cont = null)
    {
        uint runtimeID = uint.MaxValue;

        if (effectID != uint.MaxValue)
        {
            runtimeID = owner.AddEffect(effectID, bindpoint, dir);
            if (runtimeID == uint.MaxValue)
            {
                ErrorHandler.Parse(ErrorCode.ConfigError, "添加特效" + effectID + "失败");
            }
        }

        EffectTableItem eti = DataManager.EffectTable[effectID] as EffectTableItem;


        if (eti != null && eti.loop && cont != null)
        {
            if (cont.threeDEffect2Role_0 == uint.MaxValue)
            {
                cont.threeDEffect2Role_0 = runtimeID;
            }
            else
            {
                cont.threeDEffect2Role_1 = runtimeID;
            }
        }
    }
Exemple #3
0
    virtual public uint AddEffect(uint resId, string boneName, float dir = float.NaN, AttachMountType atype = AttachMountType.AttachCount)
    {
        if (this.Scene == null)
        {
            return(uint.MaxValue);
        }
        if (!DataManager.EffectTable.ContainsKey(resId))
        {
            return(uint.MaxValue);
        }

        EffectTableItem      item = DataManager.EffectTable[resId] as EffectTableItem;
        SceneParticleManager mng  = this.Scene.GetParticleManager();

        Transform trans = null;

        if (atype != AttachMountType.Wing)
        {
            if (!string.IsNullOrEmpty(boneName) && boneName.StartsWith("%"))
            {
                atype    = AttachMountType.Weapon;
                boneName = boneName.Replace("%", "");
            }
        }
        TransformData data = new TransformData();

        data.notFollow = item.notFollow;
        data.Scale     = new Vector3(item.scale, item.scale, item.scale);

        if (!float.IsNaN(dir))
        {
            data.Rot = new Vector3(0f, dir * Mathf.Rad2Deg, 0f);
        }

        if (!string.IsNullOrEmpty(item.soundId))
        {
            string[] array = item.soundId.Split('|');
            SoundManager.Instance.Play(
                int.Parse(array[UnityEngine.Random.Range(0, array.Length)]),
                item.soundDelay
                );
        }

        uint instID = mng.AddParticle(item.effect_name, item.loop, trans, data, item.limitry);
        ParticleAttachMent attach = new ParticleAttachMent();

        attach.parent     = trans == null ? null : trans.gameObject;
        attach.particleid = instID;
        attach.transform  = data;
        attach.socketname = boneName;
        attach.atype      = atype;
        attach.resid      = resId;

        AttachParticle(attach);

        return(instID);
    }
Exemple #4
0
    public static uint AddEffect2MV(MeshVisual visual, int effectid, string mount, SceneParticleManager mng)
    {
        if (!DataManager.EffectTable.ContainsKey(effectid))
        {
            return(uint.MaxValue);
        }
        if (!string.IsNullOrEmpty(mount))
        {
            mount = mount.Replace("%", "");
        }
        EffectTableItem item = DataManager.EffectTable[effectid] as EffectTableItem;

        if (item == null)
        {
            return(uint.MaxValue);
        }

        Transform trans = visual.GetBoneByName(mount);

        if (trans == null)
        {
            trans = visual.VisualTransform;
        }
        TransformData data = new TransformData();

        data.notFollow = item.notFollow;
        data.Scale     = new Vector3(item.scale, item.scale, item.scale);

        //不跟随释放者的特效,取挂点的方向
        if (item.notFollow && trans != null)
        {
            if (trans != null)
            {
                data.Rot = trans.rotation.eulerAngles;
            }
            else
            {
                data.Rot = Vector3.zero;
            }
        }

        if (!string.IsNullOrEmpty(item.soundId))
        {
            string[] array = item.soundId.Split('|');
            SoundManager.Instance.Play(
                int.Parse(array[UnityEngine.Random.Range(0, array.Length)]),
                item.soundDelay
                );
        }

        return(mng.AddParticle(item.effect_name, item.loop, trans, data, item.limitry));
    }
Exemple #5
0
    private IEnumerator generateVisual(int effectID)
    {
        if (mVisual != null)
        {
            ParticleVisual.DestroyParticle(mVisual);
            mVisual = null;
        }

        EffectTableItem res = DataManager.EffectTable[effectID] as EffectTableItem;

        if (res != null)
        {
            mVisual = ParticleVisual.CreateParticle(res.effect_name, null);
            if (mVisual == null)
            {
                yield break;
            }
            mVisual.Scale = res.scale;

            bool needWaitForSomeTime = !mVisual.IsCompleteOrDestroy;
            //在这里处理缩放数值
            while (mVisual != null && !mVisual.IsCompleteOrDestroy)
            {
                yield return(1);
            }

            if (mVisual == null || mVisual.IsDestroy)
            {
                yield break;
            }

            mVisual.Visual.SetActive(false);

            SetRotation(DefaultRotation);
            OnChangePosition(GetPosition(), GetPosition());

            //if (needWaitForSomeTime)
            //    yield return 10;

            if (mVisual != null && mVisual.Visual != null)
            {
                mVisual.Visual.SetActive(true);
            }
        }
    }
Exemple #6
0
    virtual public uint AddEffect(uint resId, Vector3 pos, float dir = float.NaN)
    {
        if (this.Scene == null)
        {
            return(uint.MaxValue);
        }
        if (!DataManager.EffectTable.ContainsKey(resId))
        {
            return(uint.MaxValue);
        }
        EffectTableItem      item = DataManager.EffectTable[resId] as EffectTableItem;
        SceneParticleManager mng  = this.Scene.GetParticleManager();

        TransformData data = new TransformData();

        data.Scale     = new Vector3(item.scale, item.scale, item.scale);
        data.notFollow = item.notFollow;
        data.Pos       = pos;
        if (!float.IsNaN(dir))
        {
            data.Rot = new Vector3(0f, dir * Mathf.Rad2Deg, 0f);
        }

        if (!string.IsNullOrEmpty(item.soundId))
        {
            string[] array = item.soundId.Split('|');
            SoundManager.Instance.Play(
                int.Parse(array[UnityEngine.Random.Range(0, array.Length)]),
                item.soundDelay
                );
        }

        uint instID = mng.PlayFx(item.effect_name, item.loop, null, data, -1, null, item.limitry);
        ParticleAttachMent attach = new ParticleAttachMent();

        attach.parent     = null;
        attach.atype      = AttachMountType.AttachCount;
        attach.particleid = instID;
        attach.resid      = resId;

        AttachParticle(attach);

        return(instID);
    }
Exemple #7
0
    /// <summary>
    /// 播放场景特效.
    /// </summary>
    public static void AddSceneEffect(uint effectID, Vector3 position, float dir = float.NaN, bool loop = false, ClientBehaviourIdContainer cont = null)
    {
        uint      runtimeID = uint.MaxValue;
        BaseScene scn       = SceneManager.Instance.GetCurScene();

        if (scn != null && effectID != uint.MaxValue)
        {
            runtimeID = scn.CreateEffect((int)effectID, Vector3.one, position, dir, null, !loop);
            if (runtimeID == uint.MaxValue)
            {
                ErrorHandler.Parse(ErrorCode.ConfigError, "添加特效" + effectID + "失败");
            }
        }

        EffectTableItem eti = DataManager.EffectTable[effectID] as EffectTableItem;

        if (eti != null && eti.loop && cont != null)
        {
            cont.threeDEffectInScene = runtimeID;
        }
    }
Exemple #8
0
    public void OnWingSuccess()
    {
        AttachMent attachment = mAttachMents[(int)AttachMountType.Wing];

        if (attachment == null)
        {
            return;
        }

        WingCommonTableItem commonRes = DataManager.WingCommonTable[mWingID] as WingCommonTableItem;

        if (commonRes == null)
        {
            return;
        }
        if (!DataManager.EffectTable.ContainsKey(commonRes.effectNomal))
        {
            return;
        }

        EffectTableItem item = DataManager.EffectTable[commonRes.effectNomal] as EffectTableItem;

        ParticleUtility.AddEffect2MV(attachment.visual as MeshVisual, commonRes.effectNomal, commonRes.modelSlot, ParticleMng);
    }
Exemple #9
0
    /// <summary>
    /// 更新挂接特效
    /// </summary>
    public void UpdateAttachParticle()
    {
        SceneParticleManager particlemng = SceneManager.Instance.GetCurScene().GetParticleManager();
        int nCount = mAttachParticles.Count;
        List <ParticleAttachMent> toDel = null;

        for (int i = 0; i < nCount; ++i)
        {
            ParticleAttachMent attach = mAttachParticles[i];
            ParticleItem       item   = particlemng.GetParticle(attach.particleid);

            if (attach == null || item == null || item.IsDead())
            {
                if (toDel == null)
                {
                    toDel = new List <ParticleAttachMent>();
                }
                toDel.Add(attach);
                continue;
            }
            //将特效更新到对应位置上
            if (attach.parent == null || item.parent == null)
            {
                PrimitiveVisual aVisual = null;
                if (attach.atype != AttachMountType.AttachCount)
                {
                    AttachMent buildinAttach = mAttachMents[(int)attach.atype];
                    if (buildinAttach != null)
                    {
                        aVisual = buildinAttach.visual;
                    }
                }
                else
                {
                    aVisual = mVisual;
                }
                if (aVisual != null && aVisual is MeshVisual && aVisual.Visual != null)
                {
                    Transform tr = null;
                    if (string.IsNullOrEmpty(attach.socketname))
                    {
                        tr = aVisual.VisualTransform;
                    }
                    else
                    {
                        tr = (aVisual as MeshVisual).GetBoneByName(attach.socketname);
                        if (tr == null)
                        {
                            tr = aVisual.VisualTransform;
                        }
                    }

                    attach.parent = tr.gameObject;


                    EffectTableItem effectitem = DataManager.EffectTable[attach.resid] as EffectTableItem;

                    //不跟随释放者的特效,取挂点的方向
                    if (effectitem.notFollow && tr != null && attach.transform != null)
                    {
                        if (tr != null)
                        {
                            attach.transform.Rot = tr.rotation.eulerAngles;
                        }
                        else
                        {
                            attach.transform.Rot = Vector3.zero;
                        }
                    }
                }

                if (attach.parent != null)
                {
                    if (item.visual != null && item.visual.Visual != null)
                    {
                        item.visual.Visual.SetActive(true);
                    }
                    DressingRoom.AttachParticleTo(item, attach.parent.transform);
                }
            }
        }

        if (toDel != null)
        {
            foreach (ParticleAttachMent at in toDel)
            {
                mAttachParticles.Remove(at);
            }
        }
    }