105 lines
2.7 KiB
Plaintext
105 lines
2.7 KiB
Plaintext
-- @include ./constants.txt
|
|
require("./constants.txt")
|
|
|
|
InputController = class("InputController")
|
|
|
|
function InputController:initialize()
|
|
self.ply = NULL_ENTITY
|
|
|
|
self.config = {} -- keys and pedal speed config
|
|
|
|
if SERVER then
|
|
self.throttle = {
|
|
target = 0,
|
|
value = 0
|
|
}
|
|
self.brake = {
|
|
target = 0,
|
|
value = 0
|
|
}
|
|
self.clutch = {
|
|
target = 0,
|
|
value = 0
|
|
}
|
|
self.start = {
|
|
target = 0,
|
|
value = 0,
|
|
type = "keyPress"
|
|
}
|
|
|
|
net.receive("input", function()
|
|
local inputName = net.readString()
|
|
local target = net.readBool()
|
|
|
|
if self[inputName] then
|
|
self[inputName].target = target and (self.config[inputName] and self.config[inputName].max or 1) or 0
|
|
end
|
|
end)
|
|
end
|
|
|
|
if CLIENT then
|
|
function setTargetInput(pressedKey, target)
|
|
local key = string.upper(input.getKeyName(pressedKey))
|
|
|
|
if self.keyToInputName[key] then
|
|
net.start("input")
|
|
net.writeString(self.keyToInputName[key].inputName)
|
|
net.writeBool(target)
|
|
net.send()
|
|
end
|
|
end
|
|
|
|
hook.add("inputPressed", "inputPress", function(key)
|
|
if (self.ply ~= NULL_ENTITY and self.ply == CURRENT_PLAYER) then
|
|
setTargetInput(key, true)
|
|
end
|
|
end)
|
|
|
|
hook.add("inputReleased", "inputRelease", function(key)
|
|
if (self.ply ~= NULL_ENTITY and self.ply == CURRENT_PLAYER) then
|
|
setTargetInput(key, false)
|
|
end
|
|
end)
|
|
|
|
net.receive("changePlayer", function()
|
|
self.ply = net.readEntity()
|
|
end)
|
|
end
|
|
|
|
end
|
|
|
|
if SERVER then
|
|
function InputController:setPlayer(ply)
|
|
self.ply = ply
|
|
net.start("changePlayer")
|
|
net.writeEntity(ply or NULL_ENTITY)
|
|
net.send()
|
|
end
|
|
|
|
function InputController:update()
|
|
for key in pairs(self.config) do
|
|
if self[key] then
|
|
local pressSpeed = self.config[key].press or 1
|
|
local releaseSpeed = self.config[key].release or 1
|
|
|
|
self[key].value = math.lerp(self[key].target == 1 and pressSpeed or releaseSpeed, self[key].value,
|
|
self[key].target)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function InputController:setConfig(config)
|
|
self.config = table.copy(config)
|
|
|
|
local keyToInputName = {}
|
|
|
|
for key, value in pairs(config) do
|
|
keyToInputName[string.upper(value.key)] = {
|
|
inputName = key
|
|
}
|
|
end
|
|
|
|
self.keyToInputName = table.copy(keyToInputName)
|
|
end
|