@Override
	public void draw(Graphics2D g2d) {	
		AffineTransform at = new AffineTransform();
		g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .90f));
		BufferedImage curr = GifHandler.BlackArcherWalk.sequence[count];
		if (Math.cos(dir) < 0) {
			at.translate(loc.x + curr.getWidth()/2, loc.y - curr.getHeight()/2);
			at.scale(-1, 1);
		}
		else {
			at.translate(loc.x - curr.getWidth()/2, loc.y - curr.getHeight()/2);
		}
		if (TDPanel.frame() % 5 == 0) {
			if(this.getFaction()==1){ // black team
			count++;
			count %= GifHandler.BlackArcherWalk.sequence.length;
			}
			else{ // red team
				count++;
				count %= GifHandler.RedArcherWalk.sequence.length;
			}
		}
		if(distLeft >= 0){ // not walking
		if(this.getFaction() == 1){ // choose which soldier to draw based on faction
		g2d.drawImage(GifHandler.BlackArcherWalk.sequence[count], at, null);
		}
		else
			g2d.drawImage(GifHandler.RedArcherWalk.sequence[count], at, null);
		}
		else{
			if(this.getFaction() == 1){ // choose which soldier to draw based on faction
				g2d.drawImage(GifHandler.BlackArcher.sequence[count], at, null);
				}
				else
					g2d.drawImage(GifHandler.RedArcher.sequence[count], at, null);			
		}
		if(this.highlighted){ // need a health bar to indicate they are highlighted
			float remHPs = ((float) this.hp / (float) this.maxHP) * (float) 40;
			g2d.setColor(Color.black);
			g2d.fillRect((int)this.getLoc().x, (int)this.getLoc().y-35, 40, 5);
			if(this.maxHP/this.hp < 1.5)
				g2d.setColor(Color.green);
			else if(this.maxHP/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);
		}
		//DEBUG FACTION: MSG
		//g2d.drawString("" + fac, (int) at.getTranslateX(), (int) at.getTranslateY());

		g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
	}