API Reference
January 28, 2026 ยท View on GitHub
Complete reference for all public types in the BulletMLLib namespace.
Classes
Bullet
public abstract class Bullet : IBullet
Base class for all bullets. Inherit from this class and override the abstract members to create your game's bullet type.
Constructor:
protected Bullet(IBulletManager myBulletManager)
| Parameter | Description |
|---|---|
myBulletManager | The bullet manager that owns this bullet. Must not be null. |
Abstract Members (must override):
| Member | Type | Description |
|---|---|---|
X | float | Horizontal position in pixels from upper-left. |
Y | float | Vertical position in pixels from upper-left. |
PostUpdate() | void | Called after Update(). Use for bounds checking, collision, rendering. |
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
Speed | float (virtual) | 0 | Bullet speed in pixels/frame. |
Direction | float (virtual) | 0 | Direction in radians. Automatically wrapped via MathHelper.WrapAngle. |
Acceleration | Vector2 | Zero | Acceleration vector in pixels/frame^2. Set by <accel> nodes. |
TimeSpeed | float | 1.0 | Time multiplier. Values < 1 slow down, > 1 speed up. |
Scale | float | 1.0 | Pattern size multiplier. |
InitialVelocity | Vector2 | Zero | Velocity inherited from the firing entity. Applied during InitNode. |
Tasks | List<BulletMLTask> | [] | Runtime tasks defining this bullet's behavior. |
MyNode | BulletMLNode | null | The node tree describing this bullet. |
MyBulletManager | IBulletManager | -- | The manager that owns this bullet. |
Label | string | -- | Convenience property returning MyNode.Label. |
Methods:
| Method | Returns | Description |
|---|---|---|
InitTopNode(BulletMLNode rootNode) | void | Initialize from a root node. Finds nodes labeled "top" or "top1" through "top9". |
InitNode(BulletMLNode subNode) | void | Initialize from a specific sub-node. Clears existing tasks and builds new task tree. |
Update() | void (virtual) | Execute one frame: runs all tasks, then updates position from velocity and acceleration. |
UpdateAsync() | Task | Runs Update() on a background thread. |
GetAimDir() | float (virtual) | Returns the angle (radians) from this bullet to the player position. |
TasksFinished() | bool | Returns true when all tasks have completed execution. |
FindTaskByLabel(string label) | BulletMLTask | Recursively searches tasks for a matching label. |
FindTaskByLabelAndName(string label, NodeName name) | BulletMLTask | Searches tasks matching both label and node name. |
Position Update Formula:
Each frame, the bullet's position is updated as:
velocity = (Acceleration + Direction.ToVector2() * Speed * TimeSpeed) * Scale
X += velocity.X
Y += velocity.Y
BulletPattern
public class BulletPattern
Container for a parsed BulletML document. Parse once, use many times to initialize bullets.
Constructor:
public BulletPattern(IBulletManager manager)
Properties:
| Property | Type | Description |
|---|---|---|
RootNode | BulletMLNode | Root of the parsed node tree. Pass to Bullet.InitTopNode(). |
Filename | string | Path of the loaded XML file. Set by ParseXML(). |
Orientation | PatternType | Pattern type read from the <bulletml type="..."> attribute. |
Methods:
| Method | Description |
|---|---|
ParseXML(string xmlFileName, ContentManager content = null) | Parse a BulletML XML file. If content is provided, loads via MonoGame Content Pipeline (path should be relative, no extension). Otherwise loads from file system. |
BulletMLNode
public class BulletMLNode
Represents a single element in the parsed BulletML document tree. Nodes are shared across bullets; tasks are created per-bullet at runtime.
Properties:
| Property | Type | Description |
|---|---|---|
Name | NodeName | The type of this node (bullet, action, fire, etc.). |
NodeType | NodeType | Modifier type (none, aim, absolute, relative, sequence). |
Label | string | The label attribute from the XML element. |
ChildNodes | List<BulletMLNode> | Child nodes in the tree. |
Methods:
| Method | Description |
|---|---|
FindLabelNode(string label, NodeName name) | Find a descendant node with matching label and name. |
FindParentNode(NodeName name) | Walk up the tree to find an ancestor of the given type. |
GetChild(NodeName name) | Find the first direct child with the given name. |
BulletMLTask
public class BulletMLTask
Runtime execution unit created from a BulletMLNode. Each bullet gets its own task tree.
Properties:
| Property | Type | Description |
|---|---|---|
Node | BulletMLNode | The node this task was created from. |
Owner | BulletMLTask | Parent task in the execution tree. |
ChildTasks | List<BulletMLTask> | Child tasks to execute. |
TaskFinished | bool | Whether this task (and all children) have completed. |
ParamList | List<float> | Parameter values for referenced nodes (accessible as $1, $2, etc.). |
FireData
public class FireData
Template data for creating new bullets during pattern execution.
Fields:
| Field | Type | Description |
|---|---|---|
srcSpeed | float | Initial speed for fired bullets. |
srcDir | float | Initial direction for fired bullets. |
speedInit | bool | Whether speed has been explicitly set. |
Interfaces
IBullet
public interface IBullet
Interface for bullet-like objects. Implement this if you want to wrap a Bullet in another object.
| Member | Type | Description |
|---|---|---|
X | float | Horizontal position (pixels from upper-left). |
Y | float | Vertical position (pixels from upper-left). |
Speed | float | Speed in pixels/frame. |
Direction | float | Direction in radians. |
Tasks | List<BulletMLTask> | Runtime task list. |
InitTopNode(BulletMLNode) | void | Initialize from a root node. |
InitNode(BulletMLNode) | void | Initialize from a sub-node. |
IBulletManager
public interface IBulletManager
Interface your game implements to manage bullet lifecycle and provide game state to the library.
| Member | Type | Description |
|---|---|---|
Rand | Random | Random number generator for $rand in expressions. |
GameDifficulty | FunctionDelegate | Returns difficulty value (typically 0.0-1.0) for $rank in expressions. |
CallbackFunctions | Dictionary<string, FunctionDelegate> | Custom functions accessible as $name in BulletML expressions. |
PlayerPosition(IBullet) | Vector2 | Returns the target position for aim-type directions. |
CreateBullet() | IBullet | Factory for regular (visible) bullets. Called by <fire> nodes. |
CreateTopBullet() | IBullet | Factory for top-level controller bullets (usually invisible). |
RemoveBullet(IBullet) | void | Dispose/deactivate a bullet. Called by <vanish> nodes. |
Enums
NodeName
Identifies the type of a BulletML XML element.
| Value | XML Element | Description |
|---|---|---|
bulletml | <bulletml> | Root document element. |
bullet | <bullet> | Bullet definition with direction, speed, and actions. |
action | <action> | Sequence of commands defining bullet behavior. |
fire | <fire> | Fires a new bullet with optional direction/speed. |
direction | <direction> | Direction value (with type modifier). |
speed | <speed> | Speed value (with type modifier). |
changeDirection | <changeDirection> | Gradually change direction over a duration. |
changeSpeed | <changeSpeed> | Gradually change speed over a duration. |
accel | <accel> | Apply acceleration (horizontal/vertical components). |
wait | <wait> | Pause execution for N frames. |
repeat | <repeat> | Repeat child actions N times. |
vanish | <vanish> | Remove the bullet. |
horizontal | <horizontal> | Horizontal acceleration component (inside <accel>). |
vertical | <vertical> | Vertical acceleration component (inside <accel>). |
term | <term> | Duration for changeDirection/changeSpeed/accel. |
times | <times> | Repeat count. |
param | <param> | Parameter value for referenced nodes. |
bulletRef | <bulletRef> | Reference to a labeled <bullet>. |
actionRef | <actionRef> | Reference to a labeled <action>. |
fireRef | <fireRef> | Reference to a labeled <fire>. |
NodeType
Modifier for direction and speed values.
| Value | Description |
|---|---|
none | No modifier (default). |
aim | Direction aimed at the player position. |
absolute | Absolute value (0 = up for vertical patterns, right for horizontal). |
relative | Relative to the bullet's current direction or speed. |
sequence | Added to the previous value each time the node fires. |
PatternType
Orientation of the bullet pattern, set on the <bulletml> root element.
| Value | Description |
|---|---|
vertical | Bullets travel top-to-bottom. 0 degrees = down. |
horizontal | Bullets travel left-to-right. 0 degrees = right. |
none | No specific orientation. |
RunStatus
Internal enum for task execution state.
| Value | Description |
|---|---|
Continue | Task is still running. |
End | Task has finished. |
Stop | Task has been stopped. |
Delegates
PositionDelegate
public delegate Vector2 PositionDelegate();
Callback that returns a Vector2 position.
FloatDelegate
public delegate float FloatDelegate();
Callback that returns a float value.
FunctionDelegate
// From Equationator library
public delegate float FunctionDelegate();
Used for GameDifficulty and entries in CallbackFunctions. Returns a float value that can be referenced in BulletML expressions.