Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implements AcceptInputProxy #1

Open
TIMONz1535 opened this issue Feb 4, 2022 · 1 comment
Open

Implements AcceptInputProxy #1

TIMONz1535 opened this issue Feb 4, 2022 · 1 comment
Assignees
Labels
documentation Improvements or additions to documentation enhancement New feature or request question Further information is requested

Comments

@TIMONz1535
Copy link
Owner

TIMONz1535 commented Feb 4, 2022

  1. Implements AcceptInputProxy in the Entity meta, that hooks inputs through GM:AcceptInput.

A serious performance check is required.

Usage:

security_button:AcceptInputProxy("Use", function(ent, input, activator, caller, value)
	if IsValid(activator) and activator:IsPlayer() and not activator:IsAdmin() then
		return true -- suppress use for non-admin players
	end
end)

local proxies = {}
local function AcceptInputProxy(target, input, callback)
for _, v in ipairs(target) do
local idx = v:EntIndex()
proxies[idx] = proxies[idx] or {}
proxies[idx][input] = callback
end
end
hook.Add(
"AcceptInput",
"MapLogicProxy",
function(ent, input, activator, caller, value)
local callbacks = proxies[ent:EntIndex()]
if callbacks then
local callback = callbacks[input]
if callback then
return callback(ent, input, activator, caller, value)
end
end
end
)

  1. Implements SuppressOutputs that must suppress default map inputs through GM:AcceptInput.
    > Unfortunately, there is no way to remove an already added output from the entity #1984. Alternatively, you can mute them all via GM:AcceptInput.

Most likely it will be irrelevant if ClearOutputs(string)/ClearAllOutputs appears
Facepunch/garrysmod-requests#1984 (comment)

@TIMONz1535 TIMONz1535 pinned this issue Feb 4, 2022
@TIMONz1535 TIMONz1535 unpinned this issue Feb 4, 2022
@TIMONz1535 TIMONz1535 self-assigned this Feb 4, 2022
@TIMONz1535 TIMONz1535 changed the title Implements AcceptInputProxy Implements AcceptInputProxy, SuppressOutputs Jul 2, 2022
@TIMONz1535 TIMONz1535 added documentation Improvements or additions to documentation enhancement New feature or request question Further information is requested labels Jul 2, 2022
@TIMONz1535
Copy link
Owner Author

TIMONz1535 commented Jul 5, 2022

Потестил, хук AcceptInput вызывает минимальное влияние на производительность. Так же как и не добавленный хук OnFireOutput. Тестировал на 12 func_tracktrain, который вызывает OnNextPoint каждый кадр при движении, запускал и останавливал их каждую секунду.

В общем луа код до цикла из 1кк итераций не вызывает заметных просадок в OnFireOutput. AcceptInput судя по всему не вызывается для скриптовых энтитей или если у них есть метод, потому что на мой контроллер глобальный хук не прилетал. Поэтому конкретно глобальный хук потестить не смог.

Однако добавление AddOutput OnNextPoint вызвало просадки в Game категории, что указывает на то что разруливание оутпутов внутри движка само по себе тормозит. Это могло быть спорно если бы не одна закономерность - добавление все новых оутпутов перезагрузкой контроллера, без чистки недействительных, вызвало резко ухудшение производительности в Game. Чем больше перезагрузок тем хуже. Это исключает затраты, связанные с пересылкой в Lua.

@TIMONz1535 TIMONz1535 changed the title Implements AcceptInputProxy, SuppressOutputs Implements AcceptInputProxy Jun 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement New feature or request question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant