Работа с инжектом в функции¶
MetrostroiExtensionsLib позволяет удобно и без конфликтов инжектится в стандартную функцию сразу нескольким рецептам. Инжект (в данном случае) - выполнение нового кода до или после исходной функции.
Система приоритетов¶
В Metrostroi Extensions у каждого инжекта в функцию есть приоритет.
- Функции с негативным приоритетом будут выполнены ДО вызова стандартной функции. Чем меньше значение приоритета, тем раньше данная функция будет вызвана (тоесть, функция с приоритетом -100 будет вызвана раньше, чем функция с приоритетом -10).
- Функции с положительным приоритетом будут выполнены ПОСЛЕ вызова стандартной функции. Чем больше значение приоритета, тем раньше данная функция будет вызвана (тоесть, функция с приоритетом 100 будет вызвана раньше, чем функция с приоритетом 10)
- Функции с приоритетом 0 не может существовать - такой функцией считается стандартная функция
Возвраты (return) из функции¶
Если последним аргументом внутри вашей инжектированной функции вернуть MEL.Return
, то произойдет return из исходной функции. Все аргументы до этого вернуться из исходной функции.
Тоесть, если вернуть MEL.Return
, то выполнение функции (в которую происходил инжект) вовсе прекратится. Но если не вызывать MEL.Return
, оставшийся код функции (как исходной, так и код инжектов в эту функцию других рецептов) будет продолжать выполнятся, хотя код функции именно вашего инжекта перестанет выполняться.
Аргументы в инжектированную функцию¶
Первым аргументом, передающимся в инжектированную функцию всегда является энтити вагона.
Если инжектированная функция имеет положительный приоритет - то вторым аргументом будет то, что вернула стандартная функция. Последующие аргументы будут такие же, как и те, что передавались в исходную функцию.
Если инжектированная функция имеет отрицательный приоритет - то последующие аргументы будут такие же, как и те, что передавались в исходную функцию.
MEL.InjectIntoSharedFunction - произвести инжект в функцию на сервере и клиенте¶
MEL.InjectIntoSharedFunction(ent_or_entclass, function_name, function_to_inject, priority)
- произвести инжект в функцию на сервере и клиенте
(scope: Shared)
ent_or_entclass
- энтити вагона или его классfunction_name
- имя функции, в которую необходимо произвести инжектfunction_to_inject
- функция, которая будет инжектирована[priority]
- приоритет инжекта. См. система приоритетов
MEL.InjectIntoClientFunction - произвести инжект в функцию на клиенте¶
MEL.InjectIntoClientFunction(ent_or_entclass, function_name, function_to_inject, priority)
- произвести инжект в функцию на клиенте
(scope: Client)
ent_or_entclass
- энтити вагона или его классfunction_name
- имя функции, в которую необходимо произвести инжектfunction_to_inject
- функция, которая будет инжектирована[priority]
- приоритет инжекта. См. система приоритетов
MEL.InjectIntoServerFunction - произвести инжект в функцию на сервере¶
MEL.InjectIntoServerFunction(ent_or_entclass, function_name, function_to_inject, priority)
- произвести инжект в функцию на сервере
(scope: Server)
ent_or_entclass
- энтити вагона или его классfunction_name
- имя функции, в которую необходимо произвести инжектfunction_to_inject
- функция, которая будет инжектирована[priority]
- приоритет инжекта. См. система приоритетов
MEL.InjectIntoSystemFunction - произвести инжект в функцию системы¶
Warning
В данный момент данный функционал работает только для систем, которые имеют флаг DontAccelerateSimulation - то есть, которые не используют Turbostroi.
Команда разработки Metrostroi Extensions в данный момент ищет возможности для реализации работы инжекта в функции, использующие Turbostroi.
MEL.InjectIntoSystemFunction(system_name, function_name, function_to_inject, priority)
- произвести инжект в функцию системы
(scope: Shared)
system_name
- имя системыfunction_name
- имя функции, в которую необходимо произвести инжектfunction_to_inject
- функция, которая будет инжектирована[priority]
- приоритет инжекта. См. система приоритетов