Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

practice.lua 5.4 KiB

3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
3 år sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. practice = Class{}
  2. local levelLoaded = false
  3. local M = {}
  4. local currenctScore = 0
  5. function love.wheelmoved(x, y)
  6. if gameStatus == "play" then
  7. if y > 0 and camera.scale < 1 then
  8. camera.scale = camera.scale + 0.1
  9. elseif y < 0 and camera.scale > 0.5 then
  10. camera.scale = camera.scale - 0.1
  11. end
  12. end
  13. end
  14. function practice.update(dt)
  15. if not levelLoaded then
  16. shipsleft = 1
  17. planetsleft = 10
  18. cannonsleft = 10
  19. gameStatus = "setup"
  20. playbutts = {}
  21. guibutts = {}
  22. XCAM = 0
  23. currentScore = 0
  24. thrusterMax = 0
  25. YCAM = 0
  26. firstShip.fuel = 0
  27. explosions = {}
  28. shipIsHit = false
  29. guimenu = mainMenu()
  30. table.insert(playbutts, menu:addButton("Return to setup", function()
  31. gameStatus = "setup"
  32. practice.reset()
  33. end ))
  34. table.insert(guibutts, menu:addButton("Release brake!", function ()
  35. if shipsleft == 0 then
  36. selectedItem = "none"
  37. gameStatus = "play"
  38. end
  39. end
  40. ))
  41. table.insert(guibutts, menu:addButton("To menu", function ()
  42. practice.goBack()
  43. end
  44. ))
  45. levelLoaded = true
  46. end
  47. camera:update(dt)
  48. --print(camera.x .. " " .. camera.y)
  49. for i, explosion in ipairs(explosions) do
  50. explosion:update(dt)
  51. if explosion.killed then
  52. table.remove(explosions, i)
  53. if shipIsHit then
  54. gameStatus = "setup"
  55. practice.reset()
  56. end
  57. end
  58. end
  59. if gameStatus == "play" then
  60. camera.x, camera.y = firstShip.x - firstShip.height*4, firstShip.y- firstShip.width
  61. --print(camera.x .. firstShip.x)
  62. if shipIsHit then
  63. if #explosions == 0 then
  64. table.insert(explosions, explosion(firstShip.x, firstShip.y, 100, {1,1,1,1}))
  65. end
  66. end
  67. firstShip:update(dt)
  68. for i in ipairs(planets) do
  69. planets[i]:update(dt)
  70. end
  71. for i in ipairs(cannons) do
  72. cannons[i]:update(dt)
  73. end
  74. for i in ipairs(projectiles) do
  75. projectiles[i]:update(dt)
  76. end
  77. for i in ipairs(projectiles) do
  78. if projectiles[i].killed then
  79. table.remove(projectiles, i)
  80. --print("killing")
  81. end
  82. end
  83. if math.sqrt(firstShip.dx^2 + firstShip.dy^2) < 40 then
  84. currentScore = currentScore + math.sqrt(firstShip.dx^2 + firstShip.dy^2)
  85. end
  86. else
  87. camera:follow(VCAM.x, VCAM.y)
  88. end
  89. practice.GUIControl()
  90. end
  91. function practice.draw()
  92. camera:attach()
  93. firstShip:draw()
  94. for i in ipairs(planets) do
  95. planets[i]:draw(dt)
  96. end
  97. for i in ipairs(cannons) do
  98. cannons[i]:draw(dt)
  99. end
  100. for i in ipairs(projectiles) do
  101. projectiles[i]:draw(dt)
  102. end
  103. --love.graphics.rectangle("fill",VCAM.x,VCAM.y,30,30)
  104. for i, explosion in ipairs(explosions) do
  105. if shipIsHit then
  106. explosion:render()
  107. else
  108. explosion:render("special")
  109. end
  110. --print("exploding")
  111. end
  112. camera:detach()
  113. camera:draw()
  114. if gameStatus == "setup" then
  115. GUIDraw("anywhere")
  116. love.graphics.setFont(tinyfont)
  117. local textW = tinyfont:getWidth("Top score: " .. math.floor(saveData.score/100))
  118. love.graphics.print("Top score: " .. math.floor(saveData.score/100), WINDOW_WIDTH/2-textW/2, 10)
  119. practice.hint()
  120. elseif gameStatus == "play" then
  121. local textW = tinyfont:getWidth("Score: " .. math.floor(currentScore/100))
  122. love.graphics.setFont(tinyfont)
  123. love.graphics.print("Score: " .. math.floor(currentScore/100), WINDOW_WIDTH/2-textW/2, 10)
  124. guimenu:butt(playbutts, WINDOW_WIDTH, WINDOW_HEIGHT, 1100, WINDOW_HEIGHT-50, 40, WINDOW_WIDTH/3)
  125. love.keyboard.mouseisReleased = false
  126. end
  127. end
  128. function practice.goBack()
  129. practice.reset()
  130. gameStatus = "setup"
  131. levelLoaded = false
  132. gameState = "menu"
  133. cannons = {}
  134. end
  135. function practice.reset()
  136. firstShip:reset()
  137. camera.scale = 1
  138. projectiles = {}
  139. shipsleft = 1
  140. if currentScore > saveData.score then
  141. saveData.score = currentScore
  142. love.filesystem.write("save", serialize(saveData))
  143. end
  144. currentScore = 0
  145. shipIsHit = false
  146. firstShip.fuel = 99999
  147. end
  148. function practice.GUIControl()
  149. if (love.keyboard.isDown('w')) then
  150. VCAM.y = VCAM.y - 10
  151. end
  152. if (love.keyboard.isDown('a')) then
  153. VCAM.x = VCAM.x - 10
  154. end
  155. if (love.keyboard.isDown('s')) then
  156. VCAM.y = VCAM.y + 10
  157. end
  158. if (love.keyboard.isDown('d')) then
  159. VCAM.x = VCAM.x + 10
  160. end
  161. end
  162. function practice.hint()
  163. love.graphics.setFont(tinyfont)
  164. if love.keyboard.isDown('w') then
  165. love.graphics.setColor(1,0,0,1)
  166. end
  167. love.graphics.print("↑[W]",80,10)
  168. love.graphics.setColor(1,1,1,1)
  169. if love.keyboard.isDown('s') then
  170. love.graphics.setColor(1,0,0,1)
  171. end
  172. love.graphics.print("↓[S]",80,100)
  173. love.graphics.setColor(1,1,1,1)
  174. if love.keyboard.isDown('a') then
  175. love.graphics.setColor(1,0,0,1)
  176. end
  177. love.graphics.print("←[A]",10,50)
  178. love.graphics.setColor(1,1,1,1)
  179. if love.keyboard.isDown('d') then
  180. love.graphics.setColor(1,0,0,1)
  181. end
  182. love.graphics.print("→[D]",150,50)
  183. love.graphics.setColor(1,1,1,1)
  184. end
  185. return practice