VoxeLibre/mods/ITEMS/vl_projectile/api.md

4.4 KiB

Projectiles API

vl_projectile.register(entity_name, def)

Registers a projectile entity.

Arguments:

  • entity_name: The name the entity will be refered to by the minetest engine
  • def: Projectile defintion. Supports all fields that standard minetest entities support. Must include the field _vl_projectile for projectile-specific behaviors. These are the supported fields:
    • ignore_gravity: if true, the projectile will not be affected by gravity
    • liquid_drag: if true, apply drag from liquid nodes to the projectile
    • survive_collision: if this field is false or nil, the projectile will be removed after a collision.
    • sticks_in_players: if true, the projectile will stick into players after colliding with them.
    • damage_groups: damage group information to use for punch(). May be a function of type function(projectile, entity_def, projectile_def, obj) that returns dynamic damange group information.
    • allow_punching: will the projectile punch entities it collides with. May be a function of type function(projectile, entity_def, projectile_def, obj).
    • behaviors: a list of behavior callbacks that define the projectile's behavior. This mod provides the following behaviors: vl_projectiles.collides_with_solids, vl_projectiles.collides_with_entities and vl_projectiles_raycast_collides_with_entities
    • sounds: sounds for this projectile. All fields take a table with three parameters corresponding to the three parameters for minetest.play_sound(). Supported sounds are:
      • on_collision: played when no other more specific sound is defined. May be a function of type function(projectile, entity_def, projectile_def, type, ...)
      • on_solid_collision: played when the projectile collides with a solid node. May be a function of type funciton(projectile, entity_def, projectile_def, type, pos, node, node_def) with type = "node"
      • on_entity_collision: played when the projectile collides with another entity. May be a function of type function(projectile, entity_def, projectile_def, type, entity) with type = "entity"
  • on_collide_with_solid: callback of type function(projectile, pos, node, node_def) used when the projectile collides with a solid node. Requires vl_projectile.collides_with_solids in behaviors list.
  • on_collide_with_entity: callback of type function(projectile, pos, obj) used when the projectile collides with an entity. Requires vl_projectile.collides_with_entities in behaviors list.

vl_projectile.update_projectile(self, dtime)

Performs standard projectile update logic and runs projectile behaviors.

Arguments:

  • self: The lua entity of the projectile to update
  • dtime: The amount of time that has passed since the last update. Nomally the dtime parameter of the entity's on_step(self, dtime) callback.

vl_projectile.create(entity_id, options)

Creates a projectile and performs convenience initialization.

Arguments:

  • entity_id: The name the entity as passed to vl_projectile.register()
  • options: A table with optional parameters. Supported fields are:
    • dir: direction the projectile is moving in
    • velocity: scalar velocity amount
    • drag: scalar resistence to velocity
    • owner: passed thru unmodified
    • extra: passed thru unmodified

Custom Projectile Behaviors

The projectile API supports specifying the behaviors that a projectile will exhibit. There are several standard behaviors provided with the API:

  • vl_projectile.collides_with_solids: handles collisions between projectiles and solid nodes
  • vl_projectile.collides_with_entities: handles collisions between projectiles and entities by checking nearby entities
  • vl_projectile.raycast_collides_with_entities: handles collisions between projectils and entities by performing a raycast check along the path of movement.

Custom behaviors can be provided by adding a function with the signature function(self, dtime, entity_def, projectile_def) to the list of behaviors a projectile supports.

Arguments:

  • self: The lua entity of the projectile
  • dtime: The amount of time that has passed since the last update. Nomally the dtime parameter of the entity's on_step(self, dtime) callback.
  • entity_def: The definition from minetest.registered_entities for the projectile.
  • projectile_def: Same as entity_def._vl_projectile