partial void slidersChanged(NSObject sender) { var gas = gasSlider.IntValue / 100.0f; // Update the fire properties fireEmitter.SetValueForKeyPath((NSNumber)(gas * 1000), (NSString)"emitterCells.fire.birthRate"); fireEmitter.SetValueForKeyPath((NSNumber)gas, (NSString)"emitterCells.fire.lifetime"); fireEmitter.SetValueForKeyPath((NSNumber)(gas * 0.35), (NSString)"emitterCells.fire.lifetimeRange"); fireEmitter.Size = new CGSize(50 * gas, 0); var color = new CGColor(1, 1, 1, gas * 0.3f); smokeEmitter.SetValueForKeyPath((NSNumber)(gas * 4), (NSString)"emitterCells.smoke.lifetime"); smokeEmitter.SetValueForKeyPath(color.Handle, (NSString)"emitterCells.smoke.color"); }
public ParticleEffect() { tapDetector = new UITapGestureRecognizer(() => { var control = Control ?? Container; var tapPoint = tapDetector.LocationInView(control); var effect = (ParticlesSample.Effects.ParticleEffect)Element.Effects.FirstOrDefault(p => p is ParticlesSample.Effects.ParticleEffect); var mode = effect?.Mode ?? ParticlesSample.Effects.EmitMode.OneShot; var lifeTime = effect?.LifeTime ?? 1.5f; var numberOfItems = effect?.NumberOfParticles ?? 4000; var scale = effect?.Scale ?? 1.0f; var speed = effect?.Speed * 1000 ?? 100.0f; var image = effect?.Image ?? "Icon"; var emitterLayer = new CAEmitterLayer(); emitterLayer.Position = tapPoint; emitterLayer.Shape = CAEmitterLayer.ShapeCircle; var cell = new CAEmitterCell(); cell.Name = "pEmitter"; cell.BirthRate = numberOfItems; cell.Scale = 0f; cell.ScaleRange = scale; cell.Velocity = speed; cell.LifeTime = (float)lifeTime; cell.EmissionRange = (nfloat)Math.PI * 2.0f; cell.Contents = UIImage.FromBundle(image).CGImage; emitterLayer.Cells = new CAEmitterCell[] { cell }; control.Layer.AddSublayer(emitterLayer); if (mode == ParticlesSample.Effects.EmitMode.OneShot) { Task.Delay(1).ContinueWith(t => { Device.BeginInvokeOnMainThread(() => { emitterLayer.SetValueForKeyPath(NSNumber.FromInt32(0), new NSString("emitterCells.pEmitter.birthRate")); }); }); } }); }