@Override
	public void draw(Graphics2D g2d) {
		AffineTransform at = new AffineTransform();
		at.translate(loc.x - turrets[upg].getWidth() / 2,
				loc.y - turrets[upg].getHeight() / 2);

		if (isFailing())
			g2d.drawImage(turrets[0], at, null);
		else {
			if (faction == 1) {
				g2d.drawImage(turrets[upg], at, null);
				if (hasDragon) {
					g2d.drawImage(dragonT, (int) loc.x, (int) loc.y
							- turrets[0].getHeight() / 5 * 4,
							turrets[0].getWidth() / 6,
							turrets[0].getHeight() / 2, null);
				}
				g2d.drawImage(bHouse, (int) loc.x - turrets[0].getWidth() / 8,
						(int) loc.y - turrets[1].getHeight() / 3,
						turrets[0].getWidth() / 4, turrets[0].getHeight() / 4,
						null);
				if (hasChurch) {
					g2d.drawImage(blChurch,
							(int) loc.x - (turrets[0].getWidth() / 3),
							(int) loc.y - turrets[0].getHeight() / 2,
							turrets[0].getWidth() / 4,
							turrets[0].getHeight() / 3, null);
				}
			}

			else {
				g2d.drawImage(turrets[upg], at, null);
				if (hasDragon) {
					g2d.drawImage(dragonT,
							(int) loc.x - (turrets[upg].getWidth() / 8),
							(int) loc.y - turrets[upg].getHeight() / 5 * 4,
							turrets[upg].getWidth() / 6,
							turrets[upg].getHeight() / 2, null);
				}
				g2d.drawImage(rHouse, (int) loc.x,
						(int) loc.y - turrets[upg].getHeight() / 3,
						turrets[upg].getWidth() / 4,
						turrets[upg].getHeight() / 4, null);
				if (hasChurch) {
					g2d.drawImage(reChurch,
							(int) loc.x - (turrets[upg].getWidth() / 3),
							(int) loc.y - turrets[upg].getHeight() / 2,
							turrets[upg].getWidth() / 4,
							turrets[upg].getHeight() / 3, null);
				}
			}
		}
		if (this.highlighted) { // need a health bar to indicate they are
								// highlighted
			float remHPs = ((float) this.hp / (float) this.hpLimits[upg])
					* (float) 100;
			g2d.setColor(Color.black);
			g2d.fillRect((int) this.getLoc().x, (int) this.getLoc().y - 35,
					100, 5);
			if (this.hpLimits[upg] / this.hp < 1.5)
				g2d.setColor(Color.green);
			else if (this.hpLimits[upg] / this.hp < 3)
				g2d.setColor(Color.yellow);
			else
				g2d.setColor(Color.red);
			g2d.fillRect((int) this.getLoc().x, (int) this.getLoc().y - 35,
					(int) remHPs, 5);
		}
	}