public void drawTerrainData(JNIBWAPI bwapi) {
		// iterate through all the base locations and draw their outlines
		for (BaseLocation bl : bwapi.getMap().getBaseLocations()) {
			Position p = bl.getPosition();
			
			// draw outline of base location
			Position otherCorner = p.translated(new Position(4, 3, PosType.BUILD));
			bwapi.drawBox(p, otherCorner, BWColor.Blue, false, false);
			
			// if this is an island expansion, draw a yellow circle around the base location
			if (bl.isIsland()) {
				bwapi.drawCircle(p.translated(new Position(2, 1, PosType.BUILD)), 80, BWColor.Yellow,
						false, false);
			}
			
			// draw a circle at each mineral patch and a box at each vespene geyser
			for (Unit u : bwapi.getNeutralUnits()) {
				UnitType ut = u.getType();
				if (ut.isResourceContainer()) {
					if (ut.isMineralField()) {
						// Minerals
						bwapi.drawCircle(u.getPosition(), 30, BWColor.Cyan, false, false);
					} else {
						// Geysers
						bwapi.drawBox(u.getTopLeft(), u.getBottomRight(), BWColor.Orange, false,
								false);
					}
				}
			}
		}
		
		// Iterate through all the regions and draw the polygon outline of it in green.
		for (Region r : getRegions()) {
			Position[] polygon = r.getPolygon();
			for (int i = 0; i < polygon.length; i++) {
				Position point1 = polygon[i];
				Position point2 = polygon[(i + 1) % polygon.length];
				bwapi.drawLine(point1, point2, BWColor.Green, false);
			}
		}
		
		// Visualise the chokepoints with red lines
		for (ChokePoint cp : getChokePoints()) {
			Position point1 = cp.getFirstSide();
			Position point2 = cp.getSecondSide();
			bwapi.drawLine(point1, point2, BWColor.Red, false);
		}
	}