package vagnerr;
import robocode.*;
import java.awt.Color;
import java.lang.*;


/**
 * Test1 - a robot by (your name here)
 */
public class Wander2 extends AdvancedRobot
{
	/**
	 * run: Test1's default behavior
	 */
	boolean targeted = false;
	public void run() {
		// After trying out your robot, try uncommenting the import at the top,
		// and the next line:
		setColors(Color.red,Color.blue,Color.green);
		setAdjustGunForRobotTurn(true);
		setAdjustRadarForGunTurn(true);
		setAdjustRadarForRobotTurn(true);
		
		addCustomEvent(
			new Condition("triggergunscold"){
				public boolean test(){
					return (getGunHeat() == 0 && targeted && getGunTurnRemaining() ==0);
				};
			}
		);
				
		while(true) {
//			setTurnLeft(180);
//			setMaxVelocity(5);
//			setTurnRadarRight(36000);
			back(100);
			turnRadarRight(360);
			turnLeft(45);
			//execute();
		}
	}

	public void onWin(WinEvent e){
		for (int i = 0; i< 50; i++)
		{
			turnRight(30);
			turnGunLeft(30);
		}
	}
	/**
	 * onScannedRobot: What to do when you see another robot
	 */
	public void onScannedRobot(ScannedRobotEvent e) {
		if(targeted) return;	// we are busy firing at something else
		targeted = true;
		
		double angleB = getHeading() + e.getBearing() - e.getHeading() - 180.0;
		
		//the constantin this equation should be 11 (the speed of a bullet) but for some reason 16
		//seems a little more accurate. Go figure :-}
		double angleA = Math.toDegrees(Math.asin( (e.getVelocity() * Math.sin(Math.toRadians(angleB)) ) / 16.0 ));
		double turnangle = getRelAngle( e.getBearing() + angleA + getHeading() - getGunHeading() );

				turnGunRight(turnangle);
		setTurnRadarRight(90);
		//fire(3);
		scan();
	}

	public double getRelAngle(double angle){
		if (angle > -180 && angle <=  180)
			return angle;
		double newangle = angle;
		while(newangle <= -180)
			newangle +=360;
		while (newangle > 180)
			newangle -= 360;
		return newangle;
	}
	/**
	 * onHitByBullet: What to do when you're hit by a bullet
	 */
	public void onHitByBullet(HitByBulletEvent e) {
		//turnLeft(90 - e.getBearing());
	}
	public void onCustomEvent(CustomEvent e)
	{
		// If our custom event "triggerhit" went off,
		if (e.getCondition().getName().equals("triggergunscold"))
		{
			fire(3);
			targeted = false;
		}
	}
}
