The skeletal animation section could perhaps use a small illustration.
Blender exporter sets the trigger data to a String value of the bone name, but I suppose one can use whatever Variant they want; e.g., optimize by using integers or converting the Strings to indices at runtime.
(edit) Event:
URHO3D_EVENT(E_ANIMATIONTRIGGER, AnimationTrigger)
{
URHO3D_PARAM(P_NODE, Node); // Node pointer
URHO3D_PARAM(P_ANIMATION, Animation); // Animation pointer
URHO3D_PARAM(P_NAME, Name); // String
URHO3D_PARAM(P_TIME, Time); // Float
URHO3D_PARAM(P_DATA, Data); // User-defined data type
}
Models/run.xml
<animation>
<trigger normalizedtime="0.2" type="String" value="leg left ankle" />
<trigger normalizedtime="0.7" type="String" value="leg right ankle" />
</animation>
OnAnimationTrigger(StringHash eventType, VariantMap& eventData) {
const String& animStateName(eventData[AnimationTrigger::P_NAME].GetString());
const String& boneName(eventData[AnimationTrigger::P_DATA].GetString());
...