-
Notifications
You must be signed in to change notification settings - Fork 0
Entity.Input method behavior RU
This page is available in English
Я рекомендую использовать метод Entity:Fire в вашем коде, вместо Entity:Input. Вопреки распространенному мнению, Entity:Fire тоже принимает аргументы activator и caller, а еще имеет аргумент delay, что невероятно полезно. Метод Entity:Input запускает инпут мгновенно, до того как завершится инициализация контроллера, это может привести к непредсказуемому поведению. Однако сам контроллер использует внутри себя Entity:Input для добавления оутпутов через инпут AddOutput, это сделано для совместимости, не более.
local button = controller:GetMetaTarget("start_button_no")
button:Input("Press", ply, ply, nil)
button.OnPressed = function(ent, activator)
print(activator, "just pressed", ent)
end
button:Input("Press", ply, ply, nil)
button.OnPressed = function(ent, activator)
print(activator, "just activated", ent)
endВ примере выше инпут Press сработает еще до того, как будет добавлен оутпут OnPressed через AddOutput. Однако второй Press по логике должен напечатать just pressed. На самом деле напечатает just activated. Вы можете увидеть порядок вызовов с помощью консольной команды developer 2.
(19.77) input TIMON_Z1535: start_button_no.Press()
(19.77) input map_logic_controller1: start_button_no.AddOutput(OnPressed map_logic_controller1:__OnPressed::0:-1)
(19.77) input TIMON_Z1535: start_button_no.Press()
(19.77) output: (func_button,start_button_no) -> (map_logic_controller1,__OnPressed)()
+ [MapLogic] Initialized successfully
# AcceptInput: __OnPressed Player [1][TIMON_Z1535] Entity [1306][func_button] nil
+ Player [1][TIMON_Z1535] just activated Entity [1306][func_button]Используем тот же самый пример, но заменим Entity:Input на Entity:Fire. Теперь инпуты Press сработают после завершения инициализация, и оутпута будет два!
Закономерно, что оба они выведут just activated, ведь мы переопределили Lua функцию.
(11.30) input map_logic_controller1: start_button_no.AddOutput(OnPressed map_logic_controller1:__OnPressed::0:-1)
+ [MapLogic] Initialized successfully
(11.30) input TIMON_Z1535: start_button_no.Press()
(11.30) output: (func_button,start_button_no) -> (map_logic_controller1,__OnPressed)()
(11.30) input TIMON_Z1535: start_button_no.Press()
(11.30) output: (func_button,start_button_no) -> (map_logic_controller1,__OnPressed)()
# AcceptInput: __OnPressed Player [1][TIMON_Z1535] Entity [1306][func_button] nil
+ Player [1][TIMON_Z1535] just activated Entity [1306][func_button]
# AcceptInput: __OnPressed Player [1][TIMON_Z1535] Entity [1306][func_button] nil
+ Player [1][TIMON_Z1535] just activated Entity [1306][func_button]