input redo + env pollution

This commit is contained in:
kepler155c@gmail.com
2017-10-20 04:23:17 -04:00
parent fb0f3e567a
commit 31b3787695
9 changed files with 84 additions and 67 deletions

View File

@@ -6,35 +6,35 @@ local os = _G.os
local modifiers = Util.transpose {
keys.leftCtrl, keys.rightCtrl,
keys.leftShift, keys.rightShift,
--keys.leftAlt, keys.rightAlt,
keys.leftAlt, keys.rightAlt,
}
local input = {
pressed = { },
}
function input:toCode(code, ch)
function input:toCode(ch, code)
ch = ch or keys.getName(code)
local result = { }
if self.pressed[keys.leftCtrl] or self.pressed[keys.rightCtrl] then
table.insert(result, 'control')
end
--if self.pressed[keys.leftAlt] or self.pressed[keys.rightAlt] then
-- table.insert(result, 'alt')
--end
if self.pressed[keys.leftShift] or self.pressed[keys.rightShift] then
if modifiers[code] or #ch > 1 then
table.insert(result, 'shift')
else
ch = ch:upper()
end
if self.pressed[keys.leftAlt] or self.pressed[keys.rightAlt] then
table.insert(result, 'alt')
end
if not modifiers[code] then
if self.pressed[keys.leftShift] or self.pressed[keys.rightShift] then
if code and modifiers[code] then
table.insert(result, 'shift')
elseif #ch == 1 then
table.insert(result, ch:upper())
else
table.insert(result, 'shift')
table.insert(result, keys.getName(code) or ch)
end
elseif not code or not modifiers[code] then
table.insert(result, ch)
end
@@ -43,7 +43,6 @@ end
function input:reset()
self.pressed = { }
self.ch = nil
self.fired = nil
self.timer = nil
@@ -55,25 +54,22 @@ function input:translate(event, code, p1, p2)
if event == 'key' then
if p1 then -- key is held down
if not modifiers[code] then
self.fired = input:toCode(code, self.ch)
self.fired = input:toCode(keys.getName(code), code)
return self.fired
end
else
self.fired = nil
self.ch = nil
self.pressed[code] = true
end
elseif event == 'char' then
self.ch = code
-- reset just in case
self.pressed[keys.leftCtrl] = nil
self.pressed[keys.rightCtrl] = nil
self.fired = true
return input:toCode(code)
elseif event == 'key_up' then
if not self.fired then
if self.pressed[code] then
self.fired = input:toCode(code, self.ch)
self.fired = input:toCode(keys.getName(code), code)
self.pressed[code] = nil
return self.fired
end
@@ -81,11 +77,10 @@ function input:translate(event, code, p1, p2)
self.pressed[code] = nil
elseif event == 'paste' then
self.ch = 'paste'
self.pressed[keys.leftCtrl] = nil
self.pressed[keys.rightCtrl] = nil
self.fired = input:toCode(0, self.ch)
return self.fired
self.fired = true
return input:toCode('paste')
elseif event == 'mouse_click' then
local buttons = { 'mouse_click', 'mouse_rightclick' }
@@ -93,9 +88,8 @@ function input:translate(event, code, p1, p2)
self.mfired = nil
elseif event == 'mouse_drag' then
self.mch = 'mouse_drag'
self.mfired = input:toCode(0, self.mch)
return self.mfired
self.mfired = true
return input:toCode('mouse_drag')
elseif event == 'mouse_up' then
if not self.mfired then
@@ -111,11 +105,12 @@ function input:translate(event, code, p1, p2)
self.x = p1
self.y = p2
end
self.mfired = input:toCode(0, self.mch)
self.mfired = input:toCode(self.mch)
else
self.mch = 'mouse_up'
self.mfired = input:toCode(0, self.mch)
self.mfired = input:toCode(self.mch)
end
self.fired = true
return self.mfired
elseif event == "mouse_scroll" then
@@ -123,8 +118,8 @@ function input:translate(event, code, p1, p2)
[ -1 ] = 'scrollUp',
[ 1 ] = 'scrollDown'
}
self.mch = directions[code]
return input:toCode(0, self.mch)
self.fired = true
return input:toCode(directions[code])
end
end