public void Trigger(Vector2 position, float rotation, int releaseAmount) { if (!this.Enabled) { return; } if (_owner.TriggerHandlers.Count > 0) { TriggerContext triggerContext = new TriggerContext { Position = position, Rotation = rotation, ReleaseAmount = releaseAmount, Canceled = false, }; _owner.TriggerHandlers.Process(ref triggerContext); if (triggerContext.Canceled) { return; } position = triggerContext.Position; rotation = triggerContext.Rotation; releaseAmount = triggerContext.ReleaseAmount; } Matrix rotationMatrix = default(Matrix); bool isRotated = FlaiMath.RealModulus(rotation, FlaiMath.TwoPi) != 0; if (isRotated) { Matrix.CreateRotationZ(rotation, out rotationMatrix); } Particle particle = default(Particle); for (int i = 0; i < releaseAmount; i++) { _emitterStyle.GenerateOffsetAndForce(out particle.Position, out particle.Velocity); if (isRotated) { Vector2.Transform(ref particle.Position, ref rotationMatrix, out particle.Position); Vector2.Transform(ref particle.Velocity, ref rotationMatrix, out particle.Velocity); } particle.Inception = _totalSeconds; particle.Position += position; particle.Velocity *= Global.Random.NextFloat(this.ReleaseParameters.Speed); particle.Rotation = Global.Random.NextFloat(this.ReleaseParameters.Rotation); particle.Scale = Global.Random.NextFloat(this.ReleaseParameters.Scale); particle.Color = this.ReleaseParameters.Color.NextVector3(Global.Random); particle.Opacity = Global.Random.NextFloat(this.ReleaseParameters.Opacity); particle.Noise = Global.Random.NextFloat(0, 1); _particleBuffer.AddLast(ref particle); } }
private bool ShouldParticleEffectTrigger(ref TriggerContext triggerContext) { return SkypieaConstants.GetAdjustedCameraArea(CCamera2D.Active).Contains(triggerContext.Position); }