public void draw(Graphics2D g2d){		

		//Save affine transformation
		AffineTransform savedState = new AffineTransform(g2d.getTransform());

		//Construct the local system
		AffineTransform localCoordinateSystem = constructLocalSystem(g2d.getTransform());

		//Set the affine transformation
		g2d.setTransform(localCoordinateSystem);

		if(visible){
			
			//If they have a 
			if(sprite != null){				
				//Note to self: drawImage does not use a position, width and height. Instead it uses a top left corner position and a bottom right corner position.
				//g2d.drawImage(image, (int)(-1*(width/2)), (int)(-1*(height/2)), (int)width/2, (int)height/2, 0, 0, image.getWidth(), image.getHeight(), null);
				sprite.draw(g2d, 0, 0, (int)width, (int)height);
			}
			else if(shape != null){
				//Set the color
				g2d.setColor(color);
				//Fill the shape
				g2d.fill(shape);
			}

			//If this obj is running
			if(isRunning()){
				//Draw it's state
				getCurrentState().drawEffects(g2d);
			}
		}

		//Revert back to saved coordinate system.
		g2d.setTransform(savedState);
	}