@Override
    public void draw(Graphics g){
        
        if (state ==1){
            //<editor-fold defaultstate="collapsed" desc="SAT Polygon vs. Circle Test"> 
            cam.applyCamera(g);
            g.setColor(Color.WHITE.getRGB());            
            Vector2D point = cam.projectPoint(new Vector2D(Mouse.x, Mouse.y));             
            if(rect.containsPoint(point))g.setColor(Color.RED.getRGB());
            g.drawOval(point.x-2, point.y-2, 4, 4);                    
            g.drawRect(0, 0, GamePanel.WIDTH, GamePanel.HEIGHT);
            
            newCircle.setPosition(circle.getPosition());
            rect.debugDraw(g);
            rect1.debugDraw(g);           
            circle.debugDraw(g);           
            circle2.debugDraw(g);
            CollisionResult s;
            if((s=rect.collides(circle))!=null){
                g.setColor(Color.RED.getRGB());
                newCircle.setPosition(newCircle.getPosition().add(s.mts));
                newCircle.debugDraw(g);
            }
            if((s=rect.collides(circle2))!=null){
                circle2.setPosition(circle2.getPosition().add(s.mts));
                g.drawOval(s.poc[0].x-2,s.poc[0].y-2, 4, 4);
            }
            if((s=circle2.collides(circle))!=null){
                g.drawLine(circle.getPosition().x, circle.getPosition().y, circle.getPosition().add(s.mts).x, circle.getPosition().add(s.mts).y);
                g.drawOval(s.poc[0].x-2,s.poc[0].y-2, 4, 4);
            }
            if((s=rect.collides(rect1))!=null){
                rect1.setPosition(rect1.getPosition().add(s.mts));
                for(int i =0; i <s.poc.length; i ++){
                    if(s.poc[i]!=null)
                        g.drawOval(s.poc[i].x-2,s.poc[i].y-2, 4, 4);
                }
            }
            cam.unApplyCamera(g);
            g.setColor(new Color(77,77,77).getRGB());
            g.fillRect(0, 0, GamePanel.WIDTH, 80);
            g.setColor(Color.WHITE.getRGB());
            g.setFont("Arial",Graphics.BOLD,25);
            g.drawString("Separating Axis Theorem: Circle vs. Polygon - With Working Camera!", 10, 40);
            g.setFont("Arial",Graphics.PLAIN,15);
            g.drawString("W S A D to move the rectangle - Arrow Keys (Up & Down) to rotate", 10, 60);
            g.drawString("Mouse: " + new Vector2D(Mouse.x, Mouse.y).toString() + " Project: " + point.toString() +" Zoom: " + cam.getZoom(), 10,100);
            //</editor-fold>
        }
        else if (state ==2)
        {
            //<editor-fold defaultstate="collapsed" desc="Text Box testing">
            g.drawImage(0, 0, ImageLoader.BACKGROUND, GamePanel.WIDTH,GamePanel.HEIGHT);
            g.setColor(new Color(77,77,77).getRGB());
            g.fillRect(0, 0, GamePanel.WIDTH, 80);
            g.setColor(Color.WHITE.getRGB());
            g.setFont("Arial",Graphics.BOLD,25);
            g.drawString("Text Box Test bench", 10, 40);
            g.setFont("Arial",Graphics.PLAIN,15);
            g.drawString("Basic Chat infrastructure - has two text boxes which communicate with each other", 10, 60);
//</editor-fold>
        }           
        
                        
    }