Class BaseBot
-
Field Summary
Fields inherited from interface dev.robocode.tankroyale.botapi.IBaseBot
MAX_NUMBER_OF_TEAM_MESSAGES_PER_TURN, TEAM_MESSAGE_MAX_SIZE
-
Constructor Summary
ModifierConstructorDescriptionprotected
BaseBot()
Constructor for initializing a new instance of the BaseBot class.protected
Constructor for initializing a new instance of the BaseBot class.protected
Constructor for initializing a new instance of the BaseBot class.protected
Constructor for initializing a new instance of the BaseBot class. -
Method Summary
Modifier and TypeMethodDescriptionfinal boolean
addCustomEvent
(Condition condition) Adds an event handler that will be automatically triggeredIBaseBot.onCustomEvent(dev.robocode.tankroyale.botapi.events.CustomEvent)
when theCondition.test()
returnstrue
.final void
broadcastTeamMessage
(Object message) Broadcasts a message to all teammates.
When the message is send, it is serialized into a JSON representation, meaning that all public fields, and only public fields, are being serialized into a JSON representation as a DTO (data transfer object).
The maximum team message size limit is defined byIBaseBot.TEAM_MESSAGE_MAX_SIZE
, which is set to 32768 bytes.final double
calcBulletSpeed
(double firepower) Calculates the bullet speed given a firepower.final double
calcGunHeat
(double firepower) Calculates gun heat after having fired the gun.final double
calcMaxTurnRate
(double speed) Calculates the maximum turn rate for a specific speed.final void
Clears out any pending events in the bot's event queue immediately.final int
Height of the arena measured in units.final int
Width of the arena measured in units.final Color
Returns the color of the body.final Color
Returns the color of the fired bullets.final Collection
<BulletState> Current bullet states.final double
Current driving direction of the bot in degrees.final int
Number of enemies left in the round.final double
Current energy level.final int
getEventPriority
(Class<BotEvent> eventClass) Returns the event priority for a specific event class.Returns an ordered list containing all events currently in the bot's event queue.final double
Returns the firepower.final String
Game type, e.g.final Color
Returns the color of the gun.final double
Gun cooling rate.final double
Current direction of the gun in degrees.final double
Current gun heat.final double
Returns the gun turn rate in degrees per turn.final double
Returns the maximum gun turn rate in degrees per turn.final int
The maximum number of inactive turns allowed the bot will become zapped by the game for being inactive.final double
Returns the maximum radar turn rate in degrees per turn.final double
Returns the maximum speed in units per turn.final double
Returns the maximum turn rate of the bot in degrees per turn.final int
getMyId()
Unique id of this bot, which is available when the game has started.final int
The number of rounds in a battle.final Color
Returns the color of the radar.final double
Current direction of the radar in degrees.final double
Returns the radar turn rate in degrees per turn.final int
Current round number.final Color
Returns the color of the scan arc.final double
getSpeed()
The current speed measured in units per turn.final double
Returns the target speed in units per turn.Returns the ids of all teammates.final int
The number of microseconds left of this turn before the bot will skip the turn.final Color
Returns the color of the tracks.final int
Current turn number.final double
Returns the turn rate of the bot in degrees per turn.final int
The turn timeout is important as the bot needs to take action by callingIBaseBot.go()
before the turn timeout occurs.final Color
Returns the color of the gun turret.final String
The game variant, which is "Tank Royale".final String
Game version, e.g.final double
getX()
Current X coordinate of the center of the bot.final double
getY()
Current Y coordinate of the center of the bot.final void
go()
Commits the current commands (actions), which finalizes the current turn for the bot.final boolean
Checks if the gun is set to adjust for the bot turning, i.e.final boolean
Checks if the radar is set to adjust for the body turning, i.e.final boolean
Checks if the radar is set to adjust for the gun turning, i.e.final boolean
Specifies if the bot is disabled, i.e., when the energy is zero.final boolean
Checks if the movement has been stopped.final boolean
isTeammate
(int botId) Checks if the provided bot id is a teammate or not.final boolean
removeCustomEvent
(Condition condition) Removes triggering a custom event handler for a specific condition that was previously added withIBaseBot.addCustomEvent(dev.robocode.tankroyale.botapi.events.Condition)
.final void
sendTeamMessage
(int teammateId, Object message) Sends a message to a specific teammate.
When the message is send, it is serialized into a JSON representation, meaning that all public fields, and only public fields, are being serialized into a JSON representation as a DTO (data transfer object).
The maximum team message size limit is defined byIBaseBot.TEAM_MESSAGE_MAX_SIZE
, which is set to 32768 bytes.final void
setAdjustGunForBodyTurn
(boolean adjust) Sets the gun to adjust for the bot´s turn when setting the gun turn rate.final void
setAdjustRadarForBodyTurn
(boolean adjust) Sets the radar to adjust for the body's turn when setting the radar turn rate.final void
setAdjustRadarForGunTurn
(boolean adjust) Sets the radar to adjust for the gun's turn when setting the radar turn rate.final void
setBodyColor
(Color color) Sets the color of the body.final void
setBulletColor
(Color color) Sets the color of the fired bullets.final void
setEventPriority
(Class<BotEvent> eventClass, int priority) Changes the event priority for an event class.final boolean
setFire
(double firepower) Sets the gun to fire in the direction that the gun is pointing with the specified firepower.final void
setFireAssist
(boolean enable) Enables or disables fire assistance explicitly.final void
setGunColor
(Color color) Sets the color of the gun.void
setGunTurnRate
(double gunTurnRate) Sets the turn rate of the gun, which can be positive and negative.final void
setInterruptible
(boolean interruptible) Call this method during an event handler to control continuing or restarting the event handler, when a new event occurs again for the same event handler while processing an earlier event.final void
setMaxGunTurnRate
(double maxGunTurnRate) Sets the maximum turn rate which applies to turn the gun to the left or right.final void
setMaxRadarTurnRate
(double maxRadarTurnRate) Sets the maximum turn rate which applies to turn the radar to the left or right.final void
setMaxSpeed
(double maxSpeed) Sets the maximum speed which applies when moving forward and backward.final void
setMaxTurnRate
(double maxTurnRate) Sets the maximum turn rate which applies to turn the bot to the left or right.final void
setRadarColor
(Color color) Sets the color of the radar.void
setRadarTurnRate
(double radarTurnRate) Sets the turn rate of the radar, which can be positive and negative.final void
Sets the bot to rescan with the radar.final void
Sets the bot to scan (again) with the radar.final void
setScanColor
(Color color) Sets the color of the scan arc.final void
setStop()
Set the bot to stop all movement including turning the gun and radar.final void
setStop
(boolean overwrite) Set the bot to stop all movement including turning the gun and radar.void
setTargetSpeed
(double targetSpeed) Sets the new target speed for the bot in units per turn.final void
setTracksColor
(Color color) Sets the color of the tracks.void
setTurnRate
(double turnRate) Sets the turn rate of the bot, which can be positive and negative.final void
setTurretColor
(Color color) Sets the color of the gun turret.final void
start()
The method used to start running the bot.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface dev.robocode.tankroyale.botapi.IBaseBot
bearingTo, calcBearing, calcDeltaAngle, calcGunBearing, calcRadarBearing, directionTo, distanceTo, gunBearingTo, normalizeAbsoluteAngle, normalizeRelativeAngle, onBotDeath, onBulletFired, onBulletHit, onBulletHitBullet, onBulletHitWall, onConnected, onConnectionError, onCustomEvent, onDeath, onDisconnected, onGameEnded, onGameStarted, onHitBot, onHitByBullet, onHitWall, onRoundEnded, onRoundStarted, onScannedBot, onSkippedTurn, onTeamMessage, onTick, onWonRound, radarBearingTo
-
Constructor Details
-
BaseBot
protected BaseBot()Constructor for initializing a new instance of the BaseBot class. This constructor should be used when bothBotInfo
and server URL is provided through environment variables, i.e., when starting up the bot using a booter. These environment variables must be set to provide the server URL and bot information, and are automatically set by the booter tool for Robocode.
Example of how to set the predefined environment variables used for connecting to the server:SERVER_URL=ws://localhost:7654
SERVER_SECRET=xzoEeVbnBe5TGjCny0R1yQ
Example of how to set the environment variables that covers the
BotInfo
:BOT_NAME=MyBot
BOT_VERSION=1.0
BOT_AUTHORS=John Doe
BOT_DESCRIPTION=Short description
BOT_HOMEPAGE=https://somewhere.net/MyBot
BOT_COUNTRY_CODES=us
BOT_GAME_TYPES=classic, melee, 1v1
BOT_PLATFORM=JVM
BOT_PROG_LANG=Java 11
BOT_INITIAL_POS=50,70, 270
These environment variables must be set prior to using this constructor:
BOT_NAME
BOT_VERSION
BOT_AUTHORS
These value can take multiple values separated by a comma:
BOT_AUTHORS, e.g. "John Doe, Jane Doe"
BOT_COUNTRY_CODES, e.g. "se, no, dk"
BOT_GAME_TYPES, e.g. "classic, melee, 1v1"
The
BOT_INITIAL_POS
variable is optional and should only be used for debugging.The
SERVER_SECRET
must be set if the server requires a server secret for the bots trying to connect. Otherwise, the bot will be disconnected as soon as it attempts to connect to the server.If the
SERVER_URL
is not set, then this default URL is used: ws://localhost:7654 -
BaseBot
Constructor for initializing a new instance of the BaseBot class. This constructor assumes the server URL and secret is provided by the environment variables SERVER_URL and SERVER_SECRET.- Parameters:
botInfo
- is the bot info containing information about your bot.
-
BaseBot
-
BaseBot
-
-
Method Details
-
start
-
go
public final void go()Commits the current commands (actions), which finalizes the current turn for the bot.This method must be called once per turn to send the bot actions to the server and must be called before the turn timeout occurs. A turn timer is started when the
GameStartedEvent
andTickEvent
occurs. If thego()
method is called too late, a turn timeout will occur and theSkippedTurnEvent
will occur, which means that the bot has skipped all actions for the last turn. In this case, the server will continue executing the last actions received. This could be fatal for the bot due to loss of control over the bot. So make sure thatgo()
is called before the turn ends.The commands executed when
go()
is called are set by calling the various setter methods prior to calling thego()
method:IBaseBot.setTurnRate(double)
,IBaseBot.setGunTurnRate(double)
,IBaseBot.setRadarTurnRate(double)
,IBaseBot.setTargetSpeed(double)
, andIBaseBot.setFire(double)
. -
getVariant
The game variant, which is "Tank Royale".- Specified by:
getVariant
in interfaceIBaseBot
- Returns:
- The game variant of Robocode.
-
getVersion
Game version, e.g. "1.0.0".- Specified by:
getVersion
in interfaceIBaseBot
- Returns:
- The game version.
-
getMyId
-
getGameType
Game type, e.g. "melee" or "1v1".First available when the game has started.
- Specified by:
getGameType
in interfaceIBaseBot
- Returns:
- The game type.
-
getArenaWidth
public final int getArenaWidth()Width of the arena measured in units.First available when the game has started.
- Specified by:
getArenaWidth
in interfaceIBaseBot
- Returns:
- The arena width measured in units
-
getArenaHeight
public final int getArenaHeight()Height of the arena measured in units.First available when the game has started.
- Specified by:
getArenaHeight
in interfaceIBaseBot
- Returns:
- The arena height measured in units
-
getNumberOfRounds
public final int getNumberOfRounds()The number of rounds in a battle.First available when the game has started.
- Specified by:
getNumberOfRounds
in interfaceIBaseBot
- Returns:
- The number of rounds in a battle.
-
getGunCoolingRate
public final double getGunCoolingRate()Gun cooling rate. The gun needs to cool down to a gun heat of zero before the gun can fire. The gun cooling rate determines how fast the gun cools down. That is, the gun cooling rate is subtracted from the gun heat each turn until the gun heat reaches zero.First available when the game has started.
- Specified by:
getGunCoolingRate
in interfaceIBaseBot
- Returns:
- The gun cooling rate.
- See Also:
-
getMaxInactivityTurns
public final int getMaxInactivityTurns()The maximum number of inactive turns allowed the bot will become zapped by the game for being inactive. Inactive means that the bot has taken no action in several turns in a row.First available when the game has started.
- Specified by:
getMaxInactivityTurns
in interfaceIBaseBot
- Returns:
- The maximum number of allowed inactive turns.
-
getTurnTimeout
public final int getTurnTimeout()The turn timeout is important as the bot needs to take action by callingIBaseBot.go()
before the turn timeout occurs. As soon as theTickEvent
is triggered, i.e. whenIBaseBot.onTick(dev.robocode.tankroyale.botapi.events.TickEvent)
is called, you need to callIBaseBot.go()
to take action before the turn timeout occurs. Otherwise, your bot will skip a turn and receive aIBaseBot.onSkippedTurn(dev.robocode.tankroyale.botapi.events.SkippedTurnEvent)
for each turn whereIBaseBot.go()
is called too late.First available when the game has started.
- Specified by:
getTurnTimeout
in interfaceIBaseBot
- Returns:
- The turn timeout in microseconds (1 / 1,000,000 second).
- See Also:
-
getTimeLeft
public final int getTimeLeft()The number of microseconds left of this turn before the bot will skip the turn. Make sure to callIBaseBot.go()
before the time runs out.- Specified by:
getTimeLeft
in interfaceIBaseBot
- Returns:
- The amount of time left in microseconds.
- See Also:
-
getRoundNumber
public final int getRoundNumber()Current round number.- Specified by:
getRoundNumber
in interfaceIBaseBot
- Returns:
- The current round number.
-
getTurnNumber
public final int getTurnNumber()Current turn number.- Specified by:
getTurnNumber
in interfaceIBaseBot
- Returns:
- The current turn number.
-
getEnemyCount
public final int getEnemyCount()Number of enemies left in the round.- Specified by:
getEnemyCount
in interfaceIBaseBot
- Returns:
- The number of enemies left in the round.
-
getEnergy
public final double getEnergy()Current energy level. When the energy level is positive, the bot is alive and active. When the energy level is 0, the bot is still alive but disabled. If the bot becomes disabled it will not be able to move or take any action. If negative, the bot has been defeated. -
isDisabled
public final boolean isDisabled()Specifies if the bot is disabled, i.e., when the energy is zero. When the bot is disabled, it is not able to take any action like movement, turning, and firing.- Specified by:
isDisabled
in interfaceIBaseBot
- Returns:
true
if the bot is disabled;false
otherwise.
-
getX
-
getY
-
getDirection
public final double getDirection()Current driving direction of the bot in degrees.- Specified by:
getDirection
in interfaceIBaseBot
- Returns:
- The current driving direction of the bot.
-
getGunDirection
public final double getGunDirection()Current direction of the gun in degrees.- Specified by:
getGunDirection
in interfaceIBaseBot
- Returns:
- The current gun direction of the bot.
-
getRadarDirection
public final double getRadarDirection()Current direction of the radar in degrees.- Specified by:
getRadarDirection
in interfaceIBaseBot
- Returns:
- The current radar direction of the bot.
-
getSpeed
public final double getSpeed()The current speed measured in units per turn. If the speed is positive, the bot moves forward. If negative, the bot moves backward. Zero speed means that the bot is not moving from its current position. -
getGunHeat
public final double getGunHeat()Current gun heat. When the is fired it gets heated and will not be able to fire before it has been cooled down. The gun is cooled down when the gun heat is zero.When the gun has fired the gun heat is set to 1 + (firepower / 5) and will be cooled down by the gun cooling rate.
- Specified by:
getGunHeat
in interfaceIBaseBot
- Returns:
- The current gun heat.
- See Also:
-
getBulletStates
Current bullet states. Keeps track of all the bullets fired by the bot, which are still active on the arena.- Specified by:
getBulletStates
in interfaceIBaseBot
- Returns:
- The current bullet states.
-
getEvents
Returns an ordered list containing all events currently in the bot's event queue. You might, for example, call this while processing another event. -
clearEvents
public final void clearEvents()Clears out any pending events in the bot's event queue immediately.- Specified by:
clearEvents
in interfaceIBaseBot
- See Also:
-
getTurnRate
public final double getTurnRate()Returns the turn rate of the bot in degrees per turn.- Specified by:
getTurnRate
in interfaceIBaseBot
- Returns:
- The turn rate of the bot.
- See Also:
-
setTurnRate
public void setTurnRate(double turnRate) Sets the turn rate of the bot, which can be positive and negative. The turn rate is measured in degrees per turn. The turn rate is added to the current direction of the bot. But it is also added to the current direction of the gun and radar. This is because the gun is mounted on the body, and hence turns with the body. The radar is mounted on the gun and hence moves with the gun. You can compensate for the turn rate of the bot by subtracting the turn rate of the bot from the turn rate of the gun and radar. But be aware that the turn limits defined for the gun and radar cannot be exceeded.The turn rate is truncated to
Constants.MAX_TURN_RATE
if the turn rate exceeds this value.If this property is set multiple times, the last value set before
IBaseBot.go()
counts.- Specified by:
setTurnRate
in interfaceIBaseBot
- Parameters:
turnRate
- is the new turn rate of the bot in degrees per turn.
-
getMaxTurnRate
public final double getMaxTurnRate()Returns the maximum turn rate of the bot in degrees per turn.- Specified by:
getMaxTurnRate
in interfaceIBaseBot
- Returns:
- The maximum turn rate of the bot.
- See Also:
-
setMaxTurnRate
public final void setMaxTurnRate(double maxTurnRate) Sets the maximum turn rate which applies to turn the bot to the left or right. The maximum turn rate must be an absolute value from 0 toConstants.MAX_TURN_RATE
, both values are included. If the input turn rate is negative, the max turn rate will be cut to zero. If the input turn rate is aboveConstants.MAX_TURN_RATE
, the max turn rate will be set toConstants.MAX_TURN_RATE
.If for example the max turn rate is set to 5, then the bot will be able to turn left or right with a turn rate down to -5 degrees per turn when turning right, and up to 5 degrees per turn when turning left.
This method will first be executed when
IBaseBot.go()
is called making it possible to call other set methods after execution. This makes it possible to set the bot to move, turn the body, radar, gun, and also fire the gun in parallel in a single turn when callingIBaseBot.go()
. But notice that this is only possible to execute multiple methods in parallel by using setter methods only prior to callingIBaseBot.go()
.If this method is called multiple times, the last call before
IBaseBot.go()
is executed, counts.- Specified by:
setMaxTurnRate
in interfaceIBaseBot
- Parameters:
maxTurnRate
- is the new maximum turn rate- See Also:
-
getGunTurnRate
public final double getGunTurnRate()Returns the gun turn rate in degrees per turn.- Specified by:
getGunTurnRate
in interfaceIBaseBot
- Returns:
- The turn rate of the gun.
- See Also:
-
setGunTurnRate
public void setGunTurnRate(double gunTurnRate) Sets the turn rate of the gun, which can be positive and negative. The gun turn rate is measured in degrees per turn. The turn rate is added to the current turn direction of the gun. But it is also added to the current direction of the radar. This is because the radar is mounted on the gun, and hence moves with the gun. You can compensate for the turn rate of the gun by subtracting the turn rate of the gun from the turn rate of the radar. But be aware that the turn limits defined for the radar cannot be exceeded.The gun turn rate is truncated to
Constants.MAX_GUN_TURN_RATE
if the gun turn rate exceeds this value.If this property is set multiple times, the last value set before
IBaseBot.go()
counts.- Specified by:
setGunTurnRate
in interfaceIBaseBot
- Parameters:
gunTurnRate
- is the new turn rate of the gun in degrees per turn.
-
getMaxGunTurnRate
public final double getMaxGunTurnRate()Returns the maximum gun turn rate in degrees per turn.- Specified by:
getMaxGunTurnRate
in interfaceIBaseBot
- Returns:
- The maximum turn rate of the gun.
- See Also:
-
setMaxGunTurnRate
public final void setMaxGunTurnRate(double maxGunTurnRate) Sets the maximum turn rate which applies to turn the gun to the left or right. The maximum turn rate must be an absolute value from 0 toConstants.MAX_GUN_TURN_RATE
, both values are included. If the input turn rate is negative, the max turn rate will be cut to zero. If the input turn rate is aboveConstants.MAX_GUN_TURN_RATE
, the max turn rate will be set toConstants.MAX_GUN_TURN_RATE
.If for example the max gun turn rate is set to 5, then the gun will be able to turn left or right with a turn rate down to -5 degrees per turn when turning right and up to 5 degrees per turn when turning left.
This method will first be executed when
IBaseBot.go()
is called making it possible to call other set methods after execution. This makes it possible to set the bot to move, turn the body, radar, gun, and also fire the gun in parallel in a single turn when callingIBaseBot.go()
. But notice that this is only possible to execute multiple methods in parallel by using setter methods only prior to callingIBaseBot.go()
.If this method is called multiple times, the last call before
IBaseBot.go()
is executed, counts.- Specified by:
setMaxGunTurnRate
in interfaceIBaseBot
- Parameters:
maxGunTurnRate
- is the new maximum gun turn rate- See Also:
-
getRadarTurnRate
public final double getRadarTurnRate()Returns the radar turn rate in degrees per turn.- Specified by:
getRadarTurnRate
in interfaceIBaseBot
- Returns:
- The turn rate of the radar.
- See Also:
-
setRadarTurnRate
public void setRadarTurnRate(double radarTurnRate) Sets the turn rate of the radar, which can be positive and negative. The radar turn rate is measured in degrees per turn. The turn rate is added to the current direction of the radar. Note that besides the turn rate of the radar, the turn rates of the bot and gun are also added to the radar direction, as the radar moves with the gun, which is mounted on the gun that moves with the body. You can compensate for the turn rate of the gun by subtracting the turn rate of the bot and gun from the turn rate of the radar. But be aware that the turn limits defined for the radar cannot be exceeded.The radar turn rate is truncated to
Constants.MAX_RADAR_TURN_RATE
if the radar turn rate exceeds this value.If this property is set multiple times, the last value set before
IBaseBot.go()
counts.- Specified by:
setRadarTurnRate
in interfaceIBaseBot
- Parameters:
radarTurnRate
- is the new turn rate of the radar in degrees per turn.
-
getMaxRadarTurnRate
public final double getMaxRadarTurnRate()Returns the maximum radar turn rate in degrees per turn.- Specified by:
getMaxRadarTurnRate
in interfaceIBaseBot
- Returns:
- The maximum turn rate of the radar.
- See Also:
-
setMaxRadarTurnRate
public final void setMaxRadarTurnRate(double maxRadarTurnRate) Sets the maximum turn rate which applies to turn the radar to the left or right. The maximum turn rate must be an absolute value from 0 toConstants.MAX_RADAR_TURN_RATE
, both values are included. If the input turn rate is negative, the max turn rate will be cut to zero. If the input turn rate is aboveConstants.MAX_RADAR_TURN_RATE
, the max turn rate will be set toConstants.MAX_RADAR_TURN_RATE
.If for example the max radar turn rate is set to 5, then the radar will be able to turn left or right with a turn rate down to -5 degrees per turn when turning right and up to 5 degrees per turn when turning left.
This method will first be executed when
IBaseBot.go()
is called making it possible to call other set methods after execution. This makes it possible to set the bot to move, turn the body, radar, gun, and also fire the gun in parallel in a single turn when callingIBaseBot.go()
. But notice that this is only possible to execute multiple methods in parallel by using setter methods only prior to callingIBaseBot.go()
.If this method is called multiple times, the last call before
IBaseBot.go()
is executed, counts.- Specified by:
setMaxRadarTurnRate
in interfaceIBaseBot
- Parameters:
maxRadarTurnRate
- is the new maximum radar turn rate- See Also:
-
getTargetSpeed
public final double getTargetSpeed()Returns the target speed in units per turn.- Specified by:
getTargetSpeed
in interfaceIBaseBot
- Returns:
- The target speed.
- See Also:
-
setTargetSpeed
public void setTargetSpeed(double targetSpeed) Sets the new target speed for the bot in units per turn. The target speed is the speed you want to achieve eventually, which could take one to several turns depending on the current speed. For example, if the bot is moving forward with max speed, and then must change to move backward at full speed, the bot will have to first decelerate/brake its positive speed (moving forward). When passing speed of zero, it will then have to accelerate back to achieve max negative speed.Note that acceleration is 1 unit per turn and deceleration/braking is faster than acceleration as it is -2 unit per turn. Deceleration is negative as it is added to the speed and hence needs to be negative when slowing down.
The target speed is truncated to
Constants.MAX_SPEED
if the target speed exceeds this value.If this property is set multiple times, the last value set before
IBaseBot.go()
counts.- Specified by:
setTargetSpeed
in interfaceIBaseBot
- Parameters:
targetSpeed
- is the new target speed in units per turn.
-
getMaxSpeed
public final double getMaxSpeed()Returns the maximum speed in units per turn.- Specified by:
getMaxSpeed
in interfaceIBaseBot
- Returns:
- The maximum speed.
- See Also:
-
setMaxSpeed
public final void setMaxSpeed(double maxSpeed) Sets the maximum speed which applies when moving forward and backward. The maximum speed must be an absolute value from 0 toConstants.MAX_SPEED
, both values are included. If the input speed is negative, the max speed will be cut to zero. If the input speed is aboveConstants.MAX_SPEED
, the max speed will be set toConstants.MAX_SPEED
.If for example the maximum speed is set to 5, then the bot will be able to move backwards with a speed down to -5 units per turn and up to 5 units per turn when moving forward.
This method will first be executed when
IBaseBot.go()
is called making it possible to call other set methods after execution. This makes it possible to set the bot to move, turn the body, radar, gun, and also fire the gun in parallel in a single turn when callingIBaseBot.go()
. But notice that this is only possible to execute multiple methods in parallel by using setter methods only prior to callingIBaseBot.go()
.If this method is called multiple times, the last call before
IBaseBot.go()
is executed, counts.- Specified by:
setMaxSpeed
in interfaceIBaseBot
- Parameters:
maxSpeed
- is the new maximum speed
-
setFire
public final boolean setFire(double firepower) Sets the gun to fire in the direction that the gun is pointing with the specified firepower.Firepower is the amount of energy your bot will spend on firing the gun. This means that the bot will lose power on firing the gun where the energy loss is equal to the firepower. You cannot spend more energy than available from your bot.
The bullet power must be greater than
Constants.MIN_FIREPOWER
and the gun heat zero before the gun can fire.If the bullet hits an opponent bot, you will gain energy from the bullet hit. When hitting another bot, your bot will be rewarded and retrieve an energy boost of 3x firepower.
The gun will only fire when the firepower is at
Constants.MIN_FIREPOWER
or higher. If the firepower is more thanConstants.MAX_FIREPOWER
the power will be truncated to the max firepower.Whenever the gun is fired, the gun is heated and needs to cool down before it can fire again. The gun heat must be zero before the gun is able to fire (see
IBaseBot.getGunHeat()
). The gun heat generated by firing the gun is 1 + (firepower / 5). Hence, the more firepower used the longer it takes to cool down the gun. The gun cooling rate can be read by callingIBaseBot.getGunCoolingRate()
.The amount of energy used for firing the gun is subtracted from the bots' total energy. The amount of damage dealt by a bullet hitting another bot is 4x firepower, and if the firepower is greater than 1 it will do an additional 2 x (firepower - 1) damage.
Note that the gun will automatically keep firing at any turn as soon as the gun heat reaches zero. It is possible to disable the gun firing by setting the firepower to zero.
The firepower is truncated to 0 and
Constants.MAX_FIREPOWER
if the firepower exceeds this value.If this property is set multiple times, the last value set before go() counts.
-
getFirepower
public final double getFirepower()Returns the firepower.- Specified by:
getFirepower
in interfaceIBaseBot
- Returns:
- The firepower.
- See Also:
-
setRescan
-
setFireAssist
public final void setFireAssist(boolean enable) Enables or disables fire assistance explicitly. Fire assistance is useful for bots with limited aiming capabilities as it will help the bot by firing directly at a scanned bot when the gun is fired, which is a very simple aiming strategy.When fire assistance is enabled the gun will fire towards the center of the scanned bot when all these conditions are met:
- The gun is fired (
IBaseBot.setFire(double)
andIBot.fire(double)
) - The radar is scanning a bot when firing the gun (
IBaseBot.onScannedBot(dev.robocode.tankroyale.botapi.events.ScannedBotEvent)
,IBaseBot.setRescan()
,IBot.rescan()
) - The gun and radar are pointing in the exact the same direction. You can call
setAdjustRadarForGunTurn(false)
to align the gun and radar and make sure not to turn the radar beside the gun.
The fire assistance feature is provided for backwards compatibility with the original Robocode, where robots that are not an
AdvancedRobot
got fire assistance per default as the gun and radar cannot be moved independently of each other. (TheAdvancedRobot
allows the body, gun, and radar to move independent of each other).- Specified by:
setFireAssist
in interfaceIBaseBot
- Parameters:
enable
- enables fire assistance when set totrue
, and disable fire assistance otherwise.
- The gun is fired (
-
setInterruptible
public final void setInterruptible(boolean interruptible) Call this method during an event handler to control continuing or restarting the event handler, when a new event occurs again for the same event handler while processing an earlier event.Example:
public void onScannedBot(ScannedBotEvent e) { fire(1); setInterruptible(true); forward(100); // When a new bot is scanned while moving forward this handler will restart // from the top as this event handler has been set to be interruptible // right after firing. Without
setInterruptible(true)
, new scan events // would not be triggered while moving forward. // We'll only get here if we do not see a robot during the move. System.out.println("No bots were scanned"); }- Specified by:
setInterruptible
in interfaceIBaseBot
- Parameters:
interruptible
-true
if the event handler should be interrupted and hence restart when a new event of the same event type occurs again;false
otherwise where the event handler will continue processing.
-
setAdjustGunForBodyTurn
public final void setAdjustGunForBodyTurn(boolean adjust) Sets the gun to adjust for the bot´s turn when setting the gun turn rate. So the gun behaves like it is turning independent of the bot´s turn.Ok, so this needs some explanation: The gun is mounted on the bot´s body. So, normally, if the bot turns 90 degrees to the right, then the gun will turn with it as it is mounted on top of the bot´s body. To compensate for this, you can adjust the gun for the bot´s turn. When this is set, the gun will turn independent of the bot´s turn.
Note: This property is additive until you reach the maximum the gun can turn
Constants.MAX_GUN_TURN_RATE
. The "adjust" is added to the amount, you set for turning the bot by the turn rate, then capped by the physics of the game.Note: The gun compensating this way does count as "turning the gun".
- Specified by:
setAdjustGunForBodyTurn
in interfaceIBaseBot
- Parameters:
adjust
-true
if the gun must adjust/compensate for the body turning;false
if the gun must turn with the body turning (default).- See Also:
-
isAdjustGunForBodyTurn
public final boolean isAdjustGunForBodyTurn()Checks if the gun is set to adjust for the bot turning, i.e. to turn independent of the bot´s body turn.This call returns
true
if the gun is set to turn independent of the turn of the bot´s body. Otherwise,false
is returned, meaning that the gun is set to turn with the bot´s body turn.- Specified by:
isAdjustGunForBodyTurn
in interfaceIBaseBot
- Returns:
true
if the gun is set to turn independent of the body turning;false
if the gun is set to turn with the body turning (default).- See Also:
-
setAdjustRadarForBodyTurn
public final void setAdjustRadarForBodyTurn(boolean adjust) Sets the radar to adjust for the body's turn when setting the radar turn rate. So the radar behaves like it is turning independent of the body's turn.Ok, so this needs some explanation: The radar is mounted on the gun, and the gun is mounted on the bot´s body. So, normally, if the bot turns 90 degrees to the right, the gun turns, as does the radar. Hence, if the bot turns 90 degrees to the right, then the gun and radar will turn with it as the radar is mounted on top of the gun. To compensate for this, you can adjust the radar for the body turn. When this is set, the radar will turn independent of the body's turn.
Note: This property is additive until you reach the maximum the radar can turn (
Constants.MAX_RADAR_TURN_RATE
). The "adjust" is added to the amount, you set for turning the body by the body turn rate, then capped by the physics of the game.Note: The radar compensating this way does count as "turning the radar".
- Specified by:
setAdjustRadarForBodyTurn
in interfaceIBaseBot
- Parameters:
adjust
-true
if the radar must adjust/compensate for the body's turn;false
if the radar must turn with the body turning (default).- See Also:
-
isAdjustRadarForBodyTurn
public final boolean isAdjustRadarForBodyTurn()Checks if the radar is set to adjust for the body turning, i.e. to turn independent of the body's turn.This call returns
true
if the radar is set to turn independent of the turn of the body. Otherwise,false
is returned, meaning that the radar is set to turn with the body turning.- Specified by:
isAdjustRadarForBodyTurn
in interfaceIBaseBot
- Returns:
true
if the radar is set to turn independent of the body turning;false
if the radar is set to turn with the body turning (default).- See Also:
-
setAdjustRadarForGunTurn
public final void setAdjustRadarForGunTurn(boolean adjust) Sets the radar to adjust for the gun's turn when setting the radar turn rate. So the radar behaves like it is turning independent of the gun's turn.Ok, so this needs some explanation: The radar is mounted on the gun. So, normally, if the gun turns 90 degrees to the right, then the radar will turn with it as it is mounted on top of the gun. To compensate for this, you can adjust the radar for the gun turn. When this is set, the radar will turn independent of the gun's turn.
Note: This property is additive until you reach the maximum the radar can turn (
Constants.MAX_RADAR_TURN_RATE
). The "adjust" is added to the amount, you set for turning the gun by the gun turn rate, then capped by the physics of the game.When the radar compensates this way it counts as "turning the radar", even when it is not explicitly turned by calling a method for turning the radar.
Note: This method automatically disables fire assistance when set to
true
, and automatically enables fire assistance when set tofalse
. This is not the case forIBaseBot.setAdjustGunForBodyTurn(boolean)
andIBaseBot.setAdjustRadarForBodyTurn(boolean)
. Read more about fire assistance with theIBaseBot.setFireAssist(boolean)
method.- Specified by:
setAdjustRadarForGunTurn
in interfaceIBaseBot
- Parameters:
adjust
-true
if the radar must adjust/compensate for the gun turning;false
if the radar must turn with the gun turning (default).- See Also:
-
isAdjustRadarForGunTurn
public final boolean isAdjustRadarForGunTurn()Checks if the radar is set to adjust for the gun turning, i.e. to turn independent of the gun's turn.This call returns
true
if the radar is set to turn independent of the turn of the gun. Otherwise,false
is returned, meaning that the radar is set to turn with the gun's turn.- Specified by:
isAdjustRadarForGunTurn
in interfaceIBaseBot
- Returns:
true
if the radar is set to turn independent of the gun turning;false
if the radar is set to turn with the gun turning (default).- See Also:
-
addCustomEvent
Adds an event handler that will be automatically triggeredIBaseBot.onCustomEvent(dev.robocode.tankroyale.botapi.events.CustomEvent)
when theCondition.test()
returnstrue
.- Specified by:
addCustomEvent
in interfaceIBaseBot
- Parameters:
condition
- is the condition that must be met to trigger the custom event.- Returns:
true
if the condition was not added already;false
if the condition was already added.- See Also:
-
removeCustomEvent
Removes triggering a custom event handler for a specific condition that was previously added withIBaseBot.addCustomEvent(dev.robocode.tankroyale.botapi.events.Condition)
.- Specified by:
removeCustomEvent
in interfaceIBaseBot
- Parameters:
condition
- is the condition that was previously added withIBaseBot.addCustomEvent(dev.robocode.tankroyale.botapi.events.Condition)
- Returns:
true
if the condition was found;false
if the condition was not found.- See Also:
-
setStop
public final void setStop()Set the bot to stop all movement including turning the gun and radar. The remaining movement is saved for a call toIBaseBot.setResume()
. This method has no effect, if it has already been called.This method will first be executed when
IBaseBot.go()
is called making it possible to call other set methods before execution. This makes it possible to set the bot to move, turn the body, radar, gun, and also fire the gun in parallel in a single turn when callingIBaseBot.go()
. But notice that this is only possible to execute multiple methods in parallel by using setter methods only prior to callingIBaseBot.go()
. -
setStop
public final void setStop(boolean overwrite) Set the bot to stop all movement including turning the gun and radar. The remaining movement is saved for a call toIBaseBot.setResume()
.This method will first be executed when
IBaseBot.go()
is called making it possible to call other set methods before execution. This makes it possible to set the bot to move, turn the body, radar, gun, and also fire the gun in parallel in a single turn when callingIBaseBot.go()
. But notice that this is only possible to execute multiple methods in parallel by using setter methods only prior to callingIBaseBot.go()
.- Specified by:
setStop
in interfaceIBaseBot
- Parameters:
overwrite
- is set totrue
if the movement saved by a previous call to this method orIBaseBot.setStop()
must be overridden with the current movement. When set tofalse
this method is identical toIBaseBot.setStop()
.- See Also:
-
setResume
public final void setResume()Sets the bot to scan (again) with the radar. This method is useful if the radar has not been turning and thereby will not be able to automatically scan bots. This method is useful when the bot movement has stopped, e.g. whenIBaseBot.setStop()
has been called. The last radar direction and sweep angle will be used for rescanning for bots.This method will first be executed when
IBaseBot.go()
is called making it possible to call other set methods before execution. This makes it possible to set the bot to move, turn the body, radar, gun, and also fire the gun in parallel in a single turn when callingIBaseBot.go()
. But notice that this is only possible to execute multiple methods in parallel by using setter methods only prior to callingIBaseBot.go()
. -
isStopped
public final boolean isStopped()Checks if the movement has been stopped.- Specified by:
isStopped
in interfaceIBaseBot
- Returns:
- true if the movement has been stopped by
IBaseBot.setStop()
; false otherwise. - See Also:
-
getTeammateIds
Returns the ids of all teammates.- Specified by:
getTeammateIds
in interfaceIBaseBot
- Returns:
- the ids of all teammates if the bot is participating in a team or the empty set if the bot is not in a team.
- See Also:
-
isTeammate
public final boolean isTeammate(int botId) Checks if the provided bot id is a teammate or not.Example:
public void onScannedBot(ScannedBotEvent event) { if (isTeammate(event.getScannedBotId()) { return; // don't do anything by leaving } fire(1); }
- Specified by:
isTeammate
in interfaceIBaseBot
- Parameters:
botId
- is the id of the bot to check for.- Returns:
true
if the provided is id an id of a teammate;false
otherwise.- See Also:
-
broadcastTeamMessage
Broadcasts a message to all teammates.
When the message is send, it is serialized into a JSON representation, meaning that all public fields, and only public fields, are being serialized into a JSON representation as a DTO (data transfer object).
The maximum team message size limit is defined byIBaseBot.TEAM_MESSAGE_MAX_SIZE
, which is set to 32768 bytes. This size is the size of the message when it is serialized into a JSON representation.
The maximum number of messages that can be send/broadcast per turn is limited to 10.- Specified by:
broadcastTeamMessage
in interfaceIBaseBot
- Parameters:
message
- is the message to broadcast.- See Also:
-
sendTeamMessage
Sends a message to a specific teammate.
When the message is send, it is serialized into a JSON representation, meaning that all public fields, and only public fields, are being serialized into a JSON representation as a DTO (data transfer object).
The maximum team message size limit is defined byIBaseBot.TEAM_MESSAGE_MAX_SIZE
, which is set to 32768 bytes. This size is the size of the message when it is serialized into a JSON representation.
The maximum number of messages that can be send/broadcast per turn is limited to 10.- Specified by:
sendTeamMessage
in interfaceIBaseBot
- Parameters:
teammateId
- is the id of the teammate to send the message to.message
- is the message to send.- See Also:
-
getBodyColor
Returns the color of the body.- Specified by:
getBodyColor
in interfaceIBaseBot
- Returns:
- The color of the body or
null
if no color has been set yet, meaning that the default color will be used.
-
setBodyColor
Sets the color of the body. Colors can (only) be changed each turn.Example:
setBodyColor(Color.RED); // the red color setBodyColor(new Color(255, 0, 0)); // also the red color setBodyColor(Color.fromHexTriplet("F00"); // and also the red color
- Specified by:
setBodyColor
in interfaceIBaseBot
- Parameters:
color
- is the color of the body ornull
if the bot must use the default color instead.
-
getTurretColor
Returns the color of the gun turret.- Specified by:
getTurretColor
in interfaceIBaseBot
- Returns:
- The color of the turret or
null
if no color has been set yet, meaning that the default color will be used.
-
setTurretColor
Sets the color of the gun turret. Colors can (only) be changed each turn.Example:
setTurretColor(Color.RED); // the red color setTurretColor(new Color(255, 0, 0)); // also the red color setTurretColor(Color.fromHexTriplet("F00"); // and also the red color
- Specified by:
setTurretColor
in interfaceIBaseBot
- Parameters:
color
- is the color of the gun turret ornull
if the bot must use the default color instead.
-
getRadarColor
Returns the color of the radar.- Specified by:
getRadarColor
in interfaceIBaseBot
- Returns:
- The color of the radar or
null
if no color has been set yet, meaning that the default color will be used.
-
setRadarColor
Sets the color of the radar. Colors can (only) be changed each turn.Example:
setRadarColor(Color.RED); // the red color setRadarColor(new Color(255, 0, 0)); // also the red color setRadarColor(Color.fromHexTriplet("F00"); // and also the red color
- Specified by:
setRadarColor
in interfaceIBaseBot
- Parameters:
color
- is the color of the radar ornull
if the bot must use the default color instead.
-
getBulletColor
Returns the color of the fired bullets.- Specified by:
getBulletColor
in interfaceIBaseBot
- Returns:
- The color of the bullets or
null
if no color has been set yet, meaning that the default color will be used.
-
setBulletColor
Sets the color of the fired bullets. Colors can (only) be changed each turn.
Note that a fired bullet will not change is color when it has been fired. But new bullets fired after setting the bullet color will get the new color.Example:
setBulletColor(Color.RED); // the red color setBulletColor(new Color(255, 0, 0)); // also the red color setBulletColor(Color.fromHexTriplet("F00"); // and also the red color
- Specified by:
setBulletColor
in interfaceIBaseBot
- Parameters:
color
- is the color of the fired bullets ornull
if the bot must use the default color instead.
-
getScanColor
Returns the color of the scan arc.- Specified by:
getScanColor
in interfaceIBaseBot
- Returns:
- The color of the scan arc or
null
if no color has been set yet, meaning that the default color will be used.
-
setScanColor
Sets the color of the scan arc. Colors can (only) be changed each turn.Example:
setScanColor(Color.RED); // the red color setScanColor(new Color(255, 0, 0)); // also the red color setScanColor(Color.fromHexTriplet("F00"); // and also the red color
- Specified by:
setScanColor
in interfaceIBaseBot
- Parameters:
color
- is the color of the scan arc ornull
if the bot must use the default color instead.
-
getTracksColor
Returns the color of the tracks.- Specified by:
getTracksColor
in interfaceIBaseBot
- Returns:
- The color of the tracks or
null
if no color has been set yet, meaning that the default color will be used.
-
setTracksColor
Sets the color of the tracks. Colors can (only) be changed each turn.Example:
setTracksColor(Color.RED); // the red color setTracksColor(new Color(255, 0, 0)); // also the red color setTracksColor(Color.fromHexTriplet("F00"); // and also the red color
- Specified by:
setTracksColor
in interfaceIBaseBot
- Parameters:
color
- is the color of the tracks ornull
if the bot must use the default color instead.
-
getGunColor
Returns the color of the gun.- Specified by:
getGunColor
in interfaceIBaseBot
- Returns:
- The color of the gun or
null
if no color has been set yet, meaning that the default color will be used.
-
setGunColor
Sets the color of the gun. Colors can (only) be changed each turn.Example:
setGunColor(Color.RED); // the red color setGunColor(new Color(255, 0, 0)); // also the red color setGunColor(Color.fromHexTriplet("F00"); // and also the red color
- Specified by:
setGunColor
in interfaceIBaseBot
- Parameters:
color
- is the color of the gun ornull
if the bot must use the default color instead.
-
calcMaxTurnRate
public final double calcMaxTurnRate(double speed) Calculates the maximum turn rate for a specific speed.- Specified by:
calcMaxTurnRate
in interfaceIBaseBot
- Parameters:
speed
- is the speed.- Returns:
- The maximum turn rate determined by the given speed.
-
calcBulletSpeed
public final double calcBulletSpeed(double firepower) Calculates the bullet speed given a firepower.- Specified by:
calcBulletSpeed
in interfaceIBaseBot
- Parameters:
firepower
- is the firepower.- Returns:
- The bullet speed determined by the given firepower.
-
calcGunHeat
public final double calcGunHeat(double firepower) Calculates gun heat after having fired the gun.- Specified by:
calcGunHeat
in interfaceIBaseBot
- Parameters:
firepower
- is the firepower used when firing the gun.- Returns:
- The gun heat produced when firing the gun with the given firepower.
-
getEventPriority
Returns the event priority for a specific event class.Example:
int scannedBotEventPriority = getPriority(ScannedBotEvent.class);
- Specified by:
getEventPriority
in interfaceIBaseBot
- Parameters:
eventClass
- is the event class to get the event priority for.- Returns:
- the event priority for a specific event class.
- See Also:
-
setEventPriority
Changes the event priority for an event class. The event priority is used for determining which event types (classes) that must be fired and handled before others. Events with higher priorities will be handled before events with lower priorities.Note that you should normally not need to change the event priority.
- Specified by:
setEventPriority
in interfaceIBaseBot
- Parameters:
eventClass
- is the event class to change the event priority for.priority
- is the new priority. Typically, a positive number from 1 to 150. The greater value, the higher priority.- See Also:
-