TimeSpan GetEmitterDuration(EmitterEffect emitterEffect) { if (emitterEffect.maxTotalParticles == double.PositiveInfinity) { return(System.Threading.Timeout.InfiniteTimeSpan); } return(TimeSpan.FromSeconds(emitterEffect.maxTotalParticles / emitterEffect.particlesPerSecond)); }
Effect GetEmitterEffect() { EmitterEffect emitterEffect = new EmitterEffect(); emitterEffect.bonusVelocityVector = ToVector(tbxBonusVelocity.Text); emitterEffect.brightness = ToTargetValue(tvBrightness); emitterEffect.edgeSpread = nedEdgeSpread.ValueAsDouble / 100.0; emitterEffect.effectKind = EffectKind.Emitter; emitterEffect.emitterAirDensity = nedAirDensity.ValueAsDouble; emitterEffect.emitterGravity = nedEmitterGravity.ValueAsDouble; if (rbEmitterRound.IsChecked ?? false) { emitterEffect.emitterShape = EmitterShape.Circular; } else { emitterEffect.emitterShape = EmitterShape.Rectangular; } emitterEffect.emitterWindDirection = ToVector(tbxWindDirection.Text); emitterEffect.emitterInitialVelocity = ToVector(tbxEmitterInitialVelocity.Text); emitterEffect.fadeInTime = nedParticleFadeInTime.ValueAsDouble; emitterEffect.gravityCenter = ToVector(tbxEmitterGravityCenter.Text); emitterEffect.height = nedEmitterHeight.ValueAsDouble; emitterEffect.hue = ToTargetValue(tvParticleHue); emitterEffect.lifeSpan = nedParticleLifeSpan.ValueAsDouble; emitterEffect.maxConcurrentParticles = nedMaxConcurrentParticles.ValueAsDouble; emitterEffect.maxOpacity = nedParticleMaxOpacity.ValueAsDouble / 100.0; emitterEffect.maxTotalParticles = nedMaxTotalParticles.ValueAsDouble; emitterEffect.minParticleSize = nedMinParticleSize.ValueAsDouble; emitterEffect.particleAirDensity = nedParticleAirDensity.ValueAsDouble; emitterEffect.particleGravity = nedParticleGravity.ValueAsDouble; emitterEffect.particleGravityCenter = ToVector(tbxParticleGravityCenter.Text); emitterEffect.particleInitialDirection = ToVector(tbxParticleInitialDirection.Text); emitterEffect.particleInitialVelocity = ToTargetValue(tvInitialVelocity); emitterEffect.particleMass = nedParticleMass.ValueAsDouble; emitterEffect.particleRadius = ToTargetValue(tvParticleRadius); emitterEffect.particlesPerSecond = nedParticlesPerSecond.ValueAsDouble; emitterEffect.particleWindDirection = ToVector(tbxParticleWindDirection.Text); emitterEffect.radius = nedEmitterRadius.ValueAsDouble; emitterEffect.renderOldestParticlesLast = ckbRenderOldestParticlesLast.IsChecked ?? false; emitterEffect.saturation = ToTargetValue(tvParticleSaturation); emitterEffect.target = GetTarget(); emitterEffect.timeOffsetMs = 0; emitterEffect.width = nedEmitterWidth.ValueAsDouble; return(emitterEffect); }
private void EffectBuilder_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (loadingInternally) { return; } if (!(sender is EffectBuilder effectBuilder)) { return; } EffectEntry effectEntry = effectBuilder.EffectEntry; if (effectEntry == null) { return; } SetSelectedColorByEffectType(effectEntry.EffectKind); if (effectBuilder.EffectKind == EffectKind.SoundEffect) { string soundFileName = effectEntry.SoundEffect.soundFileName; AdjustSelectedEntryDuration(GetSoundFileDuration(soundFileName), true, soundFileName); } else if (effectBuilder.EffectKind == EffectKind.Animation) { AnimationEffect animationEffect = effectEntry.AnimationEffect; TimeSpan duration = GetAnimationDuration(animationEffect.spriteName); if (animationEffect.name != "") { AdjustSelectedEntryDuration(duration, false, animationEffect.name); } else { AdjustSelectedEntryDuration(duration, false, animationEffect.spriteName); } } else if (effectBuilder.EffectKind == EffectKind.Emitter) { EmitterEffect emitterEffect = effectEntry.EmitterEffect; TimeSpan duration = GetEmitterDuration(emitterEffect); AdjustSelectedEntryDuration(duration, false, null); } OnPropertyChanged(); }
void LoadFromEmitter(EmitterEffect emitterEffect) { if (emitterEffect.emitterShape == EmitterShape.Circular) { rbEmitterRound.IsChecked = true; nedEmitterRadius.ValueAsDouble = emitterEffect.radius; } else { rbEmitterRectangular.IsChecked = true; nedEmitterWidth.ValueAsDouble = emitterEffect.width; nedEmitterHeight.ValueAsDouble = emitterEffect.height; } nedEdgeSpread.ValueAsDouble = emitterEffect.edgeSpread; tbxEmitterInitialVelocity.Text = ToVectorString(emitterEffect.emitterInitialVelocity); nedEmitterGravity.ValueAsDouble = emitterEffect.emitterGravity; tbxEmitterGravityCenter.Text = ToVectorString(emitterEffect.gravityCenter); tbxWindDirection.Text = ToVectorString(emitterEffect.emitterWindDirection); nedAirDensity.ValueAsDouble = emitterEffect.emitterAirDensity; nedParticlesPerSecond.ValueAsDouble = emitterEffect.particlesPerSecond; nedMaxConcurrentParticles.ValueAsDouble = emitterEffect.maxConcurrentParticles; nedMaxTotalParticles.ValueAsDouble = emitterEffect.maxTotalParticles; nedParticleGravity.ValueAsDouble = emitterEffect.particleGravity; tbxParticleGravityCenter.Text = ToVectorString(emitterEffect.particleGravityCenter); nedParticleMass.ValueAsDouble = emitterEffect.particleMass; SetTargetValueEdit(tvParticleRadius, emitterEffect.particleRadius); nedMinParticleSize.ValueAsDouble = emitterEffect.minParticleSize; tbxParticleInitialDirection.Text = ToVectorString(emitterEffect.particleInitialDirection); SetTargetValueEdit(tvInitialVelocity, emitterEffect.particleInitialVelocity); tbxParticleWindDirection.Text = ToVectorString(emitterEffect.particleWindDirection); nedParticleAirDensity.ValueAsDouble = emitterEffect.particleAirDensity; tbxBonusVelocity.Text = ToVectorString(emitterEffect.bonusVelocityVector); ckbRenderOldestParticlesLast.IsChecked = emitterEffect.renderOldestParticlesLast; nedParticleFadeInTime.ValueAsDouble = emitterEffect.fadeInTime; nedParticleMaxOpacity.ValueAsDouble = emitterEffect.maxOpacity * 100; nedParticleLifeSpan.ValueAsDouble = emitterEffect.lifeSpan; SetTargetValueEdit(tvParticleHue, emitterEffect.hue); SetTargetValueEdit(tvParticleSaturation, emitterEffect.saturation); SetTargetValueEdit(tvBrightness, emitterEffect.brightness); }