Tutorial (Arena Scripting)
Arena Scripting
Sample Arena script
blank.py
import plus
import Arenas
class BlankArena(Arenas.SuperArena):
"Blank Arena comment."
name = "Blank Arena"
preview = "blank/blank_preview.bmp"
in_list = True
game_types = ['DEATHMATCH', 'BATTLE ROYAL', 'TEAM MATCH', 'TABLETOP', 'KING OF THE HILL']
extent = (-15.0, 15.0, 15.0, -15.0)
def __init__(self):
plus.Arena.__init__(self, "Arenas/box/boxarena.gmf")
def Tick(self):
"Do our stuff here -- called every tickInterval seconds."
return plus.Arena.Tick(self)
Arenas.register(BlankArena)
Classes
Arena
Class Data
name | display name of this arena (list is sorted by this name) |
preview | bitmap preview |
in_list | allow this arena to be picked by player |
game_types | game types that can be played in this arena |
extent | rectangular area of this area |
bHazardsOn | are hazards on or off |
Functions
RegisterZone(rigid_body_name, callback_index) |
Sets up a callback to the arena when the given phantom rigid body is entered or exited.
rigid_body_name: name of the (phantom) rigid body in the GMF file to be used as a zone
callback_index: an integer value supplied to the callback function:
ZoneEvent(self, direction, callback_index, player_index)
[direction = 1 for entering, -1 for exiting]
[player_index = 1-4] |
AddPrismatic(base_rigid_body, attachment_rigid_body, x, y, z, start, end)
returns a new prismatic controller |
Adds a prismatic controller to the arena.
x, y, z: sliding vector in base's object space
start: starting limit in meters
end: ending limit |
GetHinge(name of hinge)
returns a hinge controller |
SetSubMaterial(name of body, name of material, damage scalar)
set part of the arena to a different material; use the damage scalar to change its damaging potential
material names: rubber, arenium, metal |
SetPinned(name of body, True or False)
pin or unpin this object |
SetActive(name of body, True or False)
activate or deactivate this object |
AddStaticCamera(name of camera, position, rotation, fov)
name: label for this camera
position: (x, y, z)
rotation: (pitch, yaw)
fov: field of view in radians |
AddWatchCamera(name of camera, position, ranges)
ranges: (near distance, far distance, near field of view, far field of view) |
ClearCameraBlockers
clears out list of primitives that can block the camera |
AddCameraBlocker(name of body)
add primitive to list of objects that block the camera |
Events
Tick |
Called every Arena-tick-interval seconds. |
PrismaticController
SetPowerSettings(max_velocity, gain) |
Sets the power settings for the controller.
max_velocity: a velocity the controller will attempt not to exceed
gain: the maximum force the controller will apply at any one time |
SetDirection(1 or -1) |
Set the direction the controller will attempt to move its attached rigid body.
1 = toward end, -1 = toward start. |
ApplyForce(amount) |
Apply a force to the attached rigid body in the direction currently set. |
Lock(True or False) |
When locked, the attached rigid body will not move; unlocked, it is free to move between the controller's limits. |
SetAutoLock(True or False) |
When AutoLock is on, the controller will attempt to lock the rigid body into one limit or the other, depending on which direction has been set. |
HingeController
SetPowerSettings(max_velocity, gain) |
Sets the power settings for the controller.
max_velocity: a velocity the controller will attempt not to exceed
gain: the maximum force the controller will apply at any one time |
SetDirection(1 or -1) |
Set the direction the controller will attempt to move its attached rigid body.
1 = toward end, -1 = toward start. |
ApplyTorque(amount) |
Apply a torque to the attached rigid body in the direction currently set. |
Lock(True or False) |
When locked, the attached rigid body will not move; unlocked, it is free to move between the controller's limits. |
SetAutoLocks(limit, power) accepts boolean values |
Lock the controller when a) a limit is reached and/or b) power is set to zero. |
Miscellaneous
describe(player id) |
Returns a string with the index # and type for each of this player's components (one per line). |
setBackColor(red, green, blue) |
Change the background color of the full-screen render area.
All values should be between 0 and 1. |
usePower(player id, 0 or 1) |
Whether or not a player's bot needs batteries and air tanks or not. |
disable(player id, 0 or 1) |
Immobilize (or mobilize) this player's robot. |
damage(player id, component index, amount of damage) |
Applies an amount of damage to a player's component by index number. |
getHitpoints(player id, component index) |
Returns the number of hitpoints remaining for a player's component (by index number). |
getHealth(player id, component index) |
Returns the health (0 to 1) for a player's component by index number. |
getWeight(player id) |
Returns the weight of this player's robot. |
getLocation(player id) |
Returns tuple (x, y, z) for this player's robot. |
getHeading(player id, nose offset) |
Returns up-axis heading for this player, with nose offset radians being added to compensate for the BotLab orientation of the chassis. |
getDirection(player id, nose offset) |
Returns vector pointing in the forward direction for this player's robot (with nose offset radians added to compensate for BotLab orientation of the chassis). |
areHazardsOn |
Returns true or false depending on existence of hazards. |
|