-
Notifications
You must be signed in to change notification settings - Fork 1
/
button.lua
83 lines (71 loc) · 1.85 KB
/
button.lua
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
Buttons = {}
local snapSound = love.audio.newSource( 'sound/snap_dice.mp3','static' )
local tapSound = love.audio.newSource( 'sound/tap_dice.mp3','static' )
function newButton(xp,yp,w,h,name,func)
if xp == nil then
xp = 0
yp = 0
w = 100
h = 100
end
if name == nil then
name = 'Button'
end
if func == nil then
func = function()
print('no functionality for this button')
end
end
local button = {
x = xp,
y = yp,
width = w,
height = h,
name = name,
visible = true,
wasHoverLastFrame = true,
hover = function(self)
local mx,my = love.mouse.getX(),love.mouse.getY()
return mx > self.x and
my > self.y and
mx < self.x + self.width and
my < self.y + self.height
end,
draw = function(self)
if not self.visible then return end
local fill = 'line'
if self:hover() then
if not self.wasHoverLastFrame then
tapSound:stop()
tapSound:play()
end
love.graphics.setColor(255, 255, 255)
love.graphics.rectangle('line', self.x, self.y, self.width, self.height)
fill = 'fill'
end
love.graphics.setColor(100, 100, 255)
if love.mouse.isDown(1) and self:hover() then
love.graphics.setColor(120, 120, 255)
end
love.graphics.rectangle(fill, self.x, self.y, self.width, self.height)
love.graphics.setColor(255,255,255)
love.graphics.print(self.name,self.x+10,self.y+10)
self.wasHoverLastFrame = self:hover()
end,
onClick = func
}
Buttons[#Buttons + 1] = button
return button
end
function love.mousepressed(x, y, button, isTouch)
if button == 1 then
for i=1,#Buttons do
local b = Buttons[i]
if b:hover() and b.visible then
b.onClick()
snapSound:stop()
snapSound:play()
end
end
end
end