input.lua 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. local Input = class()
  2. function Input:init()
  3. self.inputs = {}
  4. self.focused = nil
  5. end
  6. function Input:textinput(character)
  7. if self.focused then
  8. if character:match('%w') or character == '\b' then
  9. self.inputs[self.focused].val = self.inputs[self.focused].val .. character
  10. data.media.sounds.click:play()
  11. end
  12. end
  13. end
  14. function Input:keypressed(key)
  15. if key == 'backspace' and self.focused and #self.inputs[self.focused].val > 0 then
  16. self.inputs[self.focused].val = self.inputs[self.focused].val:sub(1, -2)
  17. data.media.sounds.click:play()
  18. elseif key == 'tab' then
  19. if not self.focused then
  20. self:focus(self.inputs[1])
  21. else
  22. local idx
  23. for i = 1, #self.inputs do
  24. if self.inputs[i] == self.focused then idx = i break end
  25. end
  26. self:focus(self.inputs[idx % #self.inputs + 1])
  27. end
  28. data.media.sounds.click:play()
  29. end
  30. end
  31. function Input:clear()
  32. self.focused = nil
  33. table.clear(self.inputs)
  34. end
  35. function Input:add(name, default)
  36. self.inputs[name] = {
  37. val = default,
  38. default = default
  39. }
  40. table.insert(self.inputs, name)
  41. end
  42. function Input:val(name)
  43. return self.inputs[name].val
  44. end
  45. function Input:focus(input)
  46. self:unfocus()
  47. self.focused = input
  48. if self.inputs[self.focused].default == self.inputs[self.focused].val then self.inputs[self.focused].val = '' end
  49. end
  50. function Input:unfocus()
  51. if not self.focused then return end
  52. if self.inputs[self.focused].val == '' and self.inputs[self.focused].default then self.inputs[self.focused].val = self.inputs[self.focused].default end
  53. self.focused = nil
  54. end
  55. return Input