示例#1
0
        protected void AddNodes(int num)
        {
            int added = 0;

            for (int i = 0; i < MaxENodes; i++)
            {
                if (added == num)
                {
                    break;
                }

                EffectNode node = AvailableENodes[i];
                if (node != null)
                {
                    AddActiveNode(node);
                    added++;
                    emitter.SetEmitPosition(node);
                    float nodeLife = 0;
                    if (IsNodeLifeLoop)
                    {
                        nodeLife = -1;
                    }
                    else
                    {
                        nodeLife = Random.Range(NodeLifeMin, NodeLifeMax);
                    }
                    Vector3 oriDir = emitter.GetEmitRotation(node);
                    float   speed  = OriSpeed;
                    if (IsRandomSpeed)
                    {
                        speed = Random.Range(SpeedMin, SpeedMax);
                    }

                    Color c = Color1;

                    if (IsRandomStartColor)
                    {
                        //c = RandomColorParam.GetGradientColor(Random.Range(0f, 1f));
                        c = RandomColorGradient.Evaluate(Random.Range(0f, 1f));
                    }

                    float oriScalex = Random.Range(OriScaleXMin, OriScaleXMax);
                    float oriScaley = Random.Range(OriScaleYMin, OriScaleYMax);

                    if (UniformRandomScale)
                    {
                        oriScaley = oriScalex;
                    }

                    node.Init(oriDir.normalized, speed, nodeLife, Random.Range(OriRotationMin, OriRotationMax),
                              oriScalex, oriScaley, c, UVTopLeft, UVDimension);
                }
                else
                {
                    continue;
                }
            }
        }
示例#2
0
        public EffectNode dummyNode;//will not be added to the activenode list. so will not be rendered, just to calc uv anim.

        public void Init(EffectLayer owner)
        {
            Owner = owner;
            Vertexsegment = owner.GetVertexPool().GetRopeVertexSeg(owner.MaxENodes);

            dummyNode = new EffectNode(0, owner.ClientTransform, false, owner);
            List<Affector> afts = owner.InitAffectors(dummyNode);
            dummyNode.SetAffectorList(afts);
            dummyNode.SetRenderType(4);

            //use infinite life.
            dummyNode.Init(Vector3.zero, 0f, -1f, 0, 1f, 1f, Color.clear, Vector2.zero, Vector2.one);
        }
示例#3
0
        // for out caller use.
        public EffectNode EmitByPos(Vector3 pos)
        {
            int        added = 0;
            EffectNode ret   = null;

            for (int i = 0; i < MaxENodes; i++)
            {
                if (added == 1)
                {
                    break;
                }
                EffectNode node = AvailableENodes[i];
                if (node != null)
                {
                    AddActiveNode(node);
                    added++;

                    node.SetLocalPosition(pos);
                    float nodeLife = 0;
                    if (IsNodeLifeLoop)
                    {
                        nodeLife = -1;
                    }
                    else
                    {
                        nodeLife = Random.Range(NodeLifeMin, NodeLifeMax);
                    }
                    Vector3 oriDir = emitter.GetEmitRotation(node);


                    Color c = Color1;

                    if (IsRandomStartColor)
                    {
                        //c = RandomColorParam.GetGradientColor(Random.Range(0f, 1f));
                        c = RandomColorGradient.Evaluate(Random.Range(0f, 1f));
                    }

                    node.Init(oriDir.normalized, OriSpeed, nodeLife, Random.Range(OriRotationMin, OriRotationMax),
                              Random.Range(OriScaleXMin, OriScaleXMax), Random.Range(OriScaleYMin, OriScaleYMax), c, UVTopLeft, UVDimension);

                    ret = node;
                }
                else
                {
                    continue;
                }
            }
            return(ret);
        }
示例#4
0
        public EffectNode dummyNode;//will not be added to the activenode list. so will not be rendered, just to calc uv anim.

        public void Init(EffectLayer owner)
        {
            Owner         = owner;
            Vertexsegment = owner.GetVertexPool().GetRopeVertexSeg(owner.MaxENodes);

            dummyNode = new EffectNode(0, owner.ClientTransform, false, owner);
            List <Affector> afts = owner.InitAffectors(dummyNode);

            dummyNode.SetAffectorList(afts);
            dummyNode.SetRenderType(4);

            //use infinite life.
            dummyNode.Init(Vector3.zero, 0f, -1f, 0, 1f, 1f, Color.clear, Vector2.zero, Vector2.one);
        }
示例#5
0
        protected void AddNodes(int num)
        {
            int added = 0;

            for (int i = 0; i < MaxENodes; i++)
            {
                if (added == num)
                {
                    break;
                }
                EffectNode node = AvailableENodes[i];
                if (node != null)
                {
                    AddActiveNode(node);
                    added++;

                    //activate on birth subemitter.
                    if (UseSubEmitters && !string.IsNullOrEmpty(BirthSubEmitter))
                    {
                        XffectComponent sub = SpawnCache.GetEffect(BirthSubEmitter);
                        if (sub == null)
                        {
                            return;
                        }

                        node.SubEmitter = sub;
                        sub.Active();
                    }


                    emitter.SetEmitPosition(node);
                    float nodeLife = 0;
                    if (IsNodeLifeLoop)
                    {
                        nodeLife = -1;
                    }
                    else
                    {
                        nodeLife = Random.Range(NodeLifeMin, NodeLifeMax);
                    }
                    Vector3 oriDir = emitter.GetEmitRotation(node);
                    float   speed  = OriSpeed;
                    if (IsRandomSpeed)
                    {
                        speed = Random.Range(SpeedMin, SpeedMax);
                    }

                    Color c = Color1;

                    if (IsRandomStartColor)
                    {
                        //c = RandomColorParam.GetGradientColor(Random.Range(0f, 1f));
                        c = RandomColorGradient.Evaluate(Random.Range(0f, 1f));
                    }

                    float oriScalex = Random.Range(OriScaleXMin, OriScaleXMax);
                    float oriScaley = Random.Range(OriScaleYMin, OriScaleYMax);

                    if (UniformRandomScale)
                    {
                        oriScaley = oriScalex;
                    }

                    node.Init(oriDir.normalized, speed, nodeLife, Random.Range(OriRotationMin, OriRotationMax),
                              oriScalex, oriScaley, c, UVTopLeft, UVDimension);
                }
                else
                {
                    continue;
                }
            }
        }