Example #1
0
        public void collideWithPaddle(Paddle paddle)
        {
            CCRect paddleRect = paddle.rect();

            paddleRect.Origin.X += paddle.Position.X;
            paddleRect.Origin.Y += paddle.Position.Y;

            float lowY  = paddleRect.MinY;
            float midY  = paddleRect.MidY;
            float highY = paddleRect.MaxY;

            float leftX  = paddleRect.MinX;
            float rightX = paddleRect.MaxX;

            if (Position.X > leftX && Position.X < rightX)
            {
                bool  hit         = false;
                float angleOffset = 0.0f;

                if (Position.Y > midY && Position.Y <= highY + radius())
                {
                    Position    = new CCPoint(Position.X, highY + radius());
                    hit         = true;
                    angleOffset = (float)Math.PI / 2;
                }
                else if (Position.Y < midY && Position.Y >= lowY - radius())
                {
                    Position    = new CCPoint(Position.X, lowY - radius());
                    hit         = true;
                    angleOffset = -(float)Math.PI / 2;
                }

                if (hit)
                {
                    float hitAngle       = (paddle.Position - Position).Angle + angleOffset;
                    float scalarVelocity = m_velocity.Length * 1.05f;
                    float velocityAngle  = -m_velocity.Angle + 0.5f * hitAngle;

                    m_velocity = CCPoint.ForAngle(velocityAngle) * scalarVelocity;
                }
            }
        }