public SLaserBurnParticleSystem(int particleCapacity) : base(particleCapacity) { this.simulationStep = 0.05f; // global flame/smoke effector to dim smoke particles of already-released laser hit spots _globalSmokeDimmerEffector = new SSColorKeyframesEffector(); _globalSmokeDimmerEffector.effectorMask = 1; _globalSmokeDimmerEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _globalSmokeDimmerEffector.particleLifetime = 0f; _globalSmokeDimmerEffector.colorMask = Color4.LightGray; _globalSmokeDimmerEffector.keyframes.Clear(); _globalSmokeDimmerEffector.keyframes.Add(0f, new Color4(1f, 1f, 1f, 1f)); _globalSmokeDimmerEffector.keyframes.Add(0.4f, new Color4(0f, 0f, 0f, 1f)); _globalSmokeDimmerEffector.keyframes.Add(1f, new Color4(0f, 0f, 0f, 0f)); addEffector(_globalSmokeDimmerEffector); _globalSmokeScaleEffector = new SSMasterScaleKeyframesEffector(); _globalSmokeScaleEffector.effectorMask = 0x1; // all smoke _globalSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.And; // all smoke _globalSmokeScaleEffector.keyframes.Clear(); _globalSmokeScaleEffector.keyframes.Add(0f, 0.1f); _globalSmokeScaleEffector.keyframes.Add(0.15f, 1f); _globalSmokeScaleEffector.keyframes.Add(1f, 1.2f); addEffector(_globalSmokeScaleEffector); }
protected void configureFlameSmoke() { if (_doFlameSmoke) { if (_flameSmokeEmitter == null) { _flameSmokeEmitter = new SSRadialEmitter(); _flamesSmokeColorEffector = new SSColorKeyframesEffector(); _flameSmokeScaleEffector = new SSMasterScaleKeyframesEffector(); addEmitter(_flameSmokeEmitter); addEffector(_flamesSmokeColorEffector); addEffector(_flameSmokeScaleEffector); _flameSmokeEmitter.effectorMask = _flameSmokeScaleEffector.effectorMask = _flamesSmokeColorEffector.effectorMask = (ushort)ComponentMask.FlameSmoke; } _flameSmokeEmitter.spriteRectangles = _flameSmokeSprites; _flameSmokeEmitter.particlesPerEmission = 2; _flameSmokeEmitter.emissionInterval = 0.03f * _flameSmokeDuration; _flameSmokeEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _flameSmokeEmitter.life = _flameSmokeDuration; _flameSmokeEmitter.orientationMin = new Vector3(0f, 0f, 0f); _flameSmokeEmitter.orientationMax = new Vector3(0f, 0f, 2f * (float)Math.PI); _flameSmokeEmitter.billboardXY = true; _flameSmokeEmitter.angularVelocityMin = new Vector3(0f, 0f, -0.5f); _flameSmokeEmitter.angularVelocityMax = new Vector3(0f, 0f, +0.5f); _flameSmokeEmitter.radiusOffsetMin = 0f; _flameSmokeEmitter.radiusOffsetMax = 0.5f; _flamesSmokeColorEffector.colorMask = _flameColor; _flamesSmokeColorEffector.particleLifetime = _flameSmokeDuration; _flamesSmokeColorEffector.keyframes.Clear(); _flamesSmokeColorEffector.keyframes.Add(0f, new Color4(1f, 1f, 1f, 1f)); _flamesSmokeColorEffector.keyframes.Add(0.4f, new Color4(0f, 0f, 0f, 0.5f)); _flamesSmokeColorEffector.keyframes.Add(1f, new Color4(0f, 0f, 0f, 0f)); _flameSmokeScaleEffector.particleLifetime = _flameSmokeDuration; _flameSmokeScaleEffector.keyframes.Clear(); _flameSmokeScaleEffector.keyframes.Add(0f, 0.1f); _flameSmokeScaleEffector.keyframes.Add(0.25f, 1f); _flameSmokeScaleEffector.keyframes.Add(1f, 1.2f); } else if (_flameSmokeEmitter != null) { removeEmitter(_flameSmokeEmitter); removeEffector(_flamesSmokeColorEffector); removeEffector(_flameSmokeScaleEffector); _flameSmokeEmitter = null; _flamesSmokeColorEffector = null; _flameSmokeScaleEffector = null; } }
protected void configureRoundSparks() { if (_doRoundSparks) { _roundSparksEmitter = new SSRadialEmitter(); _roundSparksColorEffector = new SSColorKeyframesEffector(); _roundSparksScaleEffector = new SSMasterScaleKeyframesEffector(); addEmitter(_roundSparksEmitter); addEffector(_roundSparksColorEffector); addEffector(_roundSparksScaleEffector); _roundSparksEmitter.effectorMask = _roundSparksScaleEffector.effectorMask = _roundSparksColorEffector.effectorMask = (ushort)ComponentMask.RoundSparks; _roundSparksEmitter.spriteRectangles = _roundSparksSprites; _roundSparksEmitter.particlesPerEmission = 6; _roundSparksEmitter.emissionIntervalMin = 0f; _roundSparksEmitter.emissionIntervalMax = 0.05f * _roundSparksDuration; _roundSparksEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _roundSparksEmitter.life = _roundSparksDuration; _roundSparksEmitter.billboardXY = true; _roundSparksEmitter.orientationMin = new Vector3(0f, 0f, 0f); _roundSparksEmitter.orientationMax = new Vector3(0f, 0f, 2f * (float)Math.PI); _roundSparksEmitter.angularVelocityMin = new Vector3(0f, 0f, -0.25f); _roundSparksEmitter.angularVelocityMax = new Vector3(0f, 0f, +0.25f); _roundSparksEmitter.radiusOffsetMin = 0f; _roundSparksEmitter.radiusOffsetMax = 1f; _roundSparksColorEffector.particleLifetime = _roundSparksDuration; _roundSparksColorEffector.colorMask = _roundSparksColor; _roundSparksColorEffector.keyframes.Clear(); _roundSparksColorEffector.keyframes.Add(0.1f, new Color4(1f, 1f, 1f, 1f)); _roundSparksColorEffector.keyframes.Add(1f, new Color4(1f, 1f, 1f, 0f)); _roundSparksScaleEffector.particleLifetime = _roundSparksDuration; _roundSparksScaleEffector.keyframes.Clear(); _roundSparksScaleEffector.keyframes.Add(0f, 1f); _roundSparksScaleEffector.keyframes.Add(0.25f, 3f); _roundSparksScaleEffector.keyframes.Add(1f, 6f); } else if (_roundSparksEmitter != null) { removeEmitter(_roundSparksEmitter); removeEffector(_roundSparksColorEffector); removeEffector(_roundSparksScaleEffector); _roundSparksEmitter = null; _roundSparksColorEffector = null; _roundSparksScaleEffector = null; } }
protected void configureFlash() { if (_doFlash) { if (_flashEmitter == null) { _flashEmitter = new SSParticlesFieldEmitter(new ParticlesSphereGenerator()); _flashColorEffector = new SSColorKeyframesEffector(); _flashScaleEffector = new SSMasterScaleKeyframesEffector(); addEmitter(_flashEmitter); addEffector(_flashColorEffector); addEffector(_flashScaleEffector); _flashEmitter.effectorMask = _flashColorEffector.effectorMask = _flashScaleEffector.effectorMask = (ushort)ComponentMask.Flash; } _flashEmitter.spriteRectangles = _flashSprites; _flashEmitter.particlesPerEmissionMin = 1; _flashEmitter.particlesPerEmissionMax = 2; _flashEmitter.emissionIntervalMin = 0f; _flashEmitter.emissionIntervalMax = 0.2f * _flashDuration; _flashEmitter.life = _flashDuration; _flashEmitter.velocity = Vector3.Zero; _flashEmitter.orientationMin = new Vector3(0f, 0f, 0f); _flashEmitter.orientationMax = new Vector3(0f, 0f, 2f * (float)Math.PI); _flashEmitter.billboardXY = true; _flashEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _flashColorEffector.particleLifetime = _flashDuration; _flashColorEffector.colorMask = _flashColor; _flashColorEffector.keyframes.Clear(); _flashColorEffector.keyframes.Add(0f, new Color4(1f, 1f, 1f, 1f)); _flashColorEffector.keyframes.Add(1f, new Color4(1f, 1f, 1f, 0f)); _flashScaleEffector.particleLifetime = _flashDuration; _flashScaleEffector.keyframes.Clear(); _flashScaleEffector.keyframes.Add(0f, 1f); _flashScaleEffector.keyframes.Add(1f, 1.5f); } else if (_flashEmitter != null) { removeEmitter(_flashEmitter); removeEffector(_flashColorEffector); removeEffector(_flashScaleEffector); _flashEmitter = null; _flashColorEffector = null; _flashScaleEffector = null; } }
protected void configureShockwave() { if (_doShockwave) { if (_shockwaveEmitter == null) { _shockwaveEmitter = new ShockwaveEmitter(); _shockwaveColorEffector = new SSColorKeyframesEffector(); _shockwaveScaleEffector = new SSMasterScaleKeyframesEffector(); addEmitter(_shockwaveEmitter); addEffector(_shockwaveScaleEffector); addEffector(_shockwaveColorEffector); _shockwaveEmitter.effectorMask = _shockwaveScaleEffector.effectorMask = _shockwaveColorEffector.effectorMask = (ushort)ComponentMask.Shockwave; } _shockwaveEmitter.spriteRectangles = _shockwaveSprites; _shockwaveEmitter.particlesPerEmission = 1; _shockwaveEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _shockwaveEmitter.life = _shockwaveDuration; _shockwaveEmitter.velocity = Vector3.Zero; _shockwaveScaleEffector.particleLifetime = _shockwaveDuration; _shockwaveScaleEffector.keyframes.Clear(); _shockwaveScaleEffector.keyframes.Add(0f, 0f); _shockwaveScaleEffector.keyframes.Add(_shockwaveDuration, 7f); _shockwaveColorEffector.colorMask = _shockwaveColor; _shockwaveColorEffector.particleLifetime = _shockwaveDuration; _shockwaveColorEffector.keyframes.Clear(); _shockwaveColorEffector.keyframes.Add(0f, new Color4(1f, 1f, 1f, 1f)); _shockwaveColorEffector.keyframes.Add(1f, new Color4(1f, 1f, 1f, 0f)); } else if (_shockwaveEmitter != null) { removeEmitter(_shockwaveEmitter); removeEffector(_shockwaveColorEffector); removeEffector(_shockwaveScaleEffector); _shockwaveEmitter = null; _shockwaveColorEffector = null; _shockwaveScaleEffector = null; } }
protected void configureRoundSparks() { if (_eParams.doRoundSparks) { _roundSparksEmitter = new SSRadialEmitter (); _roundSparksColorEffector = new SSColorKeyframesEffector (); _roundSparksScaleEffector = new SSMasterScaleKeyframesEffector (); addEmitter (_roundSparksEmitter); addEffector (_roundSparksColorEffector); addEffector (_roundSparksScaleEffector); _roundSparksEmitter.effectorMask = _roundSparksScaleEffector.effectorMask = _roundSparksColorEffector.effectorMask = (ushort)ComponentMask.RoundSparks; _roundSparksEmitter.spriteRectangles = _eParams.roundSparksSprites; _roundSparksEmitter.particlesPerEmission = 6; _roundSparksEmitter.emissionIntervalMin = 0f; _roundSparksEmitter.emissionIntervalMax = 0.05f * _eParams.roundSparksDuration; _roundSparksEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _roundSparksEmitter.life = _eParams.roundSparksDuration; _roundSparksEmitter.billboardXY = true; _roundSparksEmitter.orientationMin = new Vector3 (0f, 0f, 0f); _roundSparksEmitter.orientationMax = new Vector3 (0f, 0f, 2f * (float)Math.PI); _roundSparksEmitter.angularVelocityMin = new Vector3 (0f, 0f, -0.25f); _roundSparksEmitter.angularVelocityMax = new Vector3 (0f, 0f, +0.25f); _roundSparksEmitter.radiusOffsetMin = 0f; _roundSparksEmitter.radiusOffsetMax = 1f; _roundSparksColorEffector.particleLifetime = _eParams.roundSparksDuration; _roundSparksColorEffector.colorMask = _eParams.roundSparksColor; _roundSparksColorEffector.keyframes.Clear(); _roundSparksColorEffector.keyframes.Add(0.1f, new Color4 (1f, 1f, 1f, 1f)); _roundSparksColorEffector.keyframes.Add(1f, new Color4 (1f, 1f, 1f, 0f)); _roundSparksScaleEffector.particleLifetime = _eParams.roundSparksDuration; _roundSparksScaleEffector.keyframes.Clear(); _roundSparksScaleEffector.keyframes.Add(0f, 1f); _roundSparksScaleEffector.keyframes.Add(0.25f, 3f); _roundSparksScaleEffector.keyframes.Add(1f, 6f); } else if (_roundSparksEmitter != null) { removeEmitter(_roundSparksEmitter); removeEffector(_roundSparksColorEffector); removeEffector(_roundSparksScaleEffector); _roundSparksEmitter = null; _roundSparksColorEffector = null; _roundSparksScaleEffector = null; } }
protected void configureShockwave() { if (_eParams.doShockwave) { if (_shockwaveEmitter == null) { _shockwaveEmitter = new ShockwaveEmitter (); _shockwaveColorEffector = new SSColorKeyframesEffector (); _shockwaveScaleEffector = new SSMasterScaleKeyframesEffector (); addEmitter(_shockwaveEmitter); addEffector(_shockwaveScaleEffector); addEffector(_shockwaveColorEffector); _shockwaveEmitter.effectorMask = _shockwaveScaleEffector.effectorMask = _shockwaveColorEffector.effectorMask = (ushort)ComponentMask.Shockwave; } _shockwaveEmitter.spriteRectangles = _eParams.shockwaveSprites; _shockwaveEmitter.particlesPerEmission = 1; _shockwaveEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _shockwaveEmitter.life = _eParams.shockwaveDuration; _shockwaveEmitter.velocity = Vector3.Zero; _shockwaveScaleEffector.particleLifetime = _eParams.shockwaveDuration; _shockwaveScaleEffector.keyframes.Clear(); _shockwaveScaleEffector.keyframes.Add(0f, 0f); _shockwaveScaleEffector.keyframes.Add(_eParams.shockwaveDuration, 7f); _shockwaveColorEffector.colorMask = _eParams.shockwaveColor; _shockwaveColorEffector.particleLifetime = _eParams.shockwaveDuration; _shockwaveColorEffector.keyframes.Clear(); _shockwaveColorEffector.keyframes.Add(0f, new Color4 (1f, 1f, 1f, 1f)); _shockwaveColorEffector.keyframes.Add(1f, new Color4 (1f, 1f, 1f, 0f)); } else if (_shockwaveEmitter != null) { removeEmitter(_shockwaveEmitter); removeEffector(_shockwaveColorEffector); removeEffector(_shockwaveScaleEffector); _shockwaveEmitter = null; _shockwaveColorEffector = null; _shockwaveScaleEffector = null; } }
protected void configureFlash() { if (_eParams.doFlash) { if (_flashEmitter == null) { _flashEmitter = new SSParticlesFieldEmitter (new ParticlesSphereGenerator ()); _flashColorEffector = new SSColorKeyframesEffector (); _flashScaleEffector = new SSMasterScaleKeyframesEffector (); addEmitter(_flashEmitter); addEffector(_flashColorEffector); addEffector(_flashScaleEffector); _flashEmitter.effectorMask = _flashColorEffector.effectorMask = _flashScaleEffector.effectorMask = (ushort)ComponentMask.Flash; } _flashEmitter.spriteRectangles = _eParams.flashSprites; _flashEmitter.particlesPerEmissionMin = 1; _flashEmitter.particlesPerEmissionMax = 2; _flashEmitter.emissionIntervalMin = 0f; _flashEmitter.emissionIntervalMax = 0.2f * _eParams.flashDuration; _flashEmitter.life = _eParams.flashDuration; _flashEmitter.velocity = Vector3.Zero; _flashEmitter.orientationMin = new Vector3 (0f, 0f, 0f); _flashEmitter.orientationMax = new Vector3 (0f, 0f, 2f * (float)Math.PI); _flashEmitter.billboardXY = true; _flashEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _flashColorEffector.particleLifetime = _eParams.flashDuration; _flashColorEffector.colorMask = _eParams.flashColor; _flashColorEffector.keyframes.Clear(); _flashColorEffector.keyframes.Add(0f, new Color4 (1f, 1f, 1f, 1f)); _flashColorEffector.keyframes.Add(1f, new Color4 (1f, 1f, 1f, 0f)); _flashScaleEffector.particleLifetime = _eParams.flashDuration; _flashScaleEffector.keyframes.Clear(); _flashScaleEffector.keyframes.Add(0f, 1f); _flashScaleEffector.keyframes.Add(1f, 1.5f); } else if (_flashEmitter != null) { removeEmitter(_flashEmitter); removeEffector(_flashColorEffector); removeEffector(_flashScaleEffector); _flashEmitter = null; _flashColorEffector = null; _flashScaleEffector = null; } }
protected void configureFlameSmoke() { if (_eParams.doFlameSmoke) { if (_flameSmokeEmitter == null) { _flameSmokeEmitter = new SSRadialEmitter (); _flamesSmokeColorEffector = new SSColorKeyframesEffector (); _flameSmokeScaleEffector = new SSMasterScaleKeyframesEffector (); addEmitter(_flameSmokeEmitter); addEffector(_flamesSmokeColorEffector); addEffector(_flameSmokeScaleEffector); _flameSmokeEmitter.effectorMask = _flameSmokeScaleEffector.effectorMask = _flamesSmokeColorEffector.effectorMask = (ushort)ComponentMask.FlameSmoke; } _flameSmokeEmitter.spriteRectangles = _eParams.flameSmokeSprites; _flameSmokeEmitter.particlesPerEmission = 2; _flameSmokeEmitter.emissionInterval = 0.03f * _eParams.flameSmokeDuration; _flameSmokeEmitter.totalEmissionsLeft = 0; // Control this in ShowExplosion() _flameSmokeEmitter.life = _eParams.flameSmokeDuration; _flameSmokeEmitter.orientationMin = new Vector3 (0f, 0f, 0f); _flameSmokeEmitter.orientationMax = new Vector3 (0f, 0f, 2f * (float)Math.PI); _flameSmokeEmitter.billboardXY = true; _flameSmokeEmitter.angularVelocityMin = new Vector3 (0f, 0f, -0.5f); _flameSmokeEmitter.angularVelocityMax = new Vector3 (0f, 0f, +0.5f); _flameSmokeEmitter.radiusOffsetMin = 0f; _flameSmokeEmitter.radiusOffsetMax = 0.5f; _flamesSmokeColorEffector.colorMask = _eParams.flameColor; _flamesSmokeColorEffector.particleLifetime = _eParams.flameSmokeDuration; _flamesSmokeColorEffector.keyframes.Clear(); _flamesSmokeColorEffector.keyframes.Add(0f, new Color4 (1f, 1f, 1f, 1f)); _flamesSmokeColorEffector.keyframes.Add(0.4f, new Color4 (0f, 0f, 0f, 0.5f)); _flamesSmokeColorEffector.keyframes.Add(1f, new Color4 (0f, 0f, 0f, 0f)); _flameSmokeScaleEffector.particleLifetime = _eParams.flameSmokeDuration; _flameSmokeScaleEffector.keyframes.Clear(); _flameSmokeScaleEffector.keyframes.Add(0f, 0.1f); _flameSmokeScaleEffector.keyframes.Add(0.25f, 1f); _flameSmokeScaleEffector.keyframes.Add(1f, 1.2f); } else if (_flameSmokeEmitter != null) { removeEmitter(_flameSmokeEmitter); removeEffector(_flamesSmokeColorEffector); removeEffector(_flameSmokeScaleEffector); _flameSmokeEmitter = null; _flamesSmokeColorEffector = null; _flameSmokeScaleEffector = null; } }
protected void _initParamsSpecific(SSpaceMissileVisualParameters mParams) { // smoke effectors if (_particleRenderer.textureMaterial == null) { _particleRenderer.textureMaterial = new SSTextureMaterial(mParams.smokeParticlesTexture()); } if (_flameSmokeColorEffector == null) { _flameSmokeColorEffector = new SSColorKeyframesEffector(); _flameSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _flameSmokeColorEffector.effectorMask = (ushort)ParticleEffectorMasks.FlameToSmoke; _flameSmokeColorEffector.particleLifetime = mParams.flameSmokeDuration; //_smokeColorEffector.colorMask = ; _flameSmokeColorEffector.keyframes.Clear(); var flameColor = mParams.innerFlameColor; flameColor.A = 0.9f; _flameSmokeColorEffector.keyframes.Add(0f, flameColor); flameColor = mParams.outerFlameColor; flameColor.A = 0.7f; _flameSmokeColorEffector.keyframes.Add(0.1f, flameColor); var smokeColor = mParams.smokeColor; smokeColor.A = 0.2f; _flameSmokeColorEffector.keyframes.Add(0.2f, smokeColor); smokeColor.A = 0f; _flameSmokeColorEffector.keyframes.Add(1f, smokeColor); _particlesData.addEffector(_flameSmokeColorEffector); } if (_ejectionSmokeColorEffector == null) { _ejectionSmokeColorEffector = new SSColorKeyframesEffector(); _ejectionSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _ejectionSmokeColorEffector.effectorMask = (ushort)ParticleEffectorMasks.EjectionSmoke; _ejectionSmokeColorEffector.particleLifetime = mParams.flameSmokeDuration; _ejectionSmokeColorEffector.keyframes.Clear(); var smokeColor = mParams.smokeColor; smokeColor.A = 0.3f; _ejectionSmokeColorEffector.keyframes.Add(0f, smokeColor); smokeColor.A = 0.14f; _ejectionSmokeColorEffector.keyframes.Add(0.2f, smokeColor); smokeColor.A = 0f; _ejectionSmokeColorEffector.keyframes.Add(1f, smokeColor); _particlesData.addEffector(_ejectionSmokeColorEffector); } if (_flameSmokeScaleEffector == null) { _flameSmokeScaleEffector = new SSMasterScaleKeyframesEffector(); _flameSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _flameSmokeScaleEffector.effectorMask = (ushort)ParticleEffectorMasks.FlameToSmoke; _flameSmokeScaleEffector.particleLifetime = mParams.flameSmokeDuration; _flameSmokeScaleEffector.keyframes.Clear(); _flameSmokeScaleEffector.keyframes.Add(0f, 0.3f); _flameSmokeScaleEffector.keyframes.Add(0.1f, 1f); _flameSmokeScaleEffector.keyframes.Add(1f, 2f); _particlesData.addEffector(_flameSmokeScaleEffector); } if (_ejectionSmokeScaleEffector == null) { _ejectionSmokeScaleEffector = new SSMasterScaleKeyframesEffector(); _ejectionSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _ejectionSmokeScaleEffector.effectorMask = (ushort)ParticleEffectorMasks.EjectionSmoke; _ejectionSmokeScaleEffector.particleLifetime = mParams.ejectionSmokeDuration; _ejectionSmokeScaleEffector.keyframes.Clear(); _ejectionSmokeScaleEffector.keyframes.Add(0f, 0.1f); _ejectionSmokeScaleEffector.keyframes.Add(0.35f, 0.8f); _ejectionSmokeScaleEffector.keyframes.Add(1f, 1.35f); _particlesData.addEffector(_ejectionSmokeScaleEffector); } }
protected void _initParamsSpecific(SSpaceMissileParameters mParams) { // smoke effectors if (_particleRenderer.textureMaterial == null) { _particleRenderer.textureMaterial = new SSTextureMaterial (mParams.smokeParticlesTexture); } if (_flameSmokeColorEffector == null) { _flameSmokeColorEffector = new SSColorKeyframesEffector (); _flameSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _flameSmokeColorEffector.effectorMask = (ushort)ParticleEffectorMasks.FlameToSmoke; _flameSmokeColorEffector.particleLifetime = mParams.flameSmokeDuration; //_smokeColorEffector.colorMask = ; _flameSmokeColorEffector.keyframes.Clear(); var flameColor = mParams.innerFlameColor; flameColor.A = 0.9f; _flameSmokeColorEffector.keyframes.Add(0f, flameColor); flameColor = mParams.outerFlameColor; flameColor.A = 0.7f; _flameSmokeColorEffector.keyframes.Add(0.1f, flameColor); var smokeColor = mParams.smokeColor; smokeColor.A = 0.2f; _flameSmokeColorEffector.keyframes.Add(0.2f, smokeColor); smokeColor.A = 0f; _flameSmokeColorEffector.keyframes.Add(1f, smokeColor); _particlesData.addEffector(_flameSmokeColorEffector); } if (_ejectionSmokeColorEffector == null) { _ejectionSmokeColorEffector = new SSColorKeyframesEffector (); _ejectionSmokeColorEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _ejectionSmokeColorEffector.effectorMask = (ushort)ParticleEffectorMasks.EjectionSmoke; _ejectionSmokeColorEffector.particleLifetime = mParams.flameSmokeDuration; _ejectionSmokeColorEffector.keyframes.Clear(); var smokeColor = mParams.smokeColor; smokeColor.A = 0.3f; _ejectionSmokeColorEffector.keyframes.Add(0f, smokeColor); smokeColor.A = 0.14f; _ejectionSmokeColorEffector.keyframes.Add(0.2f, smokeColor); smokeColor.A = 0f; _ejectionSmokeColorEffector.keyframes.Add(1f, smokeColor); _particlesData.addEffector(_ejectionSmokeColorEffector); } if (_flameSmokeScaleEffector == null) { _flameSmokeScaleEffector = new SSMasterScaleKeyframesEffector (); _flameSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _flameSmokeScaleEffector.effectorMask = (ushort)ParticleEffectorMasks.FlameToSmoke; _flameSmokeScaleEffector.particleLifetime = mParams.flameSmokeDuration; _flameSmokeScaleEffector.keyframes.Clear(); _flameSmokeScaleEffector.keyframes.Add(0f, 0.3f); _flameSmokeScaleEffector.keyframes.Add(0.1f, 1f); _flameSmokeScaleEffector.keyframes.Add(1f, 2f); _particlesData.addEffector(_flameSmokeScaleEffector); } if (_ejectionSmokeScaleEffector == null) { _ejectionSmokeScaleEffector = new SSMasterScaleKeyframesEffector (); _ejectionSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _ejectionSmokeScaleEffector.effectorMask = (ushort)ParticleEffectorMasks.EjectionSmoke; _ejectionSmokeScaleEffector.particleLifetime = mParams.ejectionSmokeDuration; _ejectionSmokeScaleEffector.keyframes.Clear(); _ejectionSmokeScaleEffector.keyframes.Add(0f, 0.1f); _ejectionSmokeScaleEffector.keyframes.Add(0.35f, 0.8f); _ejectionSmokeScaleEffector.keyframes.Add(1f, 1.35f); _particlesData.addEffector(_ejectionSmokeScaleEffector); } }
public SLaserBurnParticleSystem(int particleCapacity) : base(particleCapacity) { this.simulationStep = 0.05f; // global flame/smoke effector to dim smoke particles of already-released laser hit spots _globalSmokeDimmerEffector = new SSColorKeyframesEffector (); _globalSmokeDimmerEffector.effectorMask = 1; _globalSmokeDimmerEffector.maskMatchFunction = SSParticleEffector.MatchFunction.Equals; _globalSmokeDimmerEffector.particleLifetime = 0f; _globalSmokeDimmerEffector.colorMask = Color4.LightGray; _globalSmokeDimmerEffector.keyframes.Clear(); _globalSmokeDimmerEffector.keyframes.Add(0f, new Color4 (1f, 1f, 1f, 1f)); _globalSmokeDimmerEffector.keyframes.Add(0.4f, new Color4 (0f, 0f, 0f, 1f)); _globalSmokeDimmerEffector.keyframes.Add(1f, new Color4 (0f, 0f, 0f, 0f)); addEffector(_globalSmokeDimmerEffector); _globalSmokeScaleEffector = new SSMasterScaleKeyframesEffector (); _globalSmokeScaleEffector.effectorMask = 0x1; // all smoke _globalSmokeScaleEffector.maskMatchFunction = SSParticleEffector.MatchFunction.And; // all smoke _globalSmokeScaleEffector.keyframes.Clear (); _globalSmokeScaleEffector.keyframes.Add (0f, 0.1f); _globalSmokeScaleEffector.keyframes.Add (0.15f, 1f); _globalSmokeScaleEffector.keyframes.Add (1f, 1.2f); addEffector(_globalSmokeScaleEffector); }