Inheritance: CCNode
        private void FruitVsBorders(Fruit fruit)
        {
            if(fruit.PositionX - fruit.Radius < 0 && fruit.Velocity.X < 0)
            {
                fruit.Velocity.X *= -1 * GameCoefficients.FruitCollisionElasticity;
                CCAudioEngine.SharedEngine.PlayEffect("FruitEdgeBounce");
            }
            if(fruit.PositionX + fruit.Radius > gameplayLayer.ContentSize.Width && fruit.Velocity.X > 0)
            {
                fruit.Velocity.X *= -1 * GameCoefficients.FruitCollisionElasticity;
                CCAudioEngine.SharedEngine.PlayEffect("FruitEdgeBounce");

            }
            if (fruit.PositionY + fruit.Radius > gameplayLayer.ContentSize.Height && fruit.Velocity.Y > 0)
            {
                fruit.Velocity.Y *= -1 * GameCoefficients.FruitCollisionElasticity;
                CCAudioEngine.SharedEngine.PlayEffect("FruitEdgeBounce");
            }
        }
        // made public for debugging, may make it private later:
        private void Spawn()
		{
			var fruit = new Fruit ();

            if(Layer == null)
            {
                throw new InvalidOperationException("Need to set Layer before spawning");
            }

            fruit.PositionX = CCRandom.GetRandomFloat(0 + fruit.Radius, Layer.ContentSize.Width - fruit.Radius);
            fruit.PositionY = Layer.ContentSize.Height + fruit.Radius;

            if(CCRandom.Float_0_1() > .5f)
            {
                fruit.FruitColor = FruitColor.Red;
            }
            else
            {
                fruit.FruitColor = FruitColor.Yellow;
            }


			if(FruitSpawned != null)
			{
				FruitSpawned(fruit);
			}

		}
        private static bool FruitPolygonCollision(Fruit fruit, Polygon polygon, CCPoint polygonVelocity)
        {
            // Test whether the fruit collides
            bool didCollide = polygon.CollideAgainst(fruit.Collision);

            if (didCollide)
            {
                var circle = fruit.Collision;

                // Get the separation vector to reposition the fruit so it doesn't overlap the polygon
                var separation = CollisionResponse.GetSeparationVector(circle, polygon);
                fruit.Position += separation;

                // Adjust the fruit's Velocity to make it bounce:
                var normal = separation;
                normal.Normalize();
                fruit.Velocity = CollisionResponse.ApplyBounce(
                    fruit.Velocity, 
                    polygonVelocity, 
                    normal, 
                    GameCoefficients.FruitCollisionElasticity);

            }
            return didCollide;
        }
 private void Destroy(Fruit fruit)
 {
     fruit.RemoveFromParent();
     fruitList.Remove(fruit);
 }
        private void FruitVsBins(Fruit fruit)
        {
            foreach(var bin in fruitBins)
            {
                if(bin.Polygon.CollideAgainst(fruit.Collision))
                {
                    if(bin.FruitColor == fruit.FruitColor)
                    {
                        // award points:
                        score += 1 + fruit.ExtraPointValue;
                        scoreText.Score = score;
                        Destroy(fruit);
                        CCAudioEngine.SharedEngine.PlayEffect("FruitInBin");
                    }
                    else
                    {
                        EndGame();
                        CCAudioEngine.SharedEngine.PlayEffect("GameOver");
                    }

                    break;
                }
            }
        }
        private void FruitVsPaddle(Fruit fruit)
        {
            bool didCollideWithPaddle = FruitPolygonCollision(fruit, paddle.Polygon, paddle.Velocity);
            if (didCollideWithPaddle)
            {
                bool didAddPoint = fruit.TryAddExtraPointValue();
                if(didAddPoint)
                {
                    CCAudioEngine.SharedEngine.PlayEffect("FruitPaddleBounce");
                }

            }
        }
        private void HandleFruitAdded(Fruit fruit)
		{
			fruitList.Add (fruit);
			gameplayLayer.AddChild (fruit);
		}