| @@ -9,7 +9,7 @@ function buttonClutter() | |||
| function() | |||
| gameState = "selectlv" | |||
| end)) | |||
| --[[table.insert(buttons, menu:addButton("Toggle Fullscreen", | |||
| table.insert(buttons, menu:addButton("Toggle Fullscreen", | |||
| function() | |||
| myscreen:toggle(WINDOW_HEIGHT, WINDOW_WIDTH) | |||
| DIFFERENCE_X = myscreen.c | |||
| @@ -17,7 +17,12 @@ function buttonClutter() | |||
| OFFSET_X = myscreen.e | |||
| OFFSET_Y = myscreen.f | |||
| end | |||
| ))]]-- | |||
| )) | |||
| table.insert(buttons, menu:addButton("Quit", | |||
| function() | |||
| love.event.quit() | |||
| end | |||
| )) | |||
| end | |||
| local t=0 | |||
| function explode(x, y) | |||
| @@ -19,17 +19,22 @@ self.path = {} | |||
| self.dottimer = 0.5 | |||
| self.fuel = 0 | |||
| end | |||
| function ship:newPathDot(dotx, doty) | |||
| function ship:newPathDot(dotx, doty, color) | |||
| return { | |||
| x = dotx, | |||
| y = doty | |||
| y = doty, | |||
| color = color | |||
| } | |||
| end | |||
| function ship:update(dt) | |||
| if not shipIsHit then | |||
| self.dottimer = self.dottimer - dt | |||
| if self.dottimer < 0 then | |||
| table.insert(self.path, self:newPathDot(self.x, self.y)) | |||
| if (love.keyboard.isDown('w') and self.fuel > 0) then | |||
| table.insert(self.path, self:newPathDot(self.x, self.y, 1)) | |||
| else | |||
| table.insert(self.path, self:newPathDot(self.x, self.y, 2)) | |||
| end | |||
| self.dottimer = 0.2 | |||
| end | |||
| if love.timer.getFPS() < 20 then | |||
| @@ -94,7 +99,11 @@ function ship:draw() | |||
| love.graphics.draw(self.image, self.x, self.y, self.vector, 1, 1, self.width/2, self.height/2) | |||
| for i in ipairs(self.path) do | |||
| if i > 1 then | |||
| love.graphics.setColor(0.9,0.9,0.9,1) | |||
| if (self.path[i].color < 2) then | |||
| love.graphics.setColor(0.9,0.4,0.4,1) | |||
| end | |||
| --print("DOING".. i) | |||
| love.graphics.line(self.path[i].x, self.path[i].y, self.path[i-1].x, self.path[i-1].y) | |||
| end | |||
| @@ -33,6 +33,16 @@ function level1.load() | |||
| end)) | |||
| table.insert(planets, planet(700, 200, 50, 0.3, planetImage, "nodelete")) | |||
| end | |||
| function level1.hint() | |||
| GUIDraw("left") | |||
| love.graphics.setFont(tinyfont) | |||
| if (VCAM.x > WINDOW_WIDTH/2) then | |||
| love.graphics.print("←[A]",10,50) | |||
| end | |||
| if (VCAM.x < WINDOW_WIDTH*2) then | |||
| love.graphics.print("[D]→",100,50) | |||
| end | |||
| end | |||
| function level1.reset() | |||
| firstShip:reset() | |||
| for k in pairs(planets) do | |||
| @@ -49,7 +59,7 @@ function level1.GUIControl() | |||
| if (love.keyboard.isDown('a') and VCAM.x > WINDOW_WIDTH/2) then | |||
| VCAM.x = VCAM.x - 10 | |||
| end | |||
| if (love.keyboard.isDown('d')) then | |||
| if (love.keyboard.isDown('d') and VCAM.x < WINDOW_WIDTH*2) then | |||
| VCAM.x = VCAM.x + 10 | |||
| end | |||
| end | |||
| @@ -45,6 +45,16 @@ function level2.reset() | |||
| shipIsHit = false | |||
| planetsleft = 3 | |||
| end | |||
| function level2.hint() | |||
| GUIDraw("left") | |||
| love.graphics.setFont(tinyfont) | |||
| if (VCAM.x > WINDOW_WIDTH/2) then | |||
| love.graphics.print("←[A]",10,50) | |||
| end | |||
| if (VCAM.x < WINDOW_WIDTH*2) then | |||
| love.graphics.print("[D]→",100,50) | |||
| end | |||
| end | |||
| function level2.GUIControl() | |||
| if (love.keyboard.isDown('a') and VCAM.x > WINDOW_WIDTH/2) then | |||
| VCAM.x = VCAM.x - 10 | |||
| @@ -35,7 +35,16 @@ function level3.load() | |||
| table.insert(planets, planet(700, 300, 50, 0.3, planetImage, "nodelete")) | |||
| table.insert(planets, planet(900, 200, 50, 0.3, planetImage, "nodelete")) | |||
| end | |||
| function level3.hint() | |||
| GUIDraw("left") | |||
| love.graphics.setFont(tinyfont) | |||
| if (VCAM.x > WINDOW_WIDTH/2) then | |||
| love.graphics.print("←[A]",10,50) | |||
| end | |||
| if (VCAM.x < WINDOW_WIDTH*2) then | |||
| love.graphics.print("[D]→",100,50) | |||
| end | |||
| end | |||
| function level3.reset() | |||
| firstShip:reset() | |||
| for k in pairs(planets) do | |||
| @@ -49,13 +49,23 @@ function level4.reset() | |||
| planetsleft = 3 | |||
| end | |||
| function level4.GUIControl() | |||
| if (love.keyboard.isDown('a') and VCAM.x > -WINDOW_WIDTH) then | |||
| if (love.keyboard.isDown('a') and VCAM.x > -WINDOW_WIDTH/2) then | |||
| VCAM.x = VCAM.x - 10 | |||
| end | |||
| if (love.keyboard.isDown('d') and VCAM.x < WINDOW_WIDTH*2) then | |||
| if (love.keyboard.isDown('d') and VCAM.x < WINDOW_WIDTH) then | |||
| VCAM.x = VCAM.x + 10 | |||
| end | |||
| end | |||
| function level4.hint() | |||
| GUIDraw("left") | |||
| love.graphics.setFont(tinyfont) | |||
| if (VCAM.x > -WINDOW_WIDTH/2) then | |||
| love.graphics.print("←[A]",10,50) | |||
| end | |||
| if (VCAM.x < WINDOW_WIDTH) then | |||
| love.graphics.print("[D]→",100,50) | |||
| end | |||
| end | |||
| function level4.goBack() | |||
| levelgeneral.goBack() | |||
| end | |||
| @@ -0,0 +1,74 @@ | |||
| level5 = Class{} | |||
| local levelLoaded = false | |||
| local M = {} | |||
| function level5.load() | |||
| shipsleft = 1 | |||
| local planetImage = love.graphics.newImage("entities/planet/planet" .. math.random(1, 18) .. ".png") | |||
| planetsleft = 5 | |||
| gameStatus = "setup" | |||
| playbutts = {} | |||
| guibutts = {} | |||
| thrusterMax = 100 | |||
| firstShip.fuel = 100 | |||
| VCAM.x, VCAM.y = 0, WINDOW_HEIGHT/2 | |||
| explosions = {} | |||
| shipIsHit = false | |||
| guimenu = mainMenu() | |||
| reachedGoal = false | |||
| lvlbase = base(50, 2000) | |||
| levelLoaded = true | |||
| table.insert(playbutts, menu:addButton("Return to setup", function() | |||
| gameStatus = "setup" | |||
| levelgeneral.reset() | |||
| end )) | |||
| table.insert(guibutts, menu:addButton("Release brake!", function () | |||
| if shipsleft == 0 then | |||
| selectedItem = "none" | |||
| gameStatus = "play" | |||
| end | |||
| end | |||
| )) | |||
| table.insert(guibutts, menu:addButton("To menu", function () | |||
| levelgeneral.goBack() | |||
| end)) | |||
| table.insert(planets, planet(0, 2000, 50, 0.3, planetImage, "nodelete")) | |||
| table.insert(planets, planet(100, 2000, 50, 0.3, planetImage, "nodelete")) | |||
| table.insert(planets, planet(50, 1700, 50, 0.3, planetImage, "nodelete")) | |||
| end | |||
| function level5.reset() | |||
| firstShip:reset() | |||
| for k in pairs(planets) do | |||
| if planets[k].deletable then | |||
| planets[k] = nil | |||
| end | |||
| end | |||
| local planetImage = love.graphics.newImage("entities/planet/planet" .. math.random(1, 18) .. ".png") | |||
| shipsleft = 1 | |||
| firstShip.fuel = 100 | |||
| shipIsHit = false | |||
| planetsleft = 5 | |||
| end | |||
| function level5.GUIControl() | |||
| if (love.keyboard.isDown('w') and VCAM.y > -WINDOW_WIDTH) then | |||
| VCAM.y = VCAM.y - 10 | |||
| end | |||
| if (love.keyboard.isDown('s') and VCAM.y < WINDOW_WIDTH*2) then | |||
| VCAM.y = VCAM.y + 10 | |||
| end | |||
| end | |||
| function level5.hint() | |||
| GUIDraw("up") | |||
| love.graphics.setFont(tinyfont) | |||
| if (VCAM.y > -WINDOW_WIDTH) then | |||
| love.graphics.print("↑[W]",50,10) | |||
| end | |||
| if (VCAM.y < WINDOW_WIDTH*2) then | |||
| love.graphics.print("↓[D]",50,100) | |||
| end | |||
| end | |||
| function level5.goBack() | |||
| levelgeneral.goBack() | |||
| end | |||
| return level5 | |||
| @@ -95,12 +95,12 @@ function levelgeneral.draw() | |||
| love.graphics.printf("Press Enter to continue",0, 600, WINDOW_WIDTH, "center") | |||
| end | |||
| if gameStatus == "setup" and not reachedGoal then | |||
| GUIDraw("left") | |||
| level.hint() | |||
| elseif gameStatus == "play" then | |||
| if not reachedGoal then | |||
| love.graphics.printf("Thrusters: ", 0, WINDOW_HEIGHT-100, 300, "center") | |||
| local m = smallfont:getWidth("Thrusters: ") | |||
| local n = smallfont:getHeight("Thrusters: ") | |||
| love.graphics.printf("[W] Thrusters: ", 0, WINDOW_HEIGHT-100, 300, "center") | |||
| local m = smallfont:getWidth("[W] Thrusters: ") | |||
| local n = smallfont:getHeight("[W] Thrusters: ") | |||
| love.graphics.setColor(1,0,0,1) | |||
| love.graphics.rectangle("fill",0, WINDOW_HEIGHT-50, thrusterMax/2, n) | |||
| love.graphics.setColor(0,1,0,1) | |||
| @@ -4,9 +4,14 @@ menuLoaded = false | |||
| function menu.update(dt) | |||
| if not menuLoaded then | |||
| firstShip.x = -100 | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT) | |||
| menuLoaded = true | |||
| planets = {} | |||
| table.insert(planets, planet(love.math.random(100, WINDOW_WIDTH-100), love.math.random(100, WINDOW_HEIGHT-100), 90000000, 0.3, love.graphics.newImage("entities/planet/planet.png"))) | |||
| if (planets[1].y < WINDOW_HEIGHT/2) then | |||
| firstShip.y = love.math.random(WINDOW_HEIGHT/2, WINDOW_HEIGHT) | |||
| else | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT/2) | |||
| end | |||
| end | |||
| for i in ipairs(planets) do | |||
| planets[i]:update(dt) | |||
| @@ -19,7 +24,11 @@ function menu.update(dt) | |||
| shipIsHit = false | |||
| firstShip:reset() | |||
| firstShip.x = -100 | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT) | |||
| if (planets[1].y < WINDOW_HEIGHT/2) then | |||
| firstShip.y = love.math.random(WINDOW_HEIGHT/2, WINDOW_HEIGHT) | |||
| else | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT/2) | |||
| end | |||
| --print("ship is hit") | |||
| end | |||
| end | |||
| @@ -119,4 +119,12 @@ function practice.GUIControl() | |||
| VCAM.x = VCAM.x + 10 | |||
| end | |||
| end | |||
| function practice.hint() | |||
| love.graphics.setFont(tinyfont) | |||
| love.graphics.print("↑[W]",50,10) | |||
| love.graphics.print("↓[S]",50,100) | |||
| love.graphics.print("←[A]",10,50) | |||
| love.graphics.print("→[D]",100,50) | |||
| end | |||
| return practice | |||
| @@ -30,7 +30,14 @@ table.insert(levels, menu:addButton("Level 2", function () | |||
| currentLevel = 4 | |||
| end | |||
| end )) | |||
| table.insert(levels, menu:addButton("Level 5", function () | |||
| if saveData.levelsBeaten > 3 then | |||
| menuLoaded = false | |||
| objReset() | |||
| gameState = "levelgeneral" | |||
| currentLevel = 5 | |||
| end | |||
| end )) | |||
| table.insert(levels, menu:addButton("Go Back", function () | |||
| @@ -40,9 +47,13 @@ local M = {} | |||
| function selectlv.update(dt) | |||
| if not menuLoaded then | |||
| firstShip.x = -100 | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT) | |||
| menuLoaded = true | |||
| table.insert(planets, planet(love.math.random(100, WINDOW_WIDTH-100), love.math.random(100, WINDOW_HEIGHT-100), 90000000, 0.3, love.graphics.newImage("entities/planet/planet.png"))) | |||
| if (planets[1].y < WINDOW_HEIGHT/2) then | |||
| firstShip.y = love.math.random(WINDOW_HEIGHT/2, WINDOW_HEIGHT) | |||
| else | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT/2) | |||
| end | |||
| end | |||
| for i in ipairs(planets) do | |||
| planets[i]:update(dt) | |||
| @@ -52,7 +63,11 @@ function selectlv.update(dt) | |||
| shipIsHit = false | |||
| firstShip:reset() | |||
| firstShip.x = -100 | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT) | |||
| if (planets[1].y < WINDOW_HEIGHT/2) then | |||
| firstShip.y = love.math.random(WINDOW_HEIGHT/2, WINDOW_HEIGHT) | |||
| else | |||
| firstShip.y = love.math.random(0, WINDOW_HEIGHT/2) | |||
| end | |||
| --print("ship is hit") | |||
| end | |||
| end | |||
| @@ -37,6 +37,7 @@ function love.load() | |||
| simpleScale.setWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT) | |||
| firstShip = ship(-500, -500, "entities/ship/smol_white_01.png") | |||
| VCAM = VCAM(WINDOW_WIDTH/2, WINDOW_HEIGHT/2) | |||
| tinyfont = love.graphics.newFont("font.ttf", 15) | |||
| smallfont = love.graphics.newFont("font.ttf", 25) | |||
| titlefont = love.graphics.newFont("font.ttf", 50) | |||
| myscreen = fullScreener(RESOLUTION_SET, isFullscreen, DIFFERENCE_X, DIFFERENCE_Y, OFFSET_X, OFFSET_Y) | |||
| @@ -29,11 +29,12 @@ function GUIDraw(mode) | |||
| --PLACING | |||
| local mx, my = love.mouse.getPosition() | |||
| local vmx, vmy = camera:getMousePosition() | |||
| local vmx = vmx * DIFFERENCE_X | |||
| local vmy = vmy * DIFFERENCE_Y | |||
| -- local vmx = vmx * DIFFERENCE_X | |||
| -- local vmy = vmy * DIFFERENCE_Y | |||
| local mx = mx * DIFFERENCE_X | |||
| local my = my * DIFFERENCE_Y | |||
| local vmx, vmy = camera:toWorldCoords(mx, my) | |||
| if mode == "anywhere" then | |||
| love.graphics.setColor(1,1,1,0.5) | |||
| if selectedItem == "ship" and mx < menuX then | |||
| @@ -73,6 +74,29 @@ function GUIDraw(mode) | |||
| selectedItem = "none" | |||
| end | |||
| end | |||
| elseif mode == "up" then | |||
| love.graphics.setColor(1,1,1,0.5) | |||
| if selectedItem == "ship" and mx < menuX then | |||
| local shipW = shipImage:getWidth() | |||
| local shipH = shipImage:getHeight() | |||
| if VCAM.y > WINDOW_HEIGHT/2-1 then | |||
| love.graphics.draw(shipImage,mx,10, 1.5708, 1, 1, shipW/2, shipH/2) | |||
| elseif VCAM.y > -WINDOW_HEIGHT/2+(WINDOW_HEIGHT-(WINDOW_HEIGHT-firstShip.width/2)) then | |||
| local timex, timey = camera:toCameraCoords(0, 100) | |||
| love.graphics.draw(shipImage,mx,timey, 1.5708, 1, 1, shipW/2, shipH/2) | |||
| else | |||
| love.graphics.draw(shipImage,mx,WINDOW_HEIGHT-firstShip.height/2, 1.5708, 1, 1, shipW/2, shipH/2) | |||
| end | |||
| if love.keyboard.mouseisReleased then | |||
| love.keyboard.mouseisReleased = false | |||
| firstShip.x = vmx | |||
| firstShip.y = 100 | |||
| shipsleft = shipsleft - 1 | |||
| end | |||
| if shipsleft == 0 then | |||
| selectedItem = "none" | |||
| end | |||
| end | |||
| end | |||
| local dx, dy = camera:toCameraCoords(firstShip.x, firstShip.y) | |||
| if VCAM.x - WINDOW_WIDTH/2+250 > firstShip.x and shipsleft == 0 then | |||