Модуль BlitzMax BRL.Hook :
Private
Type THook
Field succ:THook
Field priority
Field func:Object( id,data:Object,context:Object )
Field context:Object
End Type
Global hooks:THook[256]
Public
Function AllocHookId()
Global id=-1
id:+1
If id>255 Throw "Too many hook ids"
Return id
End Function
Function AddHook( id,func:Object( id,data:Object,context:Object ),context:Object=Null,priority=0 )
Local t:THook=New THook
t.priority=priority
t.func=func
t.context=context
Local pred:THook
Local hook:THook=hooks[id]
While hook
If priority>hook.priority Exit
pred=hook
hook=hook.succ
Wend
If pred
t.succ=pred.succ
pred.succ=t
Else
t.succ=hooks[id]
hooks[id]=t
EndIf
End Function
Function RunHooks:Object( id,data:Object )
Local hook:THook=hooks[id]
While hook
data=hook.Func( id,data,hook.context )
hook=hook.succ
Wend
Return data
End Function
1) Создаем переменную LateUpdateHook:Int = AllocHookId()
2) Вставляем объект и функцию-обработчик с помощью AddHook(LateUpdateHook, func, object, priority)
3) Ну и обработка всего этого дела - RunHooks(LateUpdateHook)