| # Reactions |
|
|
| Reactions are code objects that run when a message is fired - essentially a message handler attached to an instance of data. |
|
|
| Reactions can be defined only for messages that have a definition (a *MsgDef* instance). |
| Some data definitions inherit `MsgReactionsPreset` and can have *reactions* (message handlers) attached to any of their instances. |
| Ractions can also have a *target* which can filter out messages. |
|
|
| # Message definitions |
|
|
| Message definitions (or *MsgDef*) are presets which describe a message or event. |
| Their *Id* must match the message or event they describe, as well as their *Params*. |
| Finally the message or event can be associated with a specific *Target* they are concerned with. |
|
|
| # Message reaction presets |
|
|
| Message reaction presets (or *MsgReactionPreset*) are presets that contain code which can react to messages being fired, similar to global message handlers ([see *OnMsg*](LuaMessages.md.html)). |
| This message handler is associated with the preset instance and it's lifecycle. |
| When the reaction function is called, the first parameter is always *preset*. |
|
|
| # Unit reaction presets |
|
|
| This type of data can contain event handlers that are attached to units (their *Target* is *Unit*), while the preset is associated with the unit in some way. |
| Instead of reacting to global [Lua messages](LuaMessages.md.html), these handlers react to events the units can fire themselves by calling `self:CallReactions(event_id, ...)`. |
| When the reaction function is called, the first two parameters are always *preset, unit*. |
|
|
| ## Reference |
|
|
| Note that *Unit* inherits *ReactionObject*. |
|
|
| **function ReactionObject:AddReactions(instance, list, insert_locations)** |
| : Registers all handlers from the reaction objects in *list*. These reactions are associated with the object *instance*. |
|
|
| **function ReactionObject:RemoveReactions(instance)** |
| : Removes the reactions associated with the object *instance*. |
|
|
| **function ReactionObject:AddEventReaction(event_id, instance, handler)** |
| : Registers a single event *handler* (as opposed to a *Reaction* object). The handler will react to the event *event_id*. |
|
|
| **function ReactionObject:RemoveEventReactions(event_id, instance)** |
| : Removes all event handlers associated with this *event_id* and *instance*. |
|
|
| **ReactionObject:CallReactions(event_id, ...)** |
| : Emits an event, which will call all registered reactions/handlers. |
|
|
| (insert footer.md.html here) |
| <style class="fallback">body{visibility:hidden;white-space:pre;font-family:monospace}</style><script src="markdeep.min.js" charset="utf-8"></script><script>window.alreadyProcessedMarkdeep||(document.body.style.visibility="visible")</script> |