2
0

menu.lua 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. Menu = class()
  2. Menu.categories = {
  3. ground = 1,
  4. building = 2,
  5. person = 3,
  6. pigeon = 4,
  7. oneWayPlatform = 5,
  8. debris = 6
  9. }
  10. function Menu:load()
  11. self.worldIndex = 1
  12. self.levelIndex = 1
  13. self.world = love.physics.newWorld(0, 1000)
  14. self.map = Map()
  15. self.map.name = 'dinoland'
  16. self.enemies = Manager()
  17. for i = 1, 20 do
  18. ctx.enemies:add(Caveman, {x = 0 + love.math.random() * love.graphics.getWidth(), y = self.map.height - self.map.ground.height})
  19. end
  20. joystick = #love.joystick.getJoysticks() > 0 and love.joystick.getJoysticks()[1]
  21. self.selectedIndex = 1
  22. self.selectedWorld = 'dinoland'
  23. self.selectedIndex = 1
  24. end
  25. function Menu:update()
  26. self.map:update()
  27. self.enemies:update()
  28. self.world:update(ls.tickrate)
  29. end
  30. function Menu:draw()
  31. local g = love.graphics
  32. local gw, gh = love.graphics.getDimensions()
  33. g.push()
  34. g.translate(0, -300)
  35. self.map:draw()
  36. ctx.enemies:each(function(enemy)
  37. enemy:draw()
  38. end)
  39. g.pop()
  40. g.setColor(0, 0, 0, 100)
  41. g.rectangle('fill', 0, 0, g.getDimensions())
  42. g.setFont('media/fonts/handDrawnShapes.ttf', 120)
  43. local str = 'FOWL PLAY'
  44. g.setColor(0, 0, 0)
  45. g.print(str, g.getWidth() / 2 - g.getFont():getWidth(str) / 2 + 2, 90 + 2)
  46. g.setColor(220, 80, 80)
  47. g.print(str, g.getWidth() / 2 - g.getFont():getWidth(str) / 2, 90)
  48. g.setColor(255, 255, 255)
  49. local font = g.setFont('media/fonts/handDrawnShapes.ttf', 60)
  50. --
  51. local str = 'Play'
  52. local sw = font:getWidth(str)
  53. local sh = font:getHeight()
  54. if self.selectedIndex == 1 then
  55. g.setColor(255, 255, 255, 80)
  56. g.rectangle('fill', gw / 2 - sw / 2 - 10, 250 - 10, sw + 20, sh + 20)
  57. end
  58. g.setColor(0, 0, 0)
  59. g.print(str, gw / 2 - g.getFont():getWidth(str) / 2 + 2, 250 + 2)
  60. g.setColor(255, 255, 255)
  61. g.print(str, gw / 2 - g.getFont():getWidth(str) / 2, 250)
  62. --
  63. local str = self.worldIndex .. '-' .. self.levelIndex
  64. local sw = font:getWidth(str)
  65. local sh = font:getHeight()
  66. if self.selectedIndex == 2 then
  67. g.setColor(255, 255, 255, 80)
  68. g.rectangle('fill', gw / 2 - sw / 2 - 10, 350 - 10, sw + 20, sh + 20)
  69. end
  70. g.setColor(0, 0, 0)
  71. g.print(str, gw / 2 - sw / 2 + 2, 350 + 2)
  72. g.setColor(255, 255, 255)
  73. g.print(str, gw / 2 - sw / 2, 350)
  74. local height = 40
  75. local image = data.media.graphics.ui.arrow
  76. local scale = height / image:getHeight()
  77. g.draw(image, gw / 2 + 75, 350 + sh / 2, 0, scale, scale, 0, image:getHeight() / 2)
  78. g.draw(image, gw / 2 - 75, 350 + sh / 2, 0, -scale, scale, 0, image:getHeight() / 2)
  79. --
  80. local str = 'Quit'
  81. local sw = font:getWidth(str)
  82. local sh = font:getHeight()
  83. if self.selectedIndex == 3 then
  84. g.setColor(255, 255, 255, 80)
  85. g.rectangle('fill', gw / 2 - sw / 2 - 10, 450 - 10, sw + 20, sh + 20)
  86. end
  87. g.setColor(0, 0, 0)
  88. g.print(str, gw / 2 - sw / 2 + 2, 450 + 2)
  89. g.setColor(255, 255, 255)
  90. g.print(str, gw / 2 - sw / 2, 450)
  91. end
  92. function Menu:keypressed(key)
  93. if key == 'escape' then love.event.quit() end
  94. if key == 'up' then
  95. self.selectedIndex = self.selectedIndex - 1
  96. if self.selectedIndex <= 0 then self.selectedIndex = 3 end
  97. elseif key == 'down' then
  98. self.selectedIndex = self.selectedIndex + 1
  99. if self.selectedIndex > 3 then self.selectedIndex = 1 end
  100. elseif key == ' ' or key == 'return' then
  101. if self.selectedIndex == 1 then
  102. local world = ({'Dinoland', 'Kingdumb'})[self.worldIndex]
  103. Context:remove(ctx)
  104. Context:add(Game, world, self.levelIndex)
  105. return
  106. elseif self.selectedIndex == 3 then
  107. love.event.quit()
  108. end
  109. elseif key == 'left' then
  110. self.levelIndex = self.levelIndex - 1
  111. if self.levelIndex <= 0 then
  112. self.levelIndex = 3
  113. if self.worldIndex == 1 then self.worldIndex = 2
  114. else self.worldIndex = 1 end
  115. end
  116. elseif key == 'right' then
  117. self.levelIndex = self.levelIndex + 1
  118. if self.levelIndex > 3 then
  119. self.levelIndex = 1
  120. if self.worldIndex == 1 then self.worldIndex = 2
  121. else self.worldIndex = 1 end
  122. end
  123. end
  124. end
  125. function Menu:gamepadpressed(gamepad, button)
  126. if button == 'dpup' then self:keypressed('up')
  127. elseif button == 'dpdown' then self:keypressed('down')
  128. elseif button == 'dpleft' then self:keypressed('left')
  129. elseif button == 'dpright' then self:keypressed('right') end
  130. if button == 'a' or button == 'start' then self:keypressed('return') end
  131. if button == 'back' then self:keypressed('escape') end
  132. end