public void drawFrame() //Must call this in game loop
    {
        canvas.drawImage(this.background.getImage(), 0, 0, null);

        createFiretraps(canvas, this.firetrapList);
        createZombies(canvas, this.zombieList);

        canvas.setColor(Color.BLACK);
        for(Obstacle ob : this.obstacleList)
        {
            final int VECTOR_LEN = (int) (this.radius*50);

            Polygon shadowPoly = new Polygon();

            if((isInRange(ob.topLeft))||(isInRange(ob.topRight))||(isInRange(ob.botLeft))||(isInRange(ob.botRight)))
            {
                ArrayList<Point> pointList = getProperPoints(getClosestPoints(ob.topLeft, ob.topRight, ob.botLeft, ob.botRight));

                Point boxPoint1 = pointList.get(0);
                Point boxPoint2 = pointList.get(1);

                Point slope1 = getSlope(this.player.getCenterLocation(), pointList.get(0));
                Point slope2 = getSlope(this.player.getCenterLocation(), pointList.get(1));

                Point shadowPoint1 = new Point(boxPoint1.x + (slope1.x * VECTOR_LEN), boxPoint1.y + (slope1.y * VECTOR_LEN));
                Point shadowPoint2 = new Point(boxPoint2.x + (slope2.x * VECTOR_LEN), boxPoint2.y + (slope2.y * VECTOR_LEN));;

                shadowPoly.addPoint(boxPoint1.x, boxPoint1.y);
                shadowPoly.addPoint(shadowPoint1.x, shadowPoint1.y);

                shadowPoly.addPoint(shadowPoint2.x, shadowPoint2.y);
                shadowPoly.addPoint(boxPoint2.x, boxPoint2.y);          
            }
            canvas.fillPolygon(shadowPoly);
        }

        createObstacles(canvas, this.obstacleList);

        for(Firetrap f : this.firetrapList)
        {
            if(f.isExplode() == true)
            {
                //Maybe do a thread sleep inbetween draws to get animation effect
                canvas.drawImage(f.getImage(), f.location.x , f.location.y, null);

                canvas.drawImage(f.getImage(), f.location.x+50 , f.location.y, null);

                canvas.drawImage(f.getImage(), f.location.x , f.location.y+50, null);
                canvas.drawImage(f.getImage(), f.location.x-50 , f.location.y, null);
                canvas.drawImage(f.getImage(), f.location.x , f.location.y-50, null);
                canvas.drawImage(f.getImage(), f.location.x+50 , f.location.y+50, null);
                canvas.drawImage(f.getImage(), f.location.x-50 , f.location.y+50, null);
                canvas.drawImage(f.getImage(), f.location.x+50 , f.location.y-50, null);
                canvas.drawImage(f.getImage(), f.location.x-50 , f.location.y-50, null);



	            //try {
		           //Thread.sleep(1000);
	            //} catch(InterruptedException e) {
		           //e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
	            //}
	            //this.firetrapList.remove(f);
            }
        }

        canvas.drawImage(this.player.image[player.direction], this.player.getLocation().x, this.player.getLocation().y, null);

        // lighting
        RadialGradientPaint gradient = new RadialGradientPaint(new Point2D.Float(this.player.getCenterLocation().x,
                this.player.getCenterLocation().y),	  
                radius * 50, dist, colors);

        canvas.setPaint(gradient);
        canvas.fillRect(0, 0, 10000, 10000);

    }