// Parameter Constructor. public T2DParticleEmitter(T2DParticleEffect effect, T2DParticleEmitterData emitterData) : this() { // Set Parent Effect. _parentEffect = effect; // Set Current Emitter Data. CurrentEmitterData = emitterData; }
public override void CopyTo(TorqueObject obj) { base.CopyTo(obj); T2DParticleEffect obj2 = (T2DParticleEffect)(obj); // Create an actual clone of the emitters to allow runtime // changes to each single copy without affecting the others. obj2.CurrentEffectData = null; T2DParticleEffectData _ed = new T2DParticleEffectData(); _ed.LifeMode = this.CurrentEffectData.LifeMode; _ed.Lifetime = this.CurrentEffectData.Lifetime; // Fetch Emitter Data List. foreach (T2DParticleEmitterData _p in this.CurrentEffectData.EmitterDataList) { T2DParticleEmitterData _t = new T2DParticleEmitterData(_p.Name); _t.AttachPositionToEmitter = _p.AttachPositionToEmitter; _t.AttachRotationToEmitter = _p.AttachRotationToEmitter; _t.BlueChannelLife = _p.BlueChannelLife; _t.EmissionAngleBase = _p.EmissionAngleBase; _t.EmissionAngleVariation = _p.EmissionAngleVariation; _t.EmissionArcBase = _p.EmissionArcBase; _t.EmissionArcVariation = _p.EmissionArcVariation; _t.EmissionForceBase = _p.EmissionForceBase; _t.EmissionForceVariation = _p.EmissionForceVariation; _t.EmitterArea = _p.EmitterArea; _t.FirstInFrontOrder = _p.FirstInFrontOrder; _t.FixedAreaAspect = _p.FixedAreaAspect; _t.FixedForceAngle = _p.FixedForceAngle; _t.FixedForceBase = _p.FixedForceBase; _t.FixedForceLife = _p.FixedForceLife; _t.FixedForceVariation = _p.FixedForceVariation; _t.FixedParticleAspect = _p.FixedParticleAspect; _t.GreenChannelLife = _p.GreenChannelLife; _t.Hidden = _p.Hidden; _t.InitialAge = _p.InitialAge; _t.LinkEmissionRotation = _p.LinkEmissionRotation; _t.Material = _p.Material; _t.MaterialRegionIndex = _p.MaterialRegionIndex; _t.OrientationAngleOffset = _p.OrientationAngleOffset; _t.OrientationRandomArc = _p.OrientationRandomArc; _t.ParticleLifeBase = _p.ParticleLifeBase; _t.ParticleLifeVariation = _p.ParticleLifeVariation; _t.ParticleOrientation = _p.ParticleOrientation; _t.ParticlePivotPoint = _p.ParticlePivotPoint; _t.QuantityBase = _p.QuantityBase; _t.QuantityVariation = _p.QuantityVariation; _t.RandomMotionBase = _p.RandomMotionBase; _t.RandomMotionLife = _p.RandomMotionLife; _t.RandomMotionVariation = _p.RandomMotionVariation; _t.RedChannelLife = _p.RedChannelLife; _t.SingleParticle = _p.SingleParticle; _t.SizeXBase = _p.SizeXBase; _t.SizeXLife = _p.SizeXLife; _t.SizeXVariation = _p.SizeXVariation; _t.SizeYBase = _p.SizeYBase; _t.SizeYLife = _p.SizeYLife; _t.SizeYVariation = _p.SizeYVariation; _t.SpeedBase = _p.SpeedBase; _t.SpeedLife = _p.SpeedLife; _t.SpeedVariation = _p.SpeedVariation; _t.SpinBase = _p.SpinBase; _t.SpinLife = _p.SpinLife; _t.SpinVariation = _p.SpinVariation; _t.TextureCoords = _p.TextureCoords; _t.UseEffectEmission = _p.UseEffectEmission; _t.VisibilityLife = _p.VisibilityLife; _ed.EmitterDataList.Add(_t); } obj2.CurrentEffectData = _ed; obj2._playOnLoad = _playOnLoad; }
/// <summary> /// Remove an emitter description from the effect. /// </summary> /// <param name="emitterData"></param> public void RemoveEmitter(T2DParticleEmitterData emitterData) { // Remove emitter-data from list. _emitterDataList.Remove(emitterData); // Emitter List Changed. EmitterListChanged(); }
/// <summary> /// Change the order of an emitter in the list. Returns new emitter index. /// </summary> /// <param name="emitterData">Emitter to move.</param> /// <param name="orderChange">Move operation.</param> /// <returns>New emitter index.</returns> public int MoveEmitterData(T2DParticleEmitterData emitterData, EmitterDataOrderChange orderChange) { // Sanity! Assert.Fatal(ContainsEmitterData(emitterData), "Cannot change emitter-data sequence; emitter not within effect!"); // Find Emitter-Data Index. int emitterDataIndex = _emitterDataList.IndexOf(emitterData); // Sanity! Assert.Fatal(emitterDataIndex != -1, "Emitter-Data is not in the list; how can this happen?"); // Handle emitter-data order change. switch (orderChange) { // FIRST in list. case EmitterDataOrderChange.First: { // Already first? if (emitterDataIndex == 0) { // Yes, so finish! return emitterDataIndex; } // Remove from emitter-data list. _emitterDataList.Remove(emitterData); // Insert emitter-data as FIRST. _emitterDataList.Insert(0, emitterData); // Emitter List Changed. EmitterListChanged(); // Return new emitter-data index. return 0; }; // LAST in list. case EmitterDataOrderChange.Last: { // Already last? if (emitterDataIndex == _emitterDataList.Count - 1) { // Yes, so finish! return emitterDataIndex; } // Remove from emitter-data list. _emitterDataList.Remove(emitterData); // Add emitter-data as LAST. _emitterDataList.Add(emitterData); // Emitter List Changed. EmitterListChanged(); // Return new emitter-data index. return emitterDataIndex; }; // NEXT in list. case EmitterDataOrderChange.Next: { // Already last? if (emitterDataIndex == _emitterDataList.Count - 1) { // Yes, so finish! return emitterDataIndex; } // Remove from emitter-data list. _emitterDataList.Remove(emitterData); // NEXT emitter-data index. emitterDataIndex++; // Insert as NEXT. _emitterDataList.Insert(emitterDataIndex, emitterData); // Emitter List Changed. EmitterListChanged(); // Return new emitter-data index. return emitterDataIndex; }; // PREVIOUS in list. case EmitterDataOrderChange.Previous: { // Already first? if (emitterDataIndex == 0) { // Yes, so finish! return emitterDataIndex; } // Remove from emitter-data list. _emitterDataList.Remove(emitterData); // PREVIOUS emitter-data index. emitterDataIndex--; // Insert as PREVIOUS. _emitterDataList.Insert(emitterDataIndex, emitterData); // Emitter List Changed. EmitterListChanged(); // Return new emitter-data index. return emitterDataIndex; }; } // No change so return emitter-data index. return emitterDataIndex; }
/// <summary> /// Test to see if effect data contains the given emitter data. /// </summary> /// <param name="emitterData">Emitter data to test.</param> /// <returns>True if emitter data is in the effect.</returns> public bool ContainsEmitterData(T2DParticleEmitterData emitterData) { return _emitterDataList.Contains(emitterData); }
/// <summary> /// Add a new emitter description. /// </summary> /// <param name="emitterData">Emitter to add.</param> public void AddEmitterData(T2DParticleEmitterData emitterData) { // Add emitter-data to list. _emitterDataList.Add(emitterData); // Emitter List Changed. EmitterListChanged(); }
public void Dispose() { ClearParticles(); _emitterData = null; _parentEffect = null; }