hudpause.lua 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. local g = love.graphics
  2. HudPause = class()
  3. local function backHandler()
  4. ctx.paused = not ctx.paused
  5. end
  6. local function quitHandler()
  7. local page = ctx.tutorial.active and ctx.tutorial.destination or ctx.mode
  8. Context:add(Menu, ctx.user, ctx.options, {page = page, biome = ctx.biome})
  9. Context:remove(ctx)
  10. end
  11. local function backGeometry()
  12. local u, v = ctx.hud.u, ctx.hud.v
  13. local w, h = u * .2, (u * .2) / 2.6
  14. return {u * .5 - w / 2, v * .4, w, h}
  15. end
  16. local function quitGeometry()
  17. local u, v = ctx.hud.u, ctx.hud.v
  18. local w, h = u * .2, (u * .2) / 2.6
  19. return {u * .5 - w / 2, v * .6, w, h}
  20. end
  21. function HudPause:init(hud)
  22. self.alpha = 0
  23. self.back = hud.gooey:add(Button, 'hud.pause.back')
  24. self.back.geometry = backGeometry
  25. self.back:on('click', backHandler)
  26. self.back.text = 'Back'
  27. self.quit = hud.gooey:add(Button, 'hud.pause.quit')
  28. self.quit.geometry = quitGeometry
  29. self.quit:on('click', quitHandler)
  30. self.quit.text = 'Quit'
  31. local function getMousePosition()
  32. return ctx.view:frameMouseX(), ctx.view:frameMouseY()
  33. end
  34. self.back.getMousePosition, self.quit.getMousePosition = getMousePosition, getMousePosition
  35. end
  36. function HudPause:update()
  37. self.alpha = math.lerp(self.alpha, ctx.paused and 1 or 0, 8 * ls.tickrate)
  38. end
  39. function HudPause:draw()
  40. if ctx.ded or self.alpha < .01 then return end
  41. local u, v = ctx.hud.u, ctx.hud.v
  42. g.setColor(0, 0, 0, 128 * self.alpha)
  43. g.rectangle('fill', 0, 0, u, v)
  44. if self.alpha > .9 then
  45. self.back:draw()
  46. self.quit:draw()
  47. end
  48. end