public void FireProjectile()
        {
            var projectile = (SKSpriteNode)Projectile.Copy();

            projectile.Position  = Position;
            projectile.ZRotation = ZRotation;

            var emitter = (SKEmitterNode)ProjectileEmitter.Copy();

            emitter.TargetNode = CharacterScene.GetChildNode("world");
            projectile.AddChild(emitter);

            CharacterScene.AddNode(projectile, WorldLayer.Character);

            var rot = ZRotation;

            float x = -(float)Math.Sin(rot) * HeroProjectileSpeed * HeroProjectileLifetime;
            float y = (float)Math.Cos(rot) * HeroProjectileSpeed * HeroProjectileLifetime;

            projectile.RunAction(SKAction.MoveBy(x, y, HeroProjectileLifetime));

            projectile.RunAction(SKAction.Sequence(new [] {
                SKAction.WaitForDuration(HeroProjectileFadeOutTime),
                SKAction.FadeOutWithDuration(HeroProjectileLifetime - HeroProjectileFadeOutTime),
                SKAction.RemoveFromParent()
            }));
            projectile.RunAction(ProjectileSoundAction);

            var userData = new UserData {
                Player = Player
            };


            projectile.UserData = (NSMutableDictionary)userData.Dictionary;
        }
        public override void PerformDeath()
        {
            RemoveAllActions();

            SKSpriteNode splort = (SKSpriteNode)deathSplort.Copy();

            splort.ZPosition = -1;
            splort.ZRotation = (float)(Random.NextDouble() * Math.PI);
            splort.Position  = Position;
            splort.Alpha     = 0.5f;
            CharacterScene.AddNode(splort, WorldLayer.Ground);
            splort.RunAction(SKAction.FadeOutWithDuration(10));

            base.PerformDeath();

            PhysicsBody.CollisionBitMask   = 0;
            PhysicsBody.ContactTestBitMask = 0;
            PhysicsBody.CategoryBitMask    = 0;
            PhysicsBody = null;
        }