2021-11-09 21:09:03 +05:00

89 lines
2.2 KiB
Plaintext

-- @include ../libs/constants.txt
require('../libs/constants.txt')
Input = class('Input')
-- Private here
function Input:_setupHooks()
hook.add('inputPressed', 'KeyPress', function(key)
if self.driver == CURRENT_PLAYER then
self:_trySetTargetValue(key)
end
end)
hook.add('inputReleased', 'KeyRelease', function(key)
if self.driver == CURRENT_PLAYER then
self:_trySetTargetValue(key)
end
end)
end
function Input:bothKeysHolding(axle)
return (input.isKeyDown(axle.Positive) == true) and (input.isKeyDown(axle.Negative) == true)
end
function Input:noKeysHolding(axle)
return (input.isKeyDown(axle.Positive) == false) and (input.isKeyDown(axle.Negative) == false)
end
function Input:getAxleValue(axle)
local positiveValue = axle.Positive ~= nil and input.isKeyDown(axle.Positive)
local negativeValue = axle.Negative ~= nil and input.isKeyDown(axle.Negative)
return (positiveValue and 1 or 0) - (negativeValue and 1 or 0) -- (input.isKeyDown(axle.Positive) and 1 or 0) - (input.isKeyDown(axle.Negative) and 1 or 0)
end
function Input:_trySetTargetValue(key)
local triggeredKey = self.keys[key]
if triggeredKey ~= nil then
local triggeredAxle = self.axles[triggeredKey.Axle]
local targetValue = self:getAxleValue(triggeredAxle)
net.start('SetTargetAxle')
net.writeString(triggeredKey.Axle)
net.writeInt(targetValue, 4)
net.send()
end
end
function Input:_setupNetListeners()
net.receive('SyncDriver', function()
self.driver = net.readEntity()
end)
end
function Input:_mapKeys(axles)
for k, v in pairs(axles) do
if v.Negative ~= nil then
self.keys[v.Negative] = {
Axle = k
}
end
if v.Positive ~= nil then
self.keys[v.Positive] = {
Axle = k
}
end
end
end
-- Public here
function Input:initialize(options)
options = options or {}
self.axles = options.Axles
self.keys = {}
self.driver = NULL_ENTITY
self:_setupHooks();
self:_setupNetListeners();
self:_mapKeys(options.Axles)
end
function Input:update()
end