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; } } }
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); }
// 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); }
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); }
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; } } }