| @@ -0,0 +1,28 @@ | |||
| -- Storage for longer text strings and dialogue (?) in future for primarily textboxes | |||
| text = { | |||
| tutorial = { | |||
| "Throttle:\n", | |||
| " " .. controls.flight.throttle.up .. ", " .. controls.flight.throttle.down .. " - Changes your throttle (gui box left bottom)\n", | |||
| " " .. controls.flight.throttle.full .. ", " .. controls.flight.throttle.none .. " - Quick toggle full or no thrust\n\n", | |||
| "Engines:\n", | |||
| " " .. controls.flight.thrust.engine .. " - Hold to activate your main engine", | |||
| " " .. controls.flight.thrust.up .. ", "..controls.flight.thrust.left .. ", " .. controls.flight.thrust.down .. ", " .. controls.flight.thrust.right .. " - Small thrust in the four directions\n\n", | |||
| "Steering:\n", | |||
| " " .. controls.flight.thrust.rotleft .. ", " .. controls.flight.thrust.rotright .. " - Rotate spacecraft left and right\n\n", | |||
| "Time Warp:\n", | |||
| " " .. controls.flight.warp.up .. ", " .. controls.flight.warp.down .. " (period and comma) - Speed time warp up/down \n", | |||
| " " .. controls.flight.warp.reset .. " (minus) - Reset time warp to default (1)\n\n", | |||
| "Camera:\n", | |||
| " " .. "Scroll mouse wheel" .. " - Zoom in and out\n", | |||
| " " .. "Mouse Button "..controls.camera.zoom.reset .. " - Reset zoom to default\n\n\n", | |||
| "Key bindings can be changed in game files [data/controls.lua]!" | |||
| } | |||
| } | |||
| return text | |||
| @@ -10,12 +10,15 @@ controls = require "data/controls" | |||
| settings = require "data/settings" | |||
| starshipTypes = require "data/starshipTypes" | |||
| font = require "data/font" | |||
| text = require "data/textbox" | |||
| -- Game Source: | |||
| calc = require "src/calc" | |||
| -- Game Classes: | |||
| require "src/class/Menubutton" | |||
| require "src/class/Button" | |||
| require "src/class/Textbox" | |||
| require "src/class/Player" | |||
| require "src/class/Gui" | |||
| require "src/class/Planet" | |||
| @@ -27,6 +27,16 @@ function love.load() | |||
| } | |||
| } | |||
| -- Buttons: | |||
| button = { | |||
| tutorial = Button(width - 70, 20, 50, 30, "help", {255, 255, 255}, {40, 40, 40}, false) | |||
| } | |||
| -- Textboxes: | |||
| textbox = { | |||
| tutorial = Textbox(40, 40, width-80, height-80, text.tutorial, "center", {255, 255, 255}, {0, 0, 0}) | |||
| } | |||
| -- Camera: | |||
| cam = Camera() | |||
| @@ -119,8 +129,7 @@ function cameraControls() | |||
| end | |||
| -- Zoom Limit: | |||
| local max = settings.zoom.max | |||
| local min = settings.zoom.min | |||
| local max, min = settings.zoom.max, settings.zoom.min | |||
| if zoomlevel < min then | |||
| zoomlevel = min | |||
| end | |||
| @@ -221,13 +230,11 @@ function love.update(dt) | |||
| -- Gui: | |||
| gui:update(dt) | |||
| button.tutorial:update() | |||
| -- Camera: | |||
| cam:lookAt(player.x, player.y) | |||
| cameraControls() | |||
| --debug(player.x .. " " .. player.y) | |||
| end | |||
| menubuttonUpdate() | |||
| end | |||
| @@ -250,6 +257,11 @@ function love.draw() | |||
| -- Gui: | |||
| player:drawPositionIndicator() | |||
| gui:draw() | |||
| if button.tutorial.isActive then | |||
| textbox.tutorial:draw() | |||
| end | |||
| button.tutorial:draw() | |||
| end | |||
| menubuttonDraw() | |||
| end | |||
| @@ -4,6 +4,7 @@ calc = {} | |||
| -- G-Constant | |||
| calc.G = 6.67e-11 -- TWEAKABLE FOR LATER DEPENDING ON SCALE!!!!!!!!!!! | |||
| calc.pi = 3.14 | |||
| -- Development debugging/logging thing | |||
| function calc.debug(text) | |||
| if calc.isDebug then | |||
| @@ -50,5 +51,13 @@ function calc.closestObj(target) | |||
| return minPlanet | |||
| end | |||
| -- Loops through a table and concatenate all stings (for textboxes) | |||
| function calc.getText(stringTable) | |||
| local string = "" | |||
| for i, s in ipairs(stringTable) do | |||
| string = string .. s | |||
| end | |||
| return string | |||
| end | |||
| return calc | |||
| @@ -0,0 +1,80 @@ | |||
| Button = Class {} | |||
| function Button:init(tempX, tempY, tempW, tempH, tempText, tempTC, tempBC, tempActive) | |||
| -- Position and Dimensions: | |||
| self.x = tempX | |||
| self.y = tempY | |||
| self.w = tempW | |||
| self.h = tempH | |||
| -- Status: | |||
| self.isActive = tempActive | |||
| -- Text and Colours: | |||
| self.text = tempText | |||
| self.colour = { | |||
| text = calc.colour(tempTC[1], tempTC[2], tempTC[3]), | |||
| background = calc.colour(tempBC[1], tempBC[2], tempBC[3]) | |||
| } | |||
| -- Click Cooldown: | |||
| self.cooldownLimit = 30 | |||
| self.cooldown = 0 | |||
| end | |||
| -- FUNCTIONS | |||
| function Button:hover() | |||
| local hover = false | |||
| local x,y = love.mouse.getPosition() | |||
| if x > self.x and x < self.x + self.w and y > self.y and y < self.y + self.h then | |||
| hover = true | |||
| end | |||
| return hover | |||
| end | |||
| function Button:click() | |||
| local click = false | |||
| if self:hover() and love.mouse.isDown(1) then | |||
| click = true | |||
| end | |||
| return click | |||
| end | |||
| -- MAIN | |||
| function Button:update(dt) | |||
| if self:click() and self.cooldown <= 0 then | |||
| self.isActive = not self.isActive | |||
| self.cooldown = self.cooldownLimit | |||
| end | |||
| self.cooldown = self.cooldown - 1 | |||
| end | |||
| function Button:draw() | |||
| local x, y, w, h = self.x, self.y, self.w, self.h | |||
| local bg, tx = self.colour.background, self.colour.text | |||
| -- Hover Effects | |||
| if self:hover() and self.cooldown <= 0 then | |||
| --[[ Slight Colour Lightup -- broken and idk why qwq | |||
| for i = 1, #bg do | |||
| bg[i] = bg[i]*1.1 | |||
| end]] | |||
| -- Slight pop up effect (purly visual) | |||
| local pop = 1 | |||
| x, y, w, h = x-pop, y-pop, w+pop*2, h+pop*2 | |||
| end | |||
| -- Draw Background | |||
| love.graphics.setColor(bg[1], bg[2], bg[3]) | |||
| love.graphics.rectangle("fill", x, y, w, h) | |||
| -- Draw Text | |||
| love.graphics.setFont(font.default) | |||
| love.graphics.setColor(tx[1], tx[2], tx[3]) | |||
| love.graphics.printf(self.text, x, y, w, "center") | |||
| end | |||
| @@ -189,7 +189,7 @@ function Player:isLanded() | |||
| if self:getOrbitHeight(p) <= 1 then | |||
| landed = true | |||
| self.landedOn = p | |||
| debug("Player touched down on: "..p.name) | |||
| --debug("Player touched down on: "..p.name) | |||
| end | |||
| end | |||
| -- Save Landing Speed: | |||
| @@ -198,7 +198,7 @@ function Player:isLanded() | |||
| local planet = math.abs(self.landedOn:getSpeed()) | |||
| self.landingspeed = math.abs(player-planet) | |||
| debug("Landing speed: "..self.landingspeed) | |||
| --debug("Landing speed: "..self.landingspeed) | |||
| end | |||
| self:hasCrashed() | |||
| return landed | |||
| @@ -0,0 +1,45 @@ | |||
| Textbox = Class {} | |||
| function Textbox:init(tempX, tempY, tempW, tempH, tempText, tempAlign, tempTC, tempBC) | |||
| -- Dimensions: | |||
| self.x = tempX | |||
| self.y = tempY | |||
| self.w = tempW | |||
| self.h = tempH | |||
| -- Text: | |||
| self.text = calc.getText(tempText) | |||
| self.align = tempAlign | |||
| -- Colours: | |||
| self.colour = { | |||
| text = calc.colour(tempTC[1], tempTC[2], tempTC[3]), | |||
| background = calc.colour(tempBC[1], tempBC[2], tempBC[3]) | |||
| } | |||
| end | |||
| -- FUNCTIONS | |||
| function Textbox:drawBox() | |||
| local c = self.colour.background | |||
| love.graphics.setColor(c[1], c[2], c[3], 0.7) | |||
| love.graphics.rectangle("fill", self.x, self.y, self.w, self.h) | |||
| end | |||
| function Textbox:drawText() | |||
| local border = 3 | |||
| local c = self.colour.text | |||
| love.graphics.setFont(font.default) | |||
| love.graphics.setColor(c[1], c[2], c[3]) | |||
| love.graphics.printf(self.text, self.x + border, self.y + border, self.w + border*2, self.align) | |||
| end | |||
| -- MAIN | |||
| function Textbox:draw() | |||
| self:drawBox() | |||
| self:drawText() | |||
| end | |||