Level Entities
All of these entity types should be relatively familiar to anyone who has designed a map for Quake-based or Source-based games; the biggest difference between Quake-style level entities and our entities is that our entities never include built-in proximity triggers; triggers are always separate, and must be created separately from what they control.
Triggering Events
Triggerable entities are what give a level its interactivity. There are several types of generic Triggerables; ones that must be in the player's hand to be activated (Usable), ones that can be activated by the player while in the world (Button), and ones that can only be activated by the player (or, optionally, another object) entering them. (Trigger) There are also other Triggerable entities (including Movable entities; see below) which may not be activated by the player directly, but must instead be activated by a signal.
Slots are named using the following convention:
EntityName:slotName
EntityName should match the name of one or more entities, and slotName should match one of the available signals on each of the matched entities.
SignalSource entities are able to emit signals which can trigger slots in other entities. All SignalSource entities share some common properties for each signal they define:
<signal>-target(string): a comma-separated list of names of the slots that will be activated when this signal is emitted
The below entities also share one common signal:
activated: emitted when the entity is activated
Usable
These entities must be picked up to be activated.
Button
These entities can be activated by the player by using the activate action on them.
Trigger
These entities can be activated by the player or another entity entering their collider.
Properties:
player-only(boolean): denotes whether thisTriggercan only be activated by a player
Doors, Platforms, Lifts, etc.
All of the aforementioned types of objects are implemented using the Movable entity types. Various Movable classes, listed below, allow for different types of triggered movement.
All Movable entities share some common properties:
toggle(boolean): denotes whether theMovablewill continue moving until triggered again, instead of stopping at the end of its movementreverse(boolean): denotes whether theMovablewill reverse when it reaches its end, as opposed to traveling back to its initial position directlystop_at_end(boolean): denotes whether theMovablewill stop at the end of its movement (ifreverseis true) or at its initial position (ifreverseis false) and wait to be triggered againonce(boolean): denotes whether theMovablewill activate multiple times
They also share one common slot:
start_movement
Finally, they also share some common signals:
movement_startedmovement_stoppedreached_startreached_end
LinearMovable
Properties:
distance(string - vector): the direction and distance in which to move thisMovable's geometry when activatedspeed(float): the speed at which to move the geometry (units per second)
RotationMovable
Properties:
rotation(string - vector): the total rotation to apply to thisMovable's geometry when activatedspeed(float): the speed at which to rotate the geometry (degrees per second)
PathMovable
Properties:
path(string): a comma-separated list of node names to which thisPathMovablewill move, in turn
ParametricMovable
This is the most advanced type of Movable; it uses a parametric movement equation to allow advanced types of movement without using a path.
Properties:
position(string - vector): the coefficients oftfor thex,y, andzcomponents of the positionrotation(string - vector): the coefficients oftfor the heading, pitch, and roll components of the rotation