Тема: MonkeyBehaviour
Показать сообщение отдельно
Старый 20.08.2016, 22:05   #15
mingw
ПроЭктировщик
 
Аватар для mingw
 
Регистрация: 01.01.2016
Сообщений: 138
Написано 71 полезных сообщений
(для 155 пользователей)
Ответ: MonkeyBehaviour

Модуль 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)
(Offline)
 
Ответить с цитированием