-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinput.lua
More file actions
128 lines (107 loc) · 4.09 KB
/
input.lua
File metadata and controls
128 lines (107 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
--
-- input.lua
-- redditgamejam-05
--
-- Created by Jay Roberts on 2011-01-06.
-- Copyright 2011 GloryFish.org. All rights reserved.
--
require 'class'
require 'vector'
require 'controller_manager'
require 'utility'
Input = class(function(input)
input.controller = ControllerManager()
input.state = {
movement = vector(0, 0),
buttons = {
jump = false,
fire = false,
back = false,
start = false,
newpress = {
jump = false,
fire = false,
back = false,
start = false,
}
}
}
input.previous_state = {}
end)
function Input:update(dt)
self.previous_state = deepcopy(self.state);
self.state.movement = vector(0, 0)
-- Get keyboard movement
self.state.buttons.left = false
self.state.buttons.right = false
if love.keyboard.isDown('left') or love.keyboard.isDown('a') then
self.state.movement.x = -1
self.state.buttons.left = true
elseif love.keyboard.isDown('right') or love.keyboard.isDown('d') then
self.state.movement.x = 1
self.state.buttons.right = true
end
self.state.buttons.up = false
self.state.buttons.down = false
if love.keyboard.isDown('up') or love.keyboard.isDown('w') then
self.state.movement.y = -1
self.state.buttons.up = true
elseif love.keyboard.isDown('down') or love.keyboard.isDown('s') then
self.state.movement.y = 1
self.state.buttons.down = true
end
-- Get keyboard buttons
self.state.buttons.jump = love.keyboard.isDown('z')
self.state.buttons.fire = love.keyboard.isDown('x')
self.state.buttons.back = love.keyboard.isDown('escape')
self.state.buttons.start = love.keyboard.isDown('return')
-- Get controller movement
if self.controller.enabled then
self.controller:update(dt)
if self.controller.state.joystick ~= vector(0, 0) then
self.state.movement = self.controller.state.joystick
-- Apply joystick movement as button presses
if self.controller.state.joystick.x < 0 then
self.state.buttons.left = true
end
if self.controller.state.joystick.x > 0 then
self.state.buttons.right = true
end
if self.controller.state.joystick.y < 0 then
self.state.buttons.up = true
end
if self.controller.state.joystick.y > 0 then
self.state.buttons.down = true
end
end
if self.controller.state.buttons.a then
self.state.buttons.jump = true
end
if self.controller.state.buttons.x then
self.state.buttons.fire = true
end
if self.controller.state.buttons.back then
self.state.buttons.back = true
end
if self.controller.state.buttons.start then
self.state.buttons.start = true
end
end
-- Add meta buttons
self.state.buttons.select = self.state.buttons.start or self.state.buttons.jump or self.state.buttons.fire
self.state.buttons.cancel = self.state.buttons.back
if self.controller.enabled then
self.state.buttons.cancel = self.state.buttons.cancel or self.controller.state.buttons.b
end
-- Check for new button presses
self.state.buttons.newpress.up = self.state.buttons.up and not self.previous_state.buttons.up
self.state.buttons.newpress.down = self.state.buttons.down and not self.previous_state.buttons.down
self.state.buttons.newpress.left = self.state.buttons.left and not self.previous_state.buttons.left
self.state.buttons.newpress.right = self.state.buttons.right and not self.previous_state.buttons.right
self.state.buttons.newpress.jump = self.state.buttons.jump and not self.previous_state.buttons.jump
self.state.buttons.newpress.fire = self.state.buttons.fire and not self.previous_state.buttons.fire
self.state.buttons.newpress.start = self.state.buttons.start and not self.previous_state.buttons.start
self.state.buttons.newpress.back = self.state.buttons.back and not self.previous_state.buttons.back
self.state.buttons.newpress.select = self.state.buttons.select and not self.previous_state.buttons.select
self.state.buttons.newpress.cancel = self.state.buttons.cancel and not self.previous_state.buttons.cancel
end