public void SetUpSnowField() { emitter = new CAEmitterLayer(); this.BackgroundColor = UIColor.Clear; emitter.Position = new PointF(UIScreen.MainScreen.Bounds.Width / 2, -10f); emitter.Size = new SizeF(UIScreen.MainScreen.Bounds.Width, 1); emitter.Shape = CAEmitterLayer.ShapeLine; var cell = new CAEmitterCell(); cell.BirthRate = 10f; cell.LifeTime = 9.0f; cell.Contents = UIImage.FromFile("snow-1.png").CGImage; cell.Velocity = 10f; cell.VelocityRange = 50f; cell.EmissionRange = (float)(2f * Math.PI); cell.EmissionLongitude = (float)Math.PI; cell.AccelerationY = 40f; cell.Scale = 1.0f; cell.ScaleRange = 0.2f; cell.SpinRange = 10.0f; emitter.Cells = new CAEmitterCell[] { cell }; //, cell2, cell3 }; emitter.RenderMode = CAEmitterLayer.RenderUnordered; Layer.AddSublayer(emitter); }
public override void ViewDidLoad() { base.ViewDidLoad(); var snowEmitter = new CAEmitterLayer(); snowEmitter.Position = new CGPoint(this.View.Bounds.Width / 2.0f + 40f, -10f); snowEmitter.Size = new CGSize(this.View.Bounds.Size.Width * 2.0f, 0.0f); snowEmitter.Mode = "kCAEmitterLayerOutline"; snowEmitter.Shape = "kCAEmitterLayerLine"; var snowFlake = new CAEmitterCell(); snowFlake.BirthRate = 1.0f; snowFlake.LifeTime = 120.0f; snowFlake.Velocity = -10; snowFlake.VelocityRange = 10; snowFlake.AccelerationY = 2; snowFlake.EmissionRange = 0.5f * (nfloat)Math.PI; snowFlake.SpinRange = 0.25f * (nfloat)Math.PI; snowFlake.Contents = UIImage.FromBundle("DazFlake").CGImage; snowFlake.Color = UIColor.FromRGBA(0.600F, 0.658f, 0.743f, 1.0f).CGColor; snowEmitter.ShadowOpacity = 1.0f; snowEmitter.ShadowOffset = new CGSize(0.0f, 1.0f); snowEmitter.ShadowRadius = 0.0f; snowEmitter.ShadowColor = UIColor.Black.CGColor; snowEmitter.Cells = new CAEmitterCell[] { snowFlake }; this.View.Layer.AddSublayer(snowEmitter); }
public void SetUpSnowField() { emitter = new CAEmitterLayer(); this.BackgroundColor = UIColor.Clear; emitter.Position = new PointF(UIScreen.MainScreen.Bounds.Width /2, -10f); emitter.Size = new SizeF(UIScreen.MainScreen.Bounds.Width,1); emitter.Shape = CAEmitterLayer.ShapeLine; var cell = new CAEmitterCell(); cell.BirthRate = 10f; cell.LifeTime = 9.0f; cell.Contents = UIImage.FromFile("snow-1.png").CGImage; cell.Velocity = 10f; cell.VelocityRange = 50f; cell.EmissionRange = (float) (2f*Math.PI); cell.EmissionLongitude = (float) Math.PI; cell.AccelerationY = 40f; cell.Scale = 1.0f; cell.ScaleRange = 0.2f; cell.SpinRange = 10.0f; emitter.Cells = new CAEmitterCell[] { cell };//, cell2, cell3 }; emitter.RenderMode = CAEmitterLayer.RenderUnordered; Layer.AddSublayer(emitter); }
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")); }); }); } }); }
private void ShowSnow(int x) { this.Layer = new CAEmitterLayer(); this.Layer.Position = new CGPoint(x, 320); CAEmitterCell cell = new CAEmitterCell(); cell.BirthRate = 100; cell.LifeTime = 10; cell.Velocity = 100; cell.Scale = 0.4f; cell.EmissionRange = 3.14f * 2; cell.Contents = NSImage.ImageNamed("snow.png").CGImage; this.Layer.Cells = new CAEmitterCell[1] { cell }; this.View.Layer.AddSublayer(this.Layer); }
public void AwakeFromNib() { //Create the root layer this.rootLayer = CALayer.Layer; //Set the root layer's attributes this.rootLayer.Bounds = CGRect.CGRectMake (0, 0, 640, 480); IntPtr color = CGColor.CreateGenericRGB (0.0, 0.0, 0.0, 1); rootLayer.BackgroundColor = color; CGColor.Release (color); //Load the spark image for the particle String fileName = NSBundle.MainBundle.PathForResourceOfType ("tspark", "png"); IntPtr dataProvider = CGDataProvider.CreateWithFilename (fileName); IntPtr img = CGImage.CreateWithPNGDataProvider (dataProvider, IntPtr.Zero, false, CGColorRenderingIntent.kCGRenderingIntentDefault); this.mortor = CAEmitterLayer.Layer.Retain<CAEmitterLayer>(); this.mortor.EmitterPosition = CGPoint.CGPointMake (320, 0); this.mortor.RenderMode = CAEmitterLayer.kCAEmitterLayerAdditive; //Invisible particle representing the rocket before the explosion CAEmitterCell rocket = CAEmitterCell.EmitterCell.Retain<CAEmitterCell>(); rocket.EmissionLongitude = Math.PI / 2; rocket.EmissionLatitude = 0; rocket.Lifetime = 1.6f; rocket.BirthRate = 1; rocket.Velocity = 400; rocket.VelocityRange = 100; rocket.YAcceleration = -250; rocket.EmissionRange = Math.PI / 4; color = CGColor.CreateGenericRGB (0.5, 0.5, 0.5, 0.5); rocket.Color = color; CGColor.Release (color); rocket.RedRange = 0.5f; rocket.GreenRange = 0.5f; rocket.BlueRange = 0.5f; //Name the cell so that it can be animated later using keypath rocket.Name = "rocket"; //Flare particles emitted from the rocket as it flys CAEmitterCell flare = CAEmitterCell.EmitterCell; flare.ContentsPointer = img; flare.EmissionLongitude = (4 * Math.PI) / 2; flare.Scale = 0.4; flare.Velocity = 100; flare.BirthRate = 45; flare.Lifetime = 1.5f; flare.YAcceleration = -350; flare.EmissionRange = Math.PI / 7; flare.AlphaSpeed = -0.7f; flare.ScaleSpeed = -0.1; flare.ScaleRange = 0.1; flare.BeginTime = 0.01; flare.Duration = 0.7; //The particles that make up the explosion CAEmitterCell firework = CAEmitterCell.EmitterCell; firework.ContentsPointer = img; firework.BirthRate = 9999; firework.Scale = 0.6; firework.Velocity = 130; firework.Lifetime = 2; firework.AlphaSpeed = -0.2f; firework.YAcceleration = -80; firework.BeginTime = 1.5; firework.Duration = 0.1; firework.EmissionRange = 2 * Math.PI; firework.ScaleSpeed = -0.1; firework.Spin = 2; //Name the cell so that it can be animated later using keypath firework.Name = "firework"; //preSpark is an invisible particle used to later emit the spark CAEmitterCell preSpark = CAEmitterCell.EmitterCell; preSpark.BirthRate = 80; preSpark.Velocity = firework.Velocity * 0.70; preSpark.Lifetime = 1.7f; preSpark.YAcceleration = firework.YAcceleration * 0.85; preSpark.BeginTime = firework.BeginTime - 0.2; preSpark.EmissionRange = firework.EmissionRange; preSpark.GreenSpeed = 100; preSpark.BlueSpeed = 100; preSpark.RedSpeed = 100; //Name the cell so that it can be animated later using keypath preSpark.Name = "preSpark"; //The 'sparkle' at the end of a firework CAEmitterCell spark = CAEmitterCell.EmitterCell; spark.ContentsPointer = img; spark.Lifetime = 0.05f; spark.YAcceleration = -250; spark.BeginTime = 0.8; spark.Scale = 0.4; spark.BirthRate = 10; preSpark.EmitterCells = NSArray.ArrayWithObject (spark); rocket.EmitterCells = NSArray.ArrayWithObjects (flare, firework, preSpark, null); mortor.EmitterCells = NSArray.ArrayWithObject (rocket); this.rootLayer.AddSublayer (this.mortor); //Set the view's layer to the base layer theView.Layer = rootLayer; theView.WantsLayer = true; //Force the view to update theView.NeedsDisplay = true; }
public override void ViewWillUnload() { base.ViewWillUnload(); heartsEmitter.RemoveFromSuperLayer(); heartsEmitter = null; }
public void Start() { string fileName = NSBundle.MainBundle.PathForResource ("tspark", "png"); var dataProvider = CGDataProvider.FromFile (fileName); var img = CGImage.FromPNG (dataProvider, null, false, CGColorRenderingIntent.Default); mortor = new CAEmitterLayer { Position =new PointF (Bounds.Width / 2, 0), RenderMode = CAEmitterLayer.RenderAdditive, }; var pi = (float)Math.PI; var rocket =new CAEmitterCell(); rocket.EmissionLongitude = pi / 3; rocket.EmissionLatitude = 0; rocket.LifeTime = 1.6f; rocket.BirthRate = 1.5f; rocket.Velocity = 40; rocket.VelocityRange = 600; rocket.AccelerationY = -250; rocket.EmissionRange = pi / 4; var color = UIColor.FromRGBA (.5f, .5f, .5f, .5f).CGColor; rocket.Color = color; rocket.RedRange = 0.5f; rocket.GreenRange = 0.5f; rocket.BlueRange = 0.5f; rocket.Name = "rocket"; CAEmitterCell flare = CAEmitterCell.EmitterCell(); flare.Contents = img; flare.EmissionLongitude = (4 * pi) / 2; flare.Scale = 0.4f; flare.Velocity = 100; flare.BirthRate = 45; flare.LifeTime = 1.5f; flare.AccelerationY = -350; flare.EmissionRange = pi / 7; flare.AlphaSpeed = -0.7f; flare.ScaleSpeed = -0.1f; flare.ScaleRange = 0.1f; flare.BeginTime = 0.01; flare.Duration = 0.7; CAEmitterCell firework = CAEmitterCell.EmitterCell(); firework.Contents = img; firework.BirthRate = 9999; firework.Scale = 0.6f; firework.Velocity = 130; firework.LifeTime = 2; firework.AlphaSpeed = -0.2f; firework.AccelerationY = -80; firework.BeginTime = 1.5; firework.Duration = 0.1; firework.EmissionRange = 2 * pi; firework.ScaleSpeed = -0.1f; firework.Spin = 2; firework.Name = ("firework"); CAEmitterCell preSpark = CAEmitterCell.EmitterCell(); preSpark.BirthRate = 80; preSpark.Velocity = firework.Velocity * 0.7f; preSpark.LifeTime = 1.7f; preSpark.AccelerationY = firework.AccelerationY * 0.85f; preSpark.BeginTime = firework.BeginTime - 0.2; preSpark.EmissionRange = firework.EmissionRange; preSpark.GreenSpeed = 100; preSpark.BlueSpeed = 100; preSpark.RedSpeed = 100; preSpark.Name = ("preSpark"); CAEmitterCell spark = CAEmitterCell.EmitterCell(); spark.Contents = img; spark.LifeTime = 0.05f; spark.AccelerationY = -250; spark.BeginTime = 0.8; spark.Scale = 0.4f; spark.BirthRate = 10; preSpark.Cells = new []{spark}; rocket.Cells = new []{flare, firework, preSpark}; mortor.Cells = new []{rocket}; this.Layer.AddSublayer(mortor); SetNeedsLayout (); this.Layer.SetNeedsDisplay (); }
public override void AwakeFromNib () { // Create the root layer rootLayer = new CALayer (); // Set the root layer;s background color to black rootLayer.BackgroundColor = new CGColor (0,0,0); // Create the fire emitter layer fireEmitter = new CAEmitterLayer (); fireEmitter.Position = new System.Drawing.PointF (225,50); fireEmitter.Mode = CAEmitterLayer.ModeOutline; fireEmitter.Shape = CAEmitterLayer.ShapeLine; fireEmitter.RenderMode = CAEmitterLayer.RenderAdditive; fireEmitter.Size = new SizeF (0,0); // Create the smoke emitter layer smokeEmitter = new CAEmitterLayer (); smokeEmitter.Position = new PointF (225,50); smokeEmitter.Mode = CAEmitterLayer.ModePoints; // Create the fire emitter cell CAEmitterCell fire = CAEmitterCell.EmitterCell (); fire.EmissionLongitude = (float)Math.PI; fire.BirthRate = 0; fire.Velocity = 80; fire.VelocityRange = 30; fire.EmissionRange = 1.1f; fire.AccelerationY = 200; fire.ScaleSpeed = 0.3f; RectangleF rect = RectangleF.Empty; CGColor color = new CGColor (0.8f,0.4f,0.2f,0.10f); fire.Color = color; fire.Contents = NSImage.ImageNamed ("fire.png").AsCGImage (ref rect, null, null); // Name the cell so that it can be animated later using keypaths fire.Name = "fire"; // Add the fire emitter cell to the fire emitter layer fireEmitter.Cells = new CAEmitterCell[] { fire }; //Create the smoke emitter cell CAEmitterCell smoke = CAEmitterCell.EmitterCell (); smoke.BirthRate = 11; smoke.EmissionLongitude = (float)Math.PI / 2; smoke.LifeTime = 0; smoke.Velocity = 40; smoke.VelocityRange = 20; smoke.EmissionRange = (float)Math.PI / 4; smoke.Spin = 1; smoke.SpinRange = 6; smoke.AccelerationY = 160; smoke.Scale = 0.1f; smoke.AlphaSpeed = -0.12f; smoke.ScaleSpeed = 0.7f; smoke.Contents = NSImage.ImageNamed ("smoke.png").AsCGImage (ref rect, null, null); //Name the cell so that it can be animated later using keypaths smoke.Name = "smoke"; // Add the smoke emitter cell to the smoke emitter layer smokeEmitter.Cells = new CAEmitterCell[] { smoke }; // Add the two emitter layers to the root layer rootLayer.AddSublayer (smokeEmitter); rootLayer.AddSublayer (fireEmitter); // Set the view's layer to the base layer view.Layer = rootLayer; view.WantsLayer = true; // Set the fire simulation to reflect the intial slider postion slidersChanged (this); // Force the view to update view.NeedsDisplay = true; }
public void AwakeFromNib() { //Create the root layer rootLayer = CALayer.Layer; //Set the root layer's background color to black rootLayer.BackgroundColor = CGColor.GetConstantColor(CGColor.kCGColorBlack); //Create the fire emitter layer fireEmitter = CAEmitterLayer.Layer; fireEmitter.EmitterPosition = new CGPoint(225, 50); fireEmitter.EmitterMode = CAEmitterLayer.kCAEmitterLayerOutline; fireEmitter.EmitterShape = CAEmitterLayer.kCAEmitterLayerLine; fireEmitter.RenderMode = CAEmitterLayer.kCAEmitterLayerAdditive; fireEmitter.EmitterSize = new CGSize(0, 0); //Create the smoke emitter layer smokeEmitter = CAEmitterLayer.Layer; smokeEmitter.EmitterPosition = new CGPoint(225, 50); smokeEmitter.EmitterMode = CAEmitterLayer.kCAEmitterLayerPoints; //Create the fire emitter cell CAEmitterCell fire = CAEmitterCell.EmitterCell; fire.EmissionLongitude = (float) Math.PI; fire.BirthRate = 0; fire.Velocity = 80; fire.VelocityRange = 30; fire.EmissionRange = 1.1f; fire.YAcceleration = 200; fire.ScaleSpeed = 0.3f; IntPtr color = CGColor.CreateGenericRGB(0.8f, 0.4f, 0.2f, 0.10f); fire.Color = color; CGColor.Release(color); fire.ContentsPointer = CGImageNamed("fire.png"); //Name the cell so that it can be animated later using keypaths fire.Name = "fire"; //Add the fire emitter cell to the fire emitter layer fireEmitter.EmitterCells = NSArray.ArrayWithObject(fire); //Create the smoke emitter cell CAEmitterCell smoke = CAEmitterCell.EmitterCell; smoke.BirthRate = 11; smoke.EmissionLongitude = (float)(Math.PI / 2); smoke.Lifetime = 0; smoke.Velocity = 40; smoke.VelocityRange = 20; smoke.EmissionRange = (float)(Math.PI / 4); smoke.Spin = 1; smoke.SpinRange = 6; smoke.YAcceleration = 160; smoke.ContentsPointer = CGImageNamed("smoke.png"); smoke.Scale = 0.1f; smoke.AlphaSpeed = -0.12f; smoke.ScaleSpeed = 0.7f; //Name the cell so that it can be animated later using keypaths smoke.Name = "smoke"; //Add the smoke emitter cell to the smoke emitter layer smokeEmitter.EmitterCells = NSArray.ArrayWithObject(smoke); //Add the two emitter layers to the root layer rootLayer.AddSublayer(smokeEmitter); rootLayer.AddSublayer(fireEmitter); //Set the view's layer to the base layer view.Layer = rootLayer; view.WantsLayer = true; //Set the fire simulation to reflect the initial slider position this.SlidersChanged(this); //Force the view to update view.NeedsDisplay = true; }
public override void AwakeFromNib () { // center our fire horizontally on the view and 15px from the bottom var firePosition = new CGPoint (view.Bounds.Width / 2, 15); rootLayer = new CALayer { BackgroundColor = new CGColor (0, 0, 0) }; fireEmitter = new CAEmitterLayer { Position = firePosition, Mode = CAEmitterLayer.ModeOutline, Shape = CAEmitterLayer.ShapeLine, RenderMode = CAEmitterLayer.RenderAdditive, Size = CGSize.Empty, Cells = new [] { new CAEmitterCell { Name = "fire", // name the cell so that it can be animated later using keypaths EmissionLongitude = (float)Math.PI, BirthRate = 0, Velocity = 80, VelocityRange = 30, EmissionRange = 1.1f, AccelerationY = 200, ScaleSpeed = 0.3f, Color = new CGColor (0.8f, 0.4f, 0.2f, 0.10f), Contents = NSImage.ImageNamed ("fire.png").CGImage } } }; smokeEmitter = new CAEmitterLayer { Position = firePosition, Mode = CAEmitterLayer.ModePoints, Cells = new [] { new CAEmitterCell { Name = "smoke", // name the cell so that it can be animated later using keypaths BirthRate = 11, EmissionLongitude = (float)Math.PI / 2, LifeTime = 0, Velocity = 40, VelocityRange = 20, EmissionRange = (float)Math.PI / 4, Spin = 1, SpinRange = 6, AccelerationY = 160, Scale = 0.1f, AlphaSpeed = -0.12f, ScaleSpeed = 0.7f, Contents = NSImage.ImageNamed ("smoke.png").CGImage } } }; rootLayer.AddSublayer (smokeEmitter); rootLayer.AddSublayer (fireEmitter); view.Layer = rootLayer; view.WantsLayer = true; // Set the fire simulation to reflect the intial slider postion slidersChanged (this); // Force the view to update view.NeedsDisplay = true; }
private void ShowFire() { CGRect viewBounds = this.View.Layer.Bounds; this.Layer = new CAEmitterLayer(); //this.Layer.Position= new CGPoint(0, 320); //this.Layer.Position = new CGPoint(viewBounds.Size.Width / 2.0, viewBounds.Size.Height / 2.0); this.Layer.Position = new CGPoint(0, viewBounds.Size.Height / 2.0); this.Layer.Size = new CGSize(viewBounds.Size.Width / 2.0, 0.0); this.Layer.Mode = "kCAEmitterLayerOutline"; this.Layer.Shape = "kCAEmitterLayerLine"; this.Layer.RenderMode = "kCAEmitterLayerAdditive"; Random rad = new Random(); int radnum = rad.Next(0, 100); this.Layer.Seed = radnum + 1; //1.rocket CAEmitterCell rocket = new CAEmitterCell(); rocket.BirthRate = 1.0f; rocket.EmissionRange = 0.25f * 3.14f; // some variation in angle rocket.Velocity = 380; rocket.VelocityRange = 100; rocket.AccelerationY = 75; rocket.LifeTime = 1.02f; // we cannot set the birthrate < 1.0 for the burst rocket.Contents = NSImage.ImageNamed("snow.png").CGImage; rocket.Scale = 0.2f; rocket.Color = new CGColor(1, 0, 0); rocket.GreenRange = 1.0f; // different colors rocket.RedRange = 1.0f; rocket.BlueRange = 1.0f; rocket.SpinRange = 3.14f; //2.burst CAEmitterCell burst = new CAEmitterCell(); burst.BirthRate = 1.0f; // at the end of travel burst.Velocity = 0; burst.Scale = 2.5f; burst.RedSpeed = -1.5f; // shifting burst.BlueSpeed = +1.5f; // shifting burst.GreenSpeed = +1.0f; // shifting burst.LifeTime = 0.35f; //3.spark CAEmitterCell spark = new CAEmitterCell(); spark.BirthRate = 400f; spark.Velocity = 125f; spark.EmissionRange = 2f * 3.14f; // 360 deg spark.AccelerationY = 75f; // gravity spark.LifeTime = 3f; spark.Contents = NSImage.ImageNamed("snow.png").CGImage; spark.ScaleSpeed = -0.2f; spark.GreenSpeed = -0.1f; spark.RedSpeed = 0.4f; spark.BlueSpeed = -0.1f; spark.AlphaSpeed = -0.25f; spark.Spin = 1f * 3.14f; spark.SpinRange = 2f * 3.14f; this.Layer.Cells = new CAEmitterCell[1] { rocket }; rocket.Cells = new CAEmitterCell[1] { burst }; burst.Cells = new CAEmitterCell[1] { spark }; this.View.Layer.AddSublayer(this.Layer); //remar3333 }
public override void AwakeFromNib() { // center our fire horizontally on the view and 15px from the bottom var firePosition = new CGPoint(view.Bounds.Width / 2, 15); rootLayer = new CALayer { BackgroundColor = new CGColor(0, 0, 0) }; fireEmitter = new CAEmitterLayer { Position = firePosition, Mode = CAEmitterLayer.ModeOutline, Shape = CAEmitterLayer.ShapeLine, RenderMode = CAEmitterLayer.RenderAdditive, Size = CGSize.Empty, Cells = new [] { new CAEmitterCell { Name = "fire", // name the cell so that it can be animated later using keypaths EmissionLongitude = (float)Math.PI, BirthRate = 0, Velocity = 80, VelocityRange = 30, EmissionRange = 1.1f, AccelerationY = 200, ScaleSpeed = 0.3f, Color = new CGColor(0.8f, 0.4f, 0.2f, 0.10f), Contents = NSImage.ImageNamed("fire.png").CGImage } } }; smokeEmitter = new CAEmitterLayer { Position = firePosition, Mode = CAEmitterLayer.ModePoints, Cells = new [] { new CAEmitterCell { Name = "smoke", // name the cell so that it can be animated later using keypaths BirthRate = 11, EmissionLongitude = (float)Math.PI / 2, LifeTime = 0, Velocity = 40, VelocityRange = 20, EmissionRange = (float)Math.PI / 4, Spin = 1, SpinRange = 6, AccelerationY = 160, Scale = 0.1f, AlphaSpeed = -0.12f, ScaleSpeed = 0.7f, Contents = NSImage.ImageNamed("smoke.png").CGImage } } }; rootLayer.AddSublayer(smokeEmitter); rootLayer.AddSublayer(fireEmitter); view.Layer = rootLayer; view.WantsLayer = true; // Set the fire simulation to reflect the intial slider postion slidersChanged(this); // Force the view to update view.NeedsDisplay = true; }
public override void AwakeFromNib() { // Create the root layer rootLayer = new CALayer(); // Set the root layer;s background color to black rootLayer.BackgroundColor = new CGColor(0, 0, 0); // Create the fire emitter layer fireEmitter = new CAEmitterLayer(); fireEmitter.Position = new System.Drawing.PointF(225, 50); fireEmitter.Mode = CAEmitterLayer.ModeOutline; fireEmitter.Shape = CAEmitterLayer.ShapeLine; fireEmitter.RenderMode = CAEmitterLayer.RenderAdditive; fireEmitter.Size = new SizeF(0, 0); // Create the smoke emitter layer smokeEmitter = new CAEmitterLayer(); smokeEmitter.Position = new PointF(225, 50); smokeEmitter.Mode = CAEmitterLayer.ModePoints; // Create the fire emitter cell CAEmitterCell fire = CAEmitterCell.EmitterCell(); fire.EmissionLongitude = (float)Math.PI; fire.BirthRate = 0; fire.Velocity = 80; fire.VelocityRange = 30; fire.EmissionRange = 1.1f; fire.AccelerationY = 200; fire.ScaleSpeed = 0.3f; RectangleF rect = RectangleF.Empty; CGColor color = new CGColor(0.8f, 0.4f, 0.2f, 0.10f); fire.Color = color; fire.Contents = NSImage.ImageNamed("fire.png").AsCGImage(ref rect, null, null); // Name the cell so that it can be animated later using keypaths fire.Name = "fire"; // Add the fire emitter cell to the fire emitter layer fireEmitter.Cells = new CAEmitterCell[] { fire }; //Create the smoke emitter cell CAEmitterCell smoke = CAEmitterCell.EmitterCell(); smoke.BirthRate = 11; smoke.EmissionLongitude = (float)Math.PI / 2; smoke.LifeTime = 0; smoke.Velocity = 40; smoke.VelocityRange = 20; smoke.EmissionRange = (float)Math.PI / 4; smoke.Spin = 1; smoke.SpinRange = 6; smoke.AccelerationY = 160; smoke.Scale = 0.1f; smoke.AlphaSpeed = -0.12f; smoke.ScaleSpeed = 0.7f; smoke.Contents = NSImage.ImageNamed("smoke.png").AsCGImage(ref rect, null, null); //Name the cell so that it can be animated later using keypaths smoke.Name = "smoke"; // Add the smoke emitter cell to the smoke emitter layer smokeEmitter.Cells = new CAEmitterCell[] { smoke }; // Add the two emitter layers to the root layer rootLayer.AddSublayer(smokeEmitter); rootLayer.AddSublayer(fireEmitter); // Set the view's layer to the base layer view.Layer = rootLayer; view.WantsLayer = true; // Set the fire simulation to reflect the intial slider postion slidersChanged(this); // Force the view to update view.NeedsDisplay = true; }