![JAR search and dependency download from the Maven repository](/logo.png)
robocode.AdvancedRobot Maven / Gradle / Ivy
Show all versions of robocode.api Show documentation
/*
* Copyright (c) 2001-2023 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* https://robocode.sourceforge.io/license/epl-v10.html
*/
package robocode;
import robocode.robotinterfaces.IAdvancedEvents;
import robocode.robotinterfaces.IAdvancedRobot;
import robocode.robotinterfaces.peer.IAdvancedRobotPeer;
import java.io.File;
import java.util.Vector;
/**
* A more advanced type of robot than Robot that allows non-blocking calls,
* custom events, and writes to the filesystem.
*
* If you have not already, you should create a {@link Robot} first.
*
* @see
* robocode.sourceforge.net
* @see
* Building your first robot
*
* @see JuniorRobot
* @see Robot
* @see TeamRobot
* @see RateControlRobot
* @see Droid
* @see BorderSentry
*
* @author Mathew A. Nelson (original)
* @author Flemming N. Larsen (contributor)
* @author Robert D. Maupin (contributor)
* @author Pavel Savara (contributor)
*/
public class AdvancedRobot extends _AdvancedRadiansRobot implements IAdvancedRobot, IAdvancedEvents {
/**
* Returns the distance remaining in the robot's current move measured in
* pixels.
*
* This call returns both positive and negative values. Positive values
* means that the robot is currently moving forwards. Negative values means
* that the robot is currently moving backwards. If the returned value is 0,
* the robot currently stands still.
*
* @return the distance remaining in the robot's current move measured in
* pixels.
* @see #getTurnRemaining() getTurnRemaining()
* @see #getTurnRemainingRadians() getTurnRemainingRadians()
* @see #getGunTurnRemaining() getGunTurnRemaining()
* @see #getGunTurnRemainingRadians() getGunTurnRemainingRadians()
* @see #getRadarTurnRemaining() getRadarTurnRemaining()
* @see #getRadarTurnRemainingRadians() getRadarTurnRemainingRadians()
*/
public double getDistanceRemaining() {
if (peer != null) {
return peer.getDistanceRemaining();
}
uninitializedException();
return 0; // never called
}
/**
* Returns the angle remaining in the robots's turn, in degrees.
*
* This call returns both positive and negative values. Positive values
* means that the robot is currently turning to the right. Negative values
* means that the robot is currently turning to the left. If the returned
* value is 0, the robot is currently not turning.
*
* @return the angle remaining in the robots's turn, in degrees
* @see #getTurnRemainingRadians() getTurnRemainingRadians()
* @see #getDistanceRemaining() getDistanceRemaining()
* @see #getGunTurnRemaining() getGunTurnRemaining()
* @see #getGunTurnRemainingRadians() getGunTurnRemainingRadians()
* @see #getRadarTurnRemaining() getRadarTurnRemaining()
* @see #getRadarTurnRemainingRadians() getRadarTurnRemainingRadians()
*/
public double getTurnRemaining() {
if (peer != null) {
return Math.toDegrees(peer.getBodyTurnRemaining());
}
uninitializedException();
return 0; // never called
}
/**
* Returns the angle remaining in the gun's turn, in degrees.
*
* This call returns both positive and negative values. Positive values
* means that the gun is currently turning to the right. Negative values
* means that the gun is currently turning to the left. If the returned
* value is 0, the gun is currently not turning.
*
* @return the angle remaining in the gun's turn, in degrees
* @see #getGunTurnRemainingRadians() getGunTurnRemainingRadians()
* @see #getDistanceRemaining() getDistanceRemaining()
* @see #getTurnRemaining() getTurnRemaining()
* @see #getTurnRemainingRadians() getTurnRemainingRadians()
* @see #getRadarTurnRemaining() getRadarTurnRemaining()
* @see #getRadarTurnRemainingRadians() getRadarTurnRemainingRadians()
*/
public double getGunTurnRemaining() {
if (peer != null) {
return Math.toDegrees(peer.getGunTurnRemaining());
}
uninitializedException();
return 0; // never called
}
/**
* Returns the angle remaining in the radar's turn, in degrees.
*
* This call returns both positive and negative values. Positive values
* means that the radar is currently turning to the right. Negative values
* means that the radar is currently turning to the left. If the returned
* value is 0, the radar is currently not turning.
*
* @return the angle remaining in the radar's turn, in degrees
* @see #getRadarTurnRemainingRadians() getRadarTurnRemainingRadians()
* @see #getDistanceRemaining() getDistanceRemaining()
* @see #getGunTurnRemaining() getGunTurnRemaining()
* @see #getGunTurnRemainingRadians() getGunTurnRemainingRadians()
* @see #getRadarTurnRemaining() getRadarTurnRemaining()
* @see #getRadarTurnRemainingRadians() getRadarTurnRemainingRadians()
*/
public double getRadarTurnRemaining() {
if (peer != null) {
return Math.toDegrees(peer.getRadarTurnRemaining());
}
uninitializedException();
return 0; // never called
}
/**
* Sets the robot to move ahead (forward) by distance measured in pixels
* when the next execution takes place.
*
* This call returns immediately, and will not execute until you call
* {@link #execute()} or take an action that executes.
*
* Note that both positive and negative values can be given as input, where
* positive values means that the robot is set to move ahead, and negative
* values means that the robot is set to move back. If 0 is given as input,
* the robot will stop its movement, but will have to decelerate
* till it stands still, and will thus not be able to stop its movement
* immediately, but eventually.
*
* Example:
*
* // Set the robot to move 50 pixels ahead
* setAhead(50);
*
* // Set the robot to move 100 pixels back
* // (overrides the previous order)
* setAhead(-100);
*
* ...
* // Executes the last setAhead()
* execute();
*
*
* @param distance the distance to move measured in pixels.
* If {@code distance} > 0 the robot is set to move ahead.
* If {@code distance} < 0 the robot is set to move back.
* If {@code distance} = 0 the robot is set to stop its movement.
* @see #ahead(double) ahead(double)
* @see #back(double) back(double)
* @see #setBack(double)
*/
public void setAhead(double distance) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setMove(distance);
} else {
uninitializedException();
}
}
/**
* Sets the robot to move back by distance measured in pixels when the next
* execution takes place.
*
* This call returns immediately, and will not execute until you call
* {@link #execute()} or take an action that executes.
*
* Note that both positive and negative values can be given as input, where
* positive values means that the robot is set to move back, and negative
* values means that the robot is set to move ahead. If 0 is given as input,
* the robot will stop its movement, but will have to decelerate
* till it stands still, and will thus not be able to stop its movement
* immediately, but eventually.
*
* Example:
*
* // Set the robot to move 50 pixels back
* setBack(50);
*
* // Set the robot to move 100 pixels ahead
* // (overrides the previous order)
* setBack(-100);
*
* ...
* // Executes the last setBack()
* execute();
*
*
* @param distance the distance to move measured in pixels.
* If {@code distance} > 0 the robot is set to move back.
* If {@code distance} < 0 the robot is set to move ahead.
* If {@code distance} = 0 the robot is set to stop its movement.
* @see #back(double) back(double)
* @see #ahead(double) ahead(double)
* @see #setAhead(double)
*/
public void setBack(double distance) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setMove(-distance);
} else {
uninitializedException();
}
}
/**
* Sets the robot's body to turn left by degrees when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's body is set to turn right
* instead of left.
*
* Example:
*
* // Set the robot to turn 180 degrees to the left
* setTurnLeft(180);
*
* // Set the robot to turn 90 degrees to the right instead of left
* // (overrides the previous order)
* setTurnLeft(-90);
*
* ...
* // Executes the last setTurnLeft()
* execute();
*
*
* @param degrees the amount of degrees to turn the robot's body to the left.
* If {@code degrees} > 0 the robot is set to turn left.
* If {@code degrees} < 0 the robot is set to turn right.
* If {@code degrees} = 0 the robot is set to stop turning.
* @see #setTurnLeftRadians(double) setTurnLeftRadians(double)
* @see #turnLeft(double) turnLeft(double)
* @see #turnLeftRadians(double) turnLeftRadians(double)
* @see #turnRight(double) turnRight(double)
* @see #turnRightRadians(double) turnRightRadians(double)
* @see #setTurnRight(double) setTurnRight(double)
* @see #setTurnRightRadians(double) setTurnRightRadians(double)
*/
public void setTurnLeft(double degrees) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setTurnBody(-Math.toRadians(degrees));
} else {
uninitializedException();
}
}
/**
* Sets the robot's body to turn right by degrees when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's body is set to turn left
* instead of right.
*
* Example:
*
* // Set the robot to turn 180 degrees to the right
* setTurnRight(180);
*
* // Set the robot to turn 90 degrees to the left instead of right
* // (overrides the previous order)
* setTurnRight(-90);
*
* ...
* // Executes the last setTurnRight()
* execute();
*
*
* @param degrees the amount of degrees to turn the robot's body to the right.
* If {@code degrees} > 0 the robot is set to turn right.
* If {@code degrees} < 0 the robot is set to turn left.
* If {@code degrees} = 0 the robot is set to stop turning.
* @see #setTurnRightRadians(double) setTurnRightRadians(double)
* @see #turnRight(double) turnRight(double)
* @see #turnRightRadians(double) turnRightRadians(double)
* @see #turnLeft(double) turnLeft(double)
* @see #turnLeftRadians(double) turnLeftRadians(double)
* @see #setTurnLeft(double) setTurnLeft(double)
* @see #setTurnLeftRadians(double) setTurnLeftRadians(double)
*/
public void setTurnRight(double degrees) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setTurnBody(Math.toRadians(degrees));
} else {
uninitializedException();
}
}
/**
* Sets the gun to fire a bullet when the next execution takes place.
* The bullet will travel in the direction the gun is pointing.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* The specified bullet power is an amount of energy that will be taken from
* the robot's energy. Hence, the more power you want to spend on the
* bullet, the more energy is taken from your robot.
*
* The bullet will do (4 * power) damage if it hits another robot. If power
* is greater than 1, it will do an additional 2 * (power - 1) damage.
* You will get (3 * power) back if you hit the other robot. You can call
* Rules#getBulletDamage(double)} for getting the damage that a
* bullet with a specific bullet power will do.
*
* The specified bullet power should be between
* {@link Rules#MIN_BULLET_POWER} and {@link Rules#MAX_BULLET_POWER}.
*
* Note that the gun cannot fire if the gun is overheated, meaning that
* {@link #getGunHeat()} returns a value > 0.
*
* An event is generated when the bullet hits a robot, wall, or another
* bullet.
*
* Example:
*
* // Fire a bullet with maximum power if the gun is ready
* if (getGunHeat() == 0) {
* setFire(Rules.MAX_BULLET_POWER);
* }
* ...
* execute();
*
*
* @param power the amount of energy given to the bullet, and subtracted
* from the robot's energy.
* @see #setFireBullet(double)
* @see #fire(double) fire(double)
* @see #fireBullet(double) fireBullet(double)
* @see #getGunHeat() getGunHeat()
* @see #getGunCoolingRate() getGunCoolingRate()
* @see #onBulletHit(BulletHitEvent) onBulletHit(BulletHitEvent)
* @see #onBulletHitBullet(BulletHitBulletEvent) onBulletHitBullet(BulletHitBulletEvent)
* @see #onBulletMissed(BulletMissedEvent) onBulletMissed(BulletMissedEvent)
*/
public void setFire(double power) {
if (peer != null) {
peer.setFire(power);
} else {
uninitializedException();
}
}
/**
* Sets the gun to fire a bullet when the next execution takes place.
* The bullet will travel in the direction the gun is pointing.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* The specified bullet power is an amount of energy that will be taken from
* the robot's energy. Hence, the more power you want to spend on the
* bullet, the more energy is taken from your robot.
*
* The bullet will do (4 * power) damage if it hits another robot. If power
* is greater than 1, it will do an additional 2 * (power - 1) damage.
* You will get (3 * power) back if you hit the other robot. You can call
* {@link Rules#getBulletDamage(double)} for getting the damage that a
* bullet with a specific bullet power will do.
*
* The specified bullet power should be between
* {@link Rules#MIN_BULLET_POWER} and {@link Rules#MAX_BULLET_POWER}.
*
* Note that the gun cannot fire if the gun is overheated, meaning that
* {@link #getGunHeat()} returns a value > 0.
*
* A event is generated when the bullet hits a robot
* ({@link BulletHitEvent}), wall ({@link BulletMissedEvent}), or another
* bullet ({@link BulletHitBulletEvent}).
*
* Example:
*
* Bullet bullet = null;
*
* // Fire a bullet with maximum power if the gun is ready
* if (getGunHeat() == 0) {
* bullet = setFireBullet(Rules.MAX_BULLET_POWER);
* }
* ...
* execute();
* ...
* // Get the velocity of the bullet
* if (bullet != null) {
* double bulletVelocity = bullet.getVelocity();
* }
*
*
* @param power the amount of energy given to the bullet, and subtracted
* from the robot's energy.
* @return a {@link Bullet} that contains information about the bullet if it
* was actually fired, which can be used for tracking the bullet after it
* has been fired. If the bullet was not fired, {@code null} is returned.
* @see #setFire(double)
* @see Bullet
* @see #fire(double) fire(double)
* @see #fireBullet(double) fireBullet(double)
* @see #getGunHeat() getGunHeat()
* @see #getGunCoolingRate() getGunCoolingRate()
* @see #onBulletHit(BulletHitEvent) onBulletHit(BulletHitEvent)
* @see #onBulletHitBullet(BulletHitBulletEvent) onBulletHitBullet(BulletHitBulletEvent)
* @see #onBulletMissed(BulletMissedEvent) onBulletMissed(BulletMissedEvent)
*/
public Bullet setFireBullet(double power) {
if (peer != null) {
return peer.setFire(power);
}
uninitializedException();
return null;
}
/**
* Registers a custom event to be called when a condition is met.
* When you are finished with your condition or just want to remove it you
* must call {@link #removeCustomEvent(Condition)}.
*
* Example:
*
* // Create the condition for our custom event
* Condition triggerHitCondition = new Condition("triggerhit") {
* public boolean test() {
* return (getEnergy() <= trigger);
* }
* }
*
* // Add our custom event based on our condition
* addCustomEvent(triggerHitCondition);
*
*
* @param condition the condition that must be met.
* @throws NullPointerException if the condition parameter has been set to
* {@code null}.
* @see Condition
* @see #removeCustomEvent(Condition)
*/
public void addCustomEvent(Condition condition) {
if (condition == null) {
throw new NullPointerException("the condition cannot be null");
}
if (peer != null) {
((IAdvancedRobotPeer) peer).addCustomEvent(condition);
} else {
uninitializedException();
}
}
/**
* Removes a custom event that was previously added by calling
* {@link #addCustomEvent(Condition)}.
*
* Example:
*
* // Create the condition for our custom event
* Condition triggerHitCondition = new Condition("triggerhit") {
* public boolean test() {
* return (getEnergy() <= trigger);
* }
* }
*
* // Add our custom event based on our condition
* addCustomEvent(triggerHitCondition);
* ...
* do something with your robot
* ...
* // Remove the custom event based on our condition
* removeCustomEvent(triggerHitCondition);
*
*
* @param condition the condition that was previous added and that must be
* removed now.
* @throws NullPointerException if the condition parameter has been set to
* {@code null}.
* @see Condition
* @see #addCustomEvent(Condition)
*/
public void removeCustomEvent(Condition condition) {
if (condition == null) {
throw new NullPointerException("the condition cannot be null");
}
if (peer != null) {
((IAdvancedRobotPeer) peer).removeCustomEvent(condition);
} else {
uninitializedException();
}
}
/**
* Clears out any pending events in the robot's event queue immediately.
*
* @see #getAllEvents()
*/
public void clearAllEvents() {
if (peer != null) {
((IAdvancedRobotPeer) peer).clearAllEvents();
} else {
uninitializedException();
}
}
/**
* Executes any pending actions, or continues executing actions that are
* in process. This call returns after the actions have been started.
*
* Note that advanced robots must call this function in order to
* execute pending set* calls like e.g. {@link #setAhead(double)},
* {@link #setFire(double)}, {@link #setTurnLeft(double)} etc. Otherwise,
* these calls will never get executed.
*
* In this example the robot will move while turning:
*
* setTurnRight(90);
* setAhead(100);
* execute();
*
* while (getDistanceRemaining() > 0 && getTurnRemaining() > 0) {
* execute();
* }
*
*/
public void execute() {
if (peer != null) {
peer.execute();
} else {
uninitializedException();
}
}
/**
* Returns a vector containing all events currently in the robot's queue.
* You might, for example, call this while processing another event.
*
* Example:
*
* for (Event event : getAllEvents()) {
* if (event instanceof HitRobotEvent) {
* // do something with the event
* } else if (event instanceof HitByBulletEvent) {
* // do something with the event
* }
* }
*
*
* @return a vector containing all events currently in the robot's queue
* @see Event
* @see #clearAllEvents()
* @see #getStatusEvents()
* @see #getScannedRobotEvents()
* @see #getBulletHitEvents()
* @see #getBulletMissedEvents()
* @see #getBulletHitBulletEvents()
* @see #getRobotDeathEvents()
*/
public Vector getAllEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getAllEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all BulletHitBulletEvents currently in the
* robot's queue. You might, for example, call this while processing another
* event.
*
* Example:
*
* for (BulletHitBulletEvent event : getBulletHitBulletEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all BulletHitBulletEvents currently in the
* robot's queue
* @see #onBulletHitBullet(BulletHitBulletEvent) onBulletHitBullet(BulletHitBulletEvent)
* @see BulletHitBulletEvent
* @see #getAllEvents()
*/
public Vector getBulletHitBulletEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getBulletHitBulletEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all BulletHitEvents currently in the robot's
* queue. You might, for example, call this while processing another event.
*
* Example:
*
* for (BulletHitEvent event: getBulletHitEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all BulletHitEvents currently in the robot's
* queue
* @see #onBulletHit(BulletHitEvent) onBulletHit(BulletHitEvent)
* @see BulletHitEvent
* @see #getAllEvents()
*/
public Vector getBulletHitEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getBulletHitEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all BulletMissedEvents currently in the
* robot's queue. You might, for example, call this while processing another
* event.
*
* Example:
*
* for (BulletMissedEvent event : getBulletMissedEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all BulletMissedEvents currently in the
* robot's queue
* @see #onBulletMissed(BulletMissedEvent) onBulletMissed(BulletMissedEvent)
* @see BulletMissedEvent
* @see #getAllEvents()
*/
public Vector getBulletMissedEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getBulletMissedEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a file representing a data directory for the robot, which can be
* written to using {@link RobocodeFileOutputStream} or
* {@link RobocodeFileWriter}.
*
* The system will automatically create the directory for you, so you do not
* need to create it by yourself.
*
* @return a file representing the data directory for your robot
* @see #getDataFile(String)
* @see RobocodeFileOutputStream
* @see RobocodeFileWriter
*/
public File getDataDirectory() {
if (peer != null) {
return ((IAdvancedRobotPeer) peer).getDataDirectory();
}
uninitializedException();
return null; // never called
}
/**
* Returns a file in your data directory that you can write to using
* {@link RobocodeFileOutputStream} or {@link RobocodeFileWriter}.
*
* The system will automatically create the directory for you, so you do not
* need to create it by yourself.
*
* Please notice that the max. size of your data file is set to 200000
* (~195 KB).
*
* See the {@code sample.SittingDuck} to see an example of how to use this
* method.
*
* @param filename the file name of the data file for your robot
* @return a file representing the data file for your robot or null if the data
* file could not be created due to an error.
* @see #getDataDirectory()
* @see RobocodeFileOutputStream
* @see RobocodeFileWriter
*/
public File getDataFile(String filename) {
if (peer != null) {
return ((IAdvancedRobotPeer) peer).getDataFile(filename);
}
uninitializedException();
return null; // never called
}
/**
* Returns the data quota available in your data directory, i.e. the amount
* of bytes left in the data directory for the robot.
*
* @return the amount of bytes left in the robot's data directory
* @see #getDataDirectory()
* @see #getDataFile(String)
*/
public long getDataQuotaAvailable() {
if (peer != null) {
return ((IAdvancedRobotPeer) peer).getDataQuotaAvailable();
}
uninitializedException();
return 0; // never called
}
/**
* Returns the current priority of a class of events.
* An event priority is a value from 0 - 99. The higher value, the higher
* priority.
*
* Example:
*
* int myHitRobotPriority = getEventPriority("HitRobotEvent");
*
*
* The default priorities are, from highest to lowest:
*
* {@link RoundEndedEvent}: 100 (reserved)
* {@link BattleEndedEvent}: 100 (reserved)
* {@link WinEvent}: 100 (reserved)
* {@link SkippedTurnEvent}: 100 (reserved)
* {@link StatusEvent}: 99
* Key and mouse events: 98
* {@link CustomEvent}: 80 (default value)
* {@link MessageEvent}: 75
* {@link RobotDeathEvent}: 70
* {@link BulletMissedEvent}: 60
* {@link BulletHitBulletEvent}: 55
* {@link BulletHitEvent}: 50
* {@link HitByBulletEvent}: 40
* {@link HitWallEvent}: 30
* {@link HitRobotEvent}: 20
* {@link ScannedRobotEvent}: 10
* {@link PaintEvent}: 5
* {@link DeathEvent}: -1 (reserved)
*
*
* @param eventClass the name of the event class (string)
* @return the current priority of a class of events
* @see #setEventPriority(String, int)
*/
public int getEventPriority(String eventClass) {
if (peer != null) {
return ((IAdvancedRobotPeer) peer).getEventPriority(eventClass);
}
uninitializedException();
return 0; // never called
}
/**
* Returns a vector containing all HitByBulletEvents currently in the
* robot's queue. You might, for example, call this while processing
* another event.
*
* Example:
*
* for (HitByBulletEvent event : getHitByBulletEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all HitByBulletEvents currently in the
* robot's queue
* @see #onHitByBullet(HitByBulletEvent) onHitByBullet(HitByBulletEvent)
* @see HitByBulletEvent
* @see #getAllEvents()
*/
public Vector getHitByBulletEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getHitByBulletEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all HitRobotEvents currently in the robot's
* queue. You might, for example, call this while processing another event.
*
* Example:
*
* for (HitRobotEvent event : getHitRobotEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all HitRobotEvents currently in the robot's
* queue
* @see #onHitRobot(HitRobotEvent) onHitRobot(HitRobotEvent)
* @see HitRobotEvent
* @see #getAllEvents()
*/
public Vector getHitRobotEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getHitRobotEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all HitWallEvents currently in the robot's
* queue. You might, for example, call this while processing another event.
*
* Example:
*
* for (HitWallEvent event : getHitWallEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all HitWallEvents currently in the robot's
* queue
* @see #onHitWall(HitWallEvent) onHitWall(HitWallEvent)
* @see HitWallEvent
* @see #getAllEvents()
*/
public Vector getHitWallEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getHitWallEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all RobotDeathEvents currently in the robot's
* queue. You might, for example, call this while processing another event.
*
* Example:
*
* for (RobotDeathEvent event : getRobotDeathEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all RobotDeathEvents currently in the robot's
* queue
* @see #onRobotDeath(RobotDeathEvent) onRobotDeath(RobotDeathEvent)
* @see RobotDeathEvent
* @see #getAllEvents()
*/
public Vector getRobotDeathEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getRobotDeathEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all ScannedRobotEvents currently in the
* robot's queue. You might, for example, call this while processing another
* event.
*
* Example:
*
* for (ScannedRobotEvent event : getScannedRobotEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all ScannedRobotEvents currently in the
* robot's queue
* @see #onScannedRobot(ScannedRobotEvent) onScannedRobot(ScannedRobotEvent)
* @see ScannedRobotEvent
* @see #getAllEvents()
*/
public Vector getScannedRobotEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getScannedRobotEvents());
}
uninitializedException();
return null; // never called
}
/**
* Returns a vector containing all StatusEvents currently in the robot's
* queue. You might, for example, call this while processing another event.
*
* Example:
*
* for (StatusEvent event : getStatusEvents()) {
* // do something with the event
* }
*
*
* @return a vector containing all StatusEvents currently in the robot's queue
* @see #onStatus(StatusEvent) onStatus(StatusEvent)
* @see StatusEvent
* @see #getAllEvents()
* @since 1.6.1
*/
public Vector getStatusEvents() {
if (peer != null) {
return new Vector(((IAdvancedRobotPeer) peer).getStatusEvents());
}
uninitializedException();
return null; // never called
}
/**
* Checks if the gun is set to adjust for the robot turning, i.e. to turn
* independent from the robot's body turn.
*
* This call returns {@code true} if the gun is set to turn independent of
* the turn of the robot's body. Otherwise, {@code false} is returned,
* meaning that the gun is set to turn with the robot's body turn.
*
* @return {@code true} if the gun is set to turn independent of the robot
* turning; {@code false} if the gun is set to turn with the robot
* turning
* @see #setAdjustGunForRobotTurn(boolean) setAdjustGunForRobotTurn(boolean)
* @see #isAdjustRadarForRobotTurn()
* @see #isAdjustRadarForGunTurn()
*/
public boolean isAdjustGunForRobotTurn() {
if (peer != null) {
return ((IAdvancedRobotPeer) peer).isAdjustGunForBodyTurn();
}
uninitializedException();
return false; // never called
}
/**
* Checks if the radar is set to adjust for the robot turning, i.e. to turn
* independent from the robot's body turn.
*
* This call returns {@code true} if the radar is set to turn independent of
* the turn of the robot. Otherwise, {@code false} is returned, meaning that
* the radar is set to turn with the robot's turn.
*
* @return {@code true} if the radar is set to turn independent of the robot
* turning; {@code false} if the radar is set to turn with the robot
* turning
* @see #setAdjustRadarForRobotTurn(boolean) setAdjustRadarForRobotTurn(boolean)
* @see #isAdjustGunForRobotTurn()
* @see #isAdjustRadarForGunTurn()
*/
public boolean isAdjustRadarForRobotTurn() {
if (peer != null) {
return ((IAdvancedRobotPeer) peer).isAdjustRadarForBodyTurn();
}
uninitializedException();
return false; // never called
}
/**
* Checks if the radar is set to adjust for the gun turning, i.e. to turn
* independent from the gun's turn.
*
* This call returns {@code true} if the radar is set to turn independent of
* the turn of the gun. Otherwise, {@code false} is returned, meaning that
* the radar is set to turn with the gun's turn.
*
* @return {@code true} if the radar is set to turn independent of the gun
* turning; {@code false} if the radar is set to turn with the gun
* turning
* @see #setAdjustRadarForGunTurn(boolean) setAdjustRadarForGunTurn(boolean)
* @see #isAdjustGunForRobotTurn()
* @see #isAdjustRadarForRobotTurn()
*/
public boolean isAdjustRadarForGunTurn() {
if (peer != null) {
return ((IAdvancedRobotPeer) peer).isAdjustRadarForGunTurn();
}
uninitializedException();
return false; // never called
}
/**
* {@inheritDoc}
*/
public void onCustomEvent(CustomEvent event) {}
/**
* Sets the priority of a class of events.
*
* Events are sent to the onXXX handlers in order of priority.
* Higher priority events can interrupt lower priority events.
* For events with the same priority, newer events are always sent first.
* Valid priorities are 0 - 99, where 100 is reserved and 80 is the default
* event priority. Note that lower values means higher priority.
*
* Example:
*
* setEventPriority("RobotDeathEvent", 15);
*
*
* The default event priorities are listed here, where the events with
* highest priority are listed first:
*
* {@link DeathEvent}: -1 (cannot be changed)
* {@link PaintEvent}: 5
* {@link ScannedRobotEvent}: 10
* {@link HitRobotEvent}: 20
* {@link HitWallEvent}: 30
* {@link HitByBulletEvent}: 40
* {@link BulletHitEvent}: 50
* {@link BulletHitBulletEvent}: 55
* {@link BulletMissedEvent}: 60
* {@link RobotDeathEvent}: 70
* {@link MessageEvent}: 75
* {@link CustomEvent}: 80
* {@link StatusEvent}: 99
* {@link SkippedTurnEvent}: 100 (cannot be changed)
* {@link WinEvent}: 100 (cannot be changed)
*
* Hence, DeathEvent has the highest priority, and the WinEvent the lowest priority.
*
* Note that you cannot change the priority for events with the special
* priority value -1 and priority value 100 as these event are reserved system events.
* Also note that you cannot change the priority of CustomEvent.
* Instead you must change the priority of the condition(s) for your custom event(s).
*
* @param eventClass the name of the event class (string) to set the
* priority for
* @param priority the new priority for that event class
* @see #getEventPriority(String)
* @see #setInterruptible(boolean)
* @since 1.5, the priority of DeathEvent was changed from 100 to -1 in
* order to let robots process pending events on its event queue before
* it dies. When the robot dies, it will not be able to process events.
*/
public void setEventPriority(String eventClass, int priority) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setEventPriority(eventClass, priority);
} else {
uninitializedException();
}
}
/**
* Call this during an event handler to allow new events of the same
* priority to restart the event handler.
*
*
Example:
*
*
* public void onScannedRobot(ScannedRobotEvent e) {
* fire(1);
* setInterruptible(true);
* ahead(100); // If you see a robot while moving ahead,
* // this handler will start from the top
* // Without setInterruptible(true), we wouldn't
* // receive scan events at all!
* // We'll only get here if we don't see a robot during the move.
* out.println("Ok, I can't see anyone");
* }
*
*
* @param interruptible {@code true} if the event handler should be
* interrupted if new events of the same priority occurs; {@code false}
* otherwise
* @see #setEventPriority(String, int)
* @see Robot#onScannedRobot(ScannedRobotEvent) onScannedRobot(ScannedRobotEvent)
*/
@Override
public void setInterruptible(boolean interruptible) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setInterruptible(interruptible);
} else {
uninitializedException();
}
}
/**
* Sets the maximum turn rate of the robot measured in degrees if the robot
* should turn slower than {@link Rules#MAX_TURN_RATE} (10 degress/turn).
*
* @param newMaxTurnRate the new maximum turn rate of the robot measured in
* degrees. Valid values are 0 - {@link Rules#MAX_TURN_RATE}
* @see #turnRight(double) turnRight(double)
* @see #turnLeft(double) turnLeft(double)
* @see #setTurnRight(double)
* @see #setTurnLeft(double)
* @see #setMaxVelocity(double)
*/
public void setMaxTurnRate(double newMaxTurnRate) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setMaxTurnRate(Math.toRadians(newMaxTurnRate));
} else {
uninitializedException();
}
}
/**
* Sets the maximum velocity of the robot measured in pixels/turn if the
* robot should move slower than {@link Rules#MAX_VELOCITY} (8 pixels/turn).
*
* @param newMaxVelocity the new maximum turn rate of the robot measured in
* pixels/turn. Valid values are 0 - {@link Rules#MAX_VELOCITY}
* @see #ahead(double)
* @see #setAhead(double)
* @see #back(double)
* @see #setBack(double)
* @see #setMaxTurnRate(double)
*/
public void setMaxVelocity(double newMaxVelocity) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setMaxVelocity(newMaxVelocity);
} else {
uninitializedException();
}
}
/**
* Sets the robot to resume the movement stopped by {@link #stop() stop()}
* or {@link #setStop()}, if any.
*
* This call returns immediately, and will not execute until you call
* {@link #execute()} or take an action that executes.
*
* @see #resume() resume()
* @see #stop() stop()
* @see #stop(boolean) stop(boolean)
* @see #setStop()
* @see #setStop(boolean)
* @see #execute()
*/
public void setResume() {
if (peer != null) {
((IAdvancedRobotPeer) peer).setResume();
} else {
uninitializedException();
}
}
/**
* This call is identical to {@link #stop() stop()}, but returns immediately, and
* will not execute until you call {@link #execute()} or take an action that
* executes.
*
* If there is already movement saved from a previous stop, this will have
* no effect.
*
* This call is equivalent to calling {@code setStop(false)};
*
* @see #stop() stop()
* @see #stop(boolean) stop(boolean)
* @see #resume() resume()
* @see #setResume()
* @see #setStop(boolean)
* @see #execute()
*/
public void setStop() {
setStop(false);
}
/**
* This call is identical to {@link #stop(boolean) stop(boolean)}, but
* returns immediately, and will not execute until you call
* {@link #execute()} or take an action that executes.
*
* If there is already movement saved from a previous stop, you can
* overwrite it by calling {@code setStop(true)}.
*
* @param overwrite {@code true} if the movement saved from a previous stop
* should be overwritten; {@code false} otherwise.
* @see #stop() stop()
* @see #stop(boolean) stop(boolean)
* @see #resume() resume()
* @see #setResume()
* @see #setStop()
* @see #execute()
*/
public void setStop(boolean overwrite) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setStop(overwrite);
} else {
uninitializedException();
}
}
/**
* Sets the robot's gun to turn left by degrees when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's gun is set to turn right
* instead of left.
*
* Example:
*
* // Set the gun to turn 180 degrees to the left
* setTurnGunLeft(180);
*
* // Set the gun to turn 90 degrees to the right instead of left
* // (overrides the previous order)
* setTurnGunLeft(-90);
*
* ...
* // Executes the last setTurnGunLeft()
* execute();
*
*
* @param degrees the amount of degrees to turn the robot's gun to the left.
* If {@code degrees} > 0 the robot's gun is set to turn left.
* If {@code degrees} < 0 the robot's gun is set to turn right.
* If {@code degrees} = 0 the robot's gun is set to stop turning.
* @see #setTurnGunLeftRadians(double) setTurnGunLeftRadians(double)
* @see #turnGunLeft(double) turnGunLeft(double)
* @see #turnGunLeftRadians(double) turnGunLeftRadians(double)
* @see #turnGunRight(double) turnGunRight(double)
* @see #turnGunRightRadians(double) turnGunRightRadians(double)
* @see #setTurnGunRight(double) setTurnGunRight(double)
* @see #setTurnGunRightRadians(double) setTurnGunRightRadians(double)
* @see #setAdjustGunForRobotTurn(boolean) setAdjustGunForRobotTurn(boolean)
*/
public void setTurnGunLeft(double degrees) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setTurnGun(-Math.toRadians(degrees));
} else {
uninitializedException();
}
}
/**
* Sets the robot's gun to turn right by degrees when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's gun is set to turn left
* instead of right.
*
* Example:
*
* // Set the gun to turn 180 degrees to the right
* setTurnGunRight(180);
*
* // Set the gun to turn 90 degrees to the left instead of right
* // (overrides the previous order)
* setTurnGunRight(-90);
*
* ...
* // Executes the last setTurnGunRight()
* execute();
*
*
* @param degrees the amount of degrees to turn the robot's gun to the right.
* If {@code degrees} > 0 the robot's gun is set to turn right.
* If {@code degrees} < 0 the robot's gun is set to turn left.
* If {@code degrees} = 0 the robot's gun is set to stop turning.
* @see #setTurnGunRightRadians(double) setTurnGunRightRadians(double)
* @see #turnGunRight(double) turnGunRight(double)
* @see #turnGunRightRadians(double) turnGunRightRadians(double)
* @see #turnGunLeft(double) turnGunLeft(double)
* @see #turnGunLeftRadians(double) turnGunLeftRadians(double)
* @see #setTurnGunLeft(double) setTurnGunLeft(double)
* @see #setTurnGunLeftRadians(double) setTurnGunLeftRadians(double)
* @see #setAdjustGunForRobotTurn(boolean) setAdjustGunForRobotTurn(boolean)
*/
public void setTurnGunRight(double degrees) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setTurnGun(Math.toRadians(degrees));
} else {
uninitializedException();
}
}
/**
* Sets the robot's radar to turn left by degrees when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's radar is set to turn right
* instead of left.
*
* Example:
*
* // Set the radar to turn 180 degrees to the left
* setTurnRadarLeft(180);
*
* // Set the radar to turn 90 degrees to the right instead of left
* // (overrides the previous order)
* setTurnRadarLeft(-90);
*
* ...
* // Executes the last setTurnRadarLeft()
* execute();
*
*
* @param degrees the amount of degrees to turn the robot's radar to the left.
* If {@code degrees} > 0 the robot's radar is set to turn left.
* If {@code degrees} < 0 the robot's radar is set to turn right.
* If {@code degrees} = 0 the robot's radar is set to stop turning.
* @see #setTurnRadarLeftRadians(double) setTurnRadarLeftRadians(double)
* @see #turnRadarLeft(double) turnRadarLeft(double)
* @see #turnRadarLeftRadians(double) turnRadarLeftRadians(double)
* @see #turnRadarRight(double) turnRadarRight(double)
* @see #turnRadarRightRadians(double) turnRadarRightRadians(double)
* @see #setTurnRadarRight(double) setTurnRadarRight(double)
* @see #setTurnRadarRightRadians(double) setTurnRadarRightRadians(double)
* @see #setAdjustRadarForRobotTurn(boolean) setAdjustRadarForRobotTurn(boolean)
* @see #setAdjustRadarForGunTurn(boolean) setAdjustRadarForGunTurn(boolean)
*/
public void setTurnRadarLeft(double degrees) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setTurnRadar(-Math.toRadians(degrees));
} else {
uninitializedException();
}
}
/**
* Sets the robot's radar to turn right by degrees when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's radar is set to turn left
* instead of right.
*
* Example:
*
* // Set the radar to turn 180 degrees to the right
* setTurnRadarRight(180);
*
* // Set the radar to turn 90 degrees to the right instead of right
* // (overrides the previous order)
* setTurnRadarRight(-90);
*
* ...
* // Executes the last setTurnRadarRight()
* execute();
*
*
* @param degrees the amount of degrees to turn the robot's radar to the right.
* If {@code degrees} > 0 the robot's radar is set to turn right.
* If {@code degrees} < 0 the robot's radar is set to turn left.
* If {@code degrees} = 0 the robot's radar is set to stop turning.
* @see #setTurnRadarRightRadians(double) setTurnRadarRightRadians(double)
* @see #turnRadarRight(double) turnRadarRight(double)
* @see #turnRadarRightRadians(double) turnRadarRightRadians(double)
* @see #turnRadarLeft(double) turnRadarLeft(double)
* @see #turnRadarLeftRadians(double) turnRadarLeftRadians(double)
* @see #setTurnRadarLeft(double) setTurnRadarLeft(double)
* @see #setTurnRadarLeftRadians(double) setTurnRadarLeftRadians(double)
* @see #setAdjustRadarForRobotTurn(boolean) setAdjustRadarForRobotTurn(boolean)
* @see #setAdjustRadarForGunTurn(boolean) setAdjustRadarForGunTurn(boolean)
*/
public void setTurnRadarRight(double degrees) {
if (peer != null) {
((IAdvancedRobotPeer) peer).setTurnRadar(Math.toRadians(degrees));
} else {
uninitializedException();
}
}
/**
* Does not return until a condition is met, i.e. when a
* {@link Condition#test()} returns {@code true}.
*
* This call executes immediately.
*
* See the {@code sample.Crazy} robot for how this method can be used.
*
* @param condition the condition that must be met before this call returns
* @see Condition
* @see Condition#test()
*/
public void waitFor(Condition condition) {
if (peer != null) {
((IAdvancedRobotPeer) peer).waitFor(condition);
} else {
uninitializedException();
}
}
/**
* This method is called if your robot dies.
*
* You should override it in your robot if you want to be informed of this
* event. Actions will have no effect if called from this section. The
* intent is to allow you to perform calculations or print something out
* when the robot is killed.
*
* @param event the death event set by the game
* @see DeathEvent
* @see Event
*/
@Override
public void onDeath(DeathEvent event) {}
/**
* {@inheritDoc}
*/
public void onSkippedTurn(SkippedTurnEvent event) {}
/**
* Returns the direction that the robot's body is facing, in radians.
* The value returned will be between 0 and 2 * PI (is excluded).
*
* Note that the heading in Robocode is like a compass, where 0 means North,
* PI / 2 means East, PI means South, and 3 * PI / 2 means West.
*
* @return the direction that the robot's body is facing, in radians.
* @see #getHeadingDegrees()
* @see #getGunHeadingRadians()
* @see #getRadarHeadingRadians()
*/
public double getHeadingRadians() {
return super.getHeadingRadians();
}
/**
* Sets the robot's body to turn left by radians when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's body is set to turn right
* instead of left.
*
* Example:
*
* // Set the robot to turn 180 degrees to the left
* setTurnLeftRadians(Math.PI);
*
* // Set the robot to turn 90 degrees to the right instead of left
* // (overrides the previous order)
* setTurnLeftRadians(-Math.PI / 2);
*
* ...
* // Executes the last setTurnLeftRadians()
* execute();
*
*
* @param radians the amount of radians to turn the robot's body to the left.
* If {@code radians} > 0 the robot is set to turn left.
* If {@code radians} < 0 the robot is set to turn right.
* If {@code radians} = 0 the robot is set to stop turning.
* @see AdvancedRobot#setTurnLeft(double) setTurnLeft(double)
* @see #turnLeft(double)
* @see #turnLeftRadians(double)
* @see #turnRight(double)
* @see #turnRightRadians(double)
* @see AdvancedRobot#setTurnRight(double) setTurnRight(double)
* @see AdvancedRobot#setTurnRightRadians(double) setTurnRightRadians(double)
*/
public void setTurnLeftRadians(double radians) {
super.setTurnLeftRadians(radians);
}
/**
* Sets the robot's body to turn right by radians when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's body is set to turn left
* instead of right.
*
* Example:
*
* // Set the robot to turn 180 degrees to the right
* setTurnRightRadians(Math.PI);
*
* // Set the robot to turn 90 degrees to the left instead of right
* // (overrides the previous order)
* setTurnRightRadians(-Math.PI / 2);
*
* ...
* // Executes the last setTurnRightRadians()
* execute();
*
*
* @param radians the amount of radians to turn the robot's body to the right.
* If {@code radians} > 0 the robot is set to turn right.
* If {@code radians} < 0 the robot is set to turn left.
* If {@code radians} = 0 the robot is set to stop turning.
* @see AdvancedRobot#setTurnRight(double) setTurnRight(double)
* @see #turnRight(double)
* @see #turnRightRadians(double)
* @see #turnLeft(double)
* @see #turnLeftRadians(double)
* @see AdvancedRobot#setTurnLeft(double) setTurnLeft(double)
* @see AdvancedRobot#setTurnLeftRadians(double) setTurnLeftRadians(double)
*/
public void setTurnRightRadians(double radians) {
super.setTurnRightRadians(radians);
}
/**
* Immediately turns the robot's body to the left by radians.
*
* This call executes immediately, and does not return until it is complete,
* i.e. when the angle remaining in the robot's turn is 0.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's body is set to turn right
* instead of left.
*
* Example:
*
* // Turn the robot 180 degrees to the left
* turnLeftRadians(Math.PI);
*
* // Afterwards, turn the robot 90 degrees to the right
* turnLeftRadians(-Math.PI / 2);
*
*
* @param radians the amount of radians to turn the robot's body to the left.
* If {@code radians} > 0 the robot will turn right.
* If {@code radians} < 0 the robot will turn left.
* If {@code radians} = 0 the robot will not turn, but execute.
* @see #turnLeft(double)
* @see #turnRight(double)
* @see #turnRightRadians(double)
* @see #turnGunLeft(double)
* @see #turnGunLeftRadians(double)
* @see #turnGunRight(double)
* @see #turnGunRightRadians(double)
* @see #turnRadarLeft(double)
* @see #turnRadarLeftRadians(double)
* @see #turnRadarRight(double)
* @see #turnRadarRightRadians(double)
* @see #setAdjustGunForRobotTurn(boolean)
*/
public void turnLeftRadians(double radians) {
super.turnLeftRadians(radians);
}
/**
* Immediately turns the robot's body to the right by radians.
* This call executes immediately, and does not return until it is complete,
* i.e. when the angle remaining in the robot's turn is 0.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's body is set to turn left
* instead of right.
*
* Example:
*
* // Turn the robot 180 degrees to the right
* turnRightRadians(Math.PI);
*
* // Afterwards, turn the robot 90 degrees to the left
* turnRightRadians(-Math.PI / 2);
*
*
* @param radians the amount of radians to turn the robot's body to the right.
* If {@code radians} > 0 the robot will turn right.
* If {@code radians} < 0 the robot will turn left.
* If {@code radians} = 0 the robot will not turn, but execute.
* @see #turnRight(double)
* @see #turnLeft(double)
* @see #turnLeftRadians(double)
* @see #turnGunLeft(double)
* @see #turnGunLeftRadians(double)
* @see #turnGunRight(double)
* @see #turnGunRightRadians(double)
* @see #turnRadarLeft(double)
* @see #turnRadarLeftRadians(double)
* @see #turnRadarRight(double)
* @see #turnRadarRightRadians(double)
* @see #setAdjustGunForRobotTurn(boolean)
*/
public void turnRightRadians(double radians) {
super.turnRightRadians(radians);
}
/**
* Returns the direction that the robot's gun is facing, in radians.
* The value returned will be between 0 and 2 * PI (is excluded).
*
* Note that the heading in Robocode is like a compass, where 0 means North,
* PI / 2 means East, PI means South, and 3 * PI / 2 means West.
*
* @return the direction that the robot's gun is facing, in radians.
* @see #getGunHeadingDegrees()
* @see #getHeadingRadians()
* @see #getRadarHeadingRadians()
*/
public double getGunHeadingRadians() {
return super.getGunHeadingRadians();
}
/**
* Returns the direction that the robot's radar is facing, in radians.
* The value returned will be between 0 and 2 * PI (is excluded).
*
* Note that the heading in Robocode is like a compass, where 0 means North,
* PI / 2 means East, PI means South, and 3 * PI / 2 means West.
*
* @return the direction that the robot's radar is facing, in radians.
* @see #getRadarHeadingDegrees()
* @see #getHeadingRadians()
* @see #getGunHeadingRadians()
*/
public double getRadarHeadingRadians() {
return super.getRadarHeadingRadians();
}
/**
* Sets the robot's gun to turn left by radians when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's gun is set to turn right
* instead of left.
*
* Example:
*
* // Set the gun to turn 180 degrees to the left
* setTurnGunLeftRadians(Math.PI);
*
* // Set the gun to turn 90 degrees to the right instead of left
* // (overrides the previous order)
* setTurnGunLeftRadians(-Math.PI / 2);
*
* ...
* // Executes the last setTurnGunLeftRadians()
* execute();
*
*
* @param radians the amount of radians to turn the robot's gun to the left.
* If {@code radians} > 0 the robot's gun is set to turn left.
* If {@code radians} < 0 the robot's gun is set to turn right.
* If {@code radians} = 0 the robot's gun is set to stop turning.
* @see AdvancedRobot#setTurnGunLeft(double) setTurnGunLeft(double)
* @see #turnGunLeft(double)
* @see #turnGunLeftRadians(double)
* @see #turnGunRight(double)
* @see #turnGunRightRadians(double)
* @see AdvancedRobot#setTurnGunRight(double) setTurnGunRight(double)
* @see AdvancedRobot#setTurnGunRightRadians(double) setTurnGunRightRadians(double)
* @see #setAdjustGunForRobotTurn(boolean)
*/
public void setTurnGunLeftRadians(double radians) {
super.setTurnGunLeftRadians(radians);
}
/**
* Sets the robot's gun to turn right by radians when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's gun is set to turn left
* instead of right.
*
* Example:
*
* // Set the gun to turn 180 degrees to the right
* setTurnGunRightRadians(Math.PI);
*
* // Set the gun to turn 90 degrees to the left instead of right
* // (overrides the previous order)
* setTurnGunRightRadians(-Math.PI / 2);
*
* ...
* // Executes the last setTurnGunRightRadians()
* execute();
*
*
* @param radians the amount of radians to turn the robot's gun to the right.
* If {@code radians} > 0 the robot's gun is set to turn left.
* If {@code radians} < 0 the robot's gun is set to turn right.
* If {@code radians} = 0 the robot's gun is set to stop turning.
* @see AdvancedRobot#setTurnGunRight(double) setTurnGunRight(double)
* @see #turnGunRight(double)
* @see #turnGunRightRadians(double)
* @see #turnGunLeft(double)
* @see #turnGunLeftRadians(double)
* @see AdvancedRobot#setTurnGunLeft(double) setTurnGunLeft(double)
* @see AdvancedRobot#setTurnGunLeftRadians(double) setTurnGunLeftRadians(double)
* @see #setAdjustGunForRobotTurn(boolean)
*/
public void setTurnGunRightRadians(double radians) {
super.setTurnGunRightRadians(radians);
}
/**
* Sets the robot's radar to turn left by radians when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's radar is set to turn right
* instead of left.
*
* Example:
*
* // Set the radar to turn 180 degrees to the left
* setTurnRadarLeftRadians(Math.PI);
*
* // Set the radar to turn 90 degrees to the right instead of left
* // (overrides the previous order)
* setTurnRadarLeftRadians(-Math.PI / 2);
*
* ...
* // Executes the last setTurnRadarLeftRadians()
* execute();
*
*
* @param radians the amount of radians to turn the robot's radar to the left.
* If {@code radians} > 0 the robot's radar is set to turn left.
* If {@code radians} < 0 the robot's radar is set to turn right.
* If {@code radians} = 0 the robot's radar is set to stop turning.
* @see AdvancedRobot#setTurnRadarLeft(double) setTurnRadarLeft(double)
* @see #turnRadarLeft(double)
* @see #turnRadarLeftRadians(double)
* @see #turnRadarRight(double)
* @see #turnRadarRightRadians(double)
* @see AdvancedRobot#setTurnRadarRight(double) setTurnRadarRight(double)
* @see AdvancedRobot#setTurnRadarRightRadians(double) setTurnRadarRightRadians(double)
* @see #setAdjustRadarForRobotTurn(boolean)
* @see #setAdjustRadarForGunTurn(boolean)
*/
public void setTurnRadarLeftRadians(double radians) {
super.setTurnRadarLeftRadians(radians);
}
/**
* Sets the robot's radar to turn right by radians when the next execution
* takes place.
*
* This call returns immediately, and will not execute until you call
* execute() or take an action that executes.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's radar is set to turn left
* instead of right.
*
* Example:
*
* // Set the radar to turn 180 degrees to the right
* setTurnRadarRightRadians(Math.PI);
*
* // Set the radar to turn 90 degrees to the right instead of right
* // (overrides the previous order)
* setTurnRadarRightRadians(-Math.PI / 2);
*
* ...
* // Executes the last setTurnRadarRightRadians()
* execute();
*
*
* @param radians the amount of radians to turn the robot's radar to the right.
* If {@code radians} > 0 the robot's radar is set to turn left.
* If {@code radians} < 0 the robot's radar is set to turn right.
* If {@code radians} = 0 the robot's radar is set to stop turning.
* @see AdvancedRobot#setTurnRadarRight(double) setTurnRadarRight(double)
* @see #turnRadarRight(double)
* @see #turnRadarRightRadians(double)
* @see #turnRadarLeft(double)
* @see #turnRadarLeftRadians(double)
* @see AdvancedRobot#setTurnRadarLeft(double) setTurnRadarLeft(double)
* @see AdvancedRobot#setTurnRadarLeftRadians(double) setTurnRadarLeftRadians(double)
* @see #setAdjustRadarForRobotTurn(boolean)
* @see #setAdjustRadarForGunTurn(boolean)
*/
public void setTurnRadarRightRadians(double radians) {
super.setTurnRadarRightRadians(radians);
}
/**
* Immediately turns the robot's gun to the left by radians.
*
* This call executes immediately, and does not return until it is complete,
* i.e. when the angle remaining in the gun's turn is 0.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's gun is set to turn right
* instead of left.
*
* Example:
*
* // Turn the robot's gun 180 degrees to the left
* turnGunLeftRadians(Math.PI);
*
* // Afterwards, turn the robot's gun 90 degrees to the right
* turnGunLeftRadians(-Math.PI / 2);
*
*
* @param radians the amount of radians to turn the robot's gun to the left.
* If {@code radians} > 0 the robot's gun will turn left.
* If {@code radians} < 0 the robot's gun will turn right.
* If {@code radians} = 0 the robot's gun will not turn, but execute.
* @see #turnGunLeft(double)
* @see #turnGunRight(double)
* @see #turnGunRightRadians(double)
* @see #turnLeft(double)
* @see #turnLeftRadians(double)
* @see #turnRight(double)
* @see #turnRightRadians(double)
* @see #turnRadarLeft(double)
* @see #turnRadarLeftRadians(double)
* @see #turnRadarRight(double)
* @see #turnRadarRightRadians(double)
* @see #setAdjustGunForRobotTurn(boolean)
*/
public void turnGunLeftRadians(double radians) {
super.turnGunLeftRadians(radians);
}
/**
* Immediately turns the robot's gun to the right by radians.
* This call executes immediately, and does not return until it is complete,
* i.e. when the angle remaining in the gun's turn is 0.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's gun is set to turn left
* instead of right.
*
* Example:
*
* // Turn the robot's gun 180 degrees to the right
* turnGunRightRadians(Math.PI);
*
* // Afterwards, turn the robot's gun 90 degrees to the left
* turnGunRightRadians(-Math.PI / 2);
*
*
* @param radians the amount of radians to turn the robot's gun to the right.
* If {@code radians} > 0 the robot's gun will turn right.
* If {@code radians} < 0 the robot's gun will turn left.
* If {@code radians} = 0 the robot's gun will not turn, but execute.
* @see #turnGunRight(double)
* @see #turnGunLeft(double)
* @see #turnGunLeftRadians(double)
* @see #turnLeft(double)
* @see #turnLeftRadians(double)
* @see #turnRight(double)
* @see #turnRightRadians(double)
* @see #turnRadarLeft(double)
* @see #turnRadarLeftRadians(double)
* @see #turnRadarRight(double)
* @see #turnRadarRightRadians(double)
* @see #setAdjustGunForRobotTurn(boolean)
*/
public void turnGunRightRadians(double radians) {
super.turnGunRightRadians(radians);
}
/**
* Immediately turns the robot's radar to the left by radians.
*
* This call executes immediately, and does not return until it is complete,
* i.e. when the angle remaining in the radar's turn is 0.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's radar is set to turn right
* instead of left.
*
* Example:
*
* // Turn the robot's radar 180 degrees to the left
* turnRadarLeftRadians(Math.PI);
*
* // Afterwards, turn the robot's radar 90 degrees to the right
* turnRadarLeftRadians(-Math.PI / 2);
*
*
* @param radians the amount of radians to turn the robot's radar to the left.
* If {@code radians} > 0 the robot's radar will turn left.
* If {@code radians} < 0 the robot's radar will turn right.
* If {@code radians} = 0 the robot's radar will not turn, but execute.
* @see #turnRadarLeft(double)
* @see #turnRadarRight(double)
* @see #turnGunRightRadians(double)
* @see #turnLeft(double)
* @see #turnLeftRadians(double)
* @see #turnRight(double)
* @see #turnRightRadians(double)
* @see #turnGunLeft(double)
* @see #turnGunLeftRadians(double)
* @see #turnGunRight(double)
* @see #turnGunRightRadians(double)
* @see #setAdjustRadarForRobotTurn(boolean)
* @see #setAdjustRadarForGunTurn(boolean)
*/
public void turnRadarLeftRadians(double radians) {
super.turnRadarLeftRadians(radians);
}
/**
* Immediately turns the robot's radar to the right by radians.
* This call executes immediately, and does not return until it is complete,
* i.e. when the angle remaining in the radar's turn is 0.
*
* Note that both positive and negative values can be given as input,
* where negative values means that the robot's radar is set to turn left
* instead of right.
*
* Example:
*
* // Turn the robot's radar 180 degrees to the right
* turnRadarRightRadians(Math.PI);
*
* // Afterwards, turn the robot's radar 90 degrees to the left
* turnRadarRightRadians(-Math.PI / 2);
*
*
* @param radians the amount of radians to turn the robot's radar to the right.
* If {@code radians} > 0 the robot's radar will turn right.
* If {@code radians} < 0 the robot's radar will turn left.
* If {@code radians} = 0 the robot's radar will not turn, but execute.
* @see #turnRadarRight(double)
* @see #turnRadarLeft(double)
* @see #turnGunLeftRadians(double)
* @see #turnLeft(double)
* @see #turnLeftRadians(double)
* @see #turnRight(double)
* @see #turnRightRadians(double)
* @see #turnGunLeft(double)
* @see #turnGunLeftRadians(double)
* @see #turnGunRight(double)
* @see #turnGunRightRadians(double)
* @see #setAdjustRadarForRobotTurn(boolean)
* @see #setAdjustRadarForGunTurn(boolean)
*/
public void turnRadarRightRadians(double radians) {
super.turnRadarRightRadians(radians);
}
/**
* Returns the angle remaining in the gun's turn, in radians.
*
* This call returns both positive and negative values. Positive values
* means that the gun is currently turning to the right. Negative values
* means that the gun is currently turning to the left.
*
* @return the angle remaining in the gun's turn, in radians
* @see AdvancedRobot#getGunTurnRemaining()
* @see AdvancedRobot#getTurnRemaining() getTurnRemaining()
* @see #getTurnRemainingRadians()
* @see AdvancedRobot#getRadarTurnRemaining() getRadarTurnRemaining()
* @see #getRadarTurnRemainingRadians()
*/
public double getGunTurnRemainingRadians() {
return super.getGunTurnRemainingRadians();
}
/**
* Returns the angle remaining in the radar's turn, in radians.
*
* This call returns both positive and negative values. Positive values
* means that the radar is currently turning to the right. Negative values
* means that the radar is currently turning to the left.
*
* @return the angle remaining in the radar's turn, in radians
* @see AdvancedRobot#getRadarTurnRemaining()
* @see AdvancedRobot#getTurnRemaining() getTurnRemaining()
* @see #getTurnRemainingRadians()
* @see AdvancedRobot#getGunTurnRemaining() getGunTurnRemaining()
* @see #getGunTurnRemainingRadians()
*/
public double getRadarTurnRemainingRadians() {
return super.getRadarTurnRemainingRadians();
}
/**
* Returns the angle remaining in the robot's turn, in radians.
*
* This call returns both positive and negative values. Positive values
* means that the robot is currently turning to the right. Negative values
* means that the robot is currently turning to the left.
*
* @return the angle remaining in the robot's turn, in radians
* @see AdvancedRobot#getTurnRemaining()
* @see AdvancedRobot#getGunTurnRemaining() getGunTurnRemaining()
* @see #getGunTurnRemainingRadians()
* @see AdvancedRobot#getRadarTurnRemaining() getRadarTurnRemaining()
* @see #getRadarTurnRemainingRadians()
*/
public double getTurnRemainingRadians() {
return super.getTurnRemainingRadians();
}
/**
* Do not call this method!
*
* {@inheritDoc}
*/
public final IAdvancedEvents getAdvancedEventListener() {
return this; // this robot is listening
}
}