/// <summary> /// Initialize the component. /// </summary> internal override void Initialize(GameObject owner) { base.Initialize(owner); // Set default values. SoftParticles = true; FadeDistance = 0.01f; DurationRandomness = 1; Gravity = new Vector3(-20, -5, 0); EndVelocity = 0.75f; MinimumColor = new Color(255, 255, 255, 255); MaximumColor = new Color(255, 255, 255, 255); RotateSpeed = new Vector2(-1, 1); StartSize = new Vector2(5, 10); EndSize = new Vector2(50, 200); BlendState = BlendState.Additive; TilesX = 1; TilesY = 1; AnimationRepetition = 1; // Particle Emitter ((GameObject3D)Owner).ParticleEmitterChanged += OnParticleEmitterChanged; if (((GameObject3D)Owner).ParticleEmitter != null) { ((GameObject3D)Owner).ParticleEmitter.ParticleSystemChanged += OnParticleSystemChanged; ((GameObject3D)Owner).ParticleEmitter.DurationChanged += OnDurationChanged; cachedParticleSystem = ((GameObject3D)Owner).ParticleEmitter.ParticleSystem; cachedDuration = ((GameObject3D)Owner).ParticleEmitter.Duration; } } // Initialize
} // Uninitialize #endregion #region On Particle Emitter Changed /// <summary> /// On model filter's model changed. /// </summary> private void OnParticleEmitterChanged(object sender, Component oldComponent, Component newComponent) { // Remove event association. if (oldComponent != null) { ((ParticleEmitter)oldComponent).ParticleSystemChanged -= OnParticleSystemChanged; ((ParticleEmitter)oldComponent).DurationChanged -= OnDurationChanged; } ((GameObject3D)Owner).ParticleEmitter.ParticleSystemChanged += OnParticleSystemChanged; ((GameObject3D)Owner).ParticleEmitter.DurationChanged += OnDurationChanged; cachedParticleSystem = ((ParticleEmitter)newComponent).ParticleSystem; cachedDuration = ((ParticleEmitter)newComponent).Duration; } // OnParticleEmitterChanged
} // Initialize #endregion #region Uninitialize /// <summary> /// Uninitialize the component. /// Is important to remove event associations and any other reference. /// </summary> internal override void Uninitialize() { Texture = null; cachedParticleSystem = null; ((GameObject3D)Owner).ParticleEmitterChanged -= OnParticleEmitterChanged; if (((GameObject3D)Owner).ParticleEmitter != null) { ((GameObject3D)Owner).ParticleEmitter.ParticleSystemChanged -= OnParticleSystemChanged; ((GameObject3D)Owner).ParticleEmitter.DurationChanged -= OnDurationChanged; } // Call this last because the owner information is needed. base.Uninitialize(); } // Uninitialize
} // OnParticleEmitterChanged #endregion #region On Particle System Changed /// <summary> /// On particle emitter's particle system changed. /// </summary> private void OnParticleSystemChanged(object sender, ParticleSystem particleSystem) { cachedParticleSystem = particleSystem; } // OnParticleSystemChanged