Esempio n. 1
0
        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"));
                        });
                    });
                }
            });
        }