@@ -1,14 +1,14 @@ | |||||
# Questionable Örbital Mechanics | # Questionable Örbital Mechanics | ||||
## What is this? | ## What is this? | ||||
Questionable Örbital Mechanics - or as i like to call it: *QÖM* - is an open-source Space Simulation "Game" written in Lua using the Löve game engine. | |||||
Questionable Örbital Mechanics - or as we like to call it: *QÖM* - is an open-source Space Simulation "Game" written in Lua using the Löve game engine. | |||||
For now it is very basic, as it is still heavily in development. | For now it is very basic, as it is still heavily in development. | ||||
## How do i play this game? | ## How do i play this game? | ||||
In order to play this game you need to ... | In order to play this game you need to ... | ||||
1) ...have the Lua (5.4.3) programming language installed | |||||
1) ...have the Lua (5.4.3) programming language installed (optional, as Löve comes with Lua) | |||||
1) ...have the Löve (11.3) game engine installed | 1) ...have the Löve (11.3) game engine installed | ||||
For now this is the only way to play this game. In future there will be binary versions availabe. | For now this is the only way to play this game. In future there will be binary versions availabe. | ||||
@@ -25,6 +25,9 @@ https://www.lua.org/download.html | |||||
Arch Linux: | Arch Linux: | ||||
`sudo pacman -S love` | `sudo pacman -S love` | ||||
Debian/Ubuntu Linux: | |||||
`sudo snap install love` | |||||
Windows: | Windows: | ||||
https://love2d.org | https://love2d.org | ||||
@@ -2,7 +2,7 @@ info = {} | |||||
info.name = "Questionable Örbital Mechanics" | info.name = "Questionable Örbital Mechanics" | ||||
info.title = info.name | info.title = info.name | ||||
info.version = "0.0.2_dev" | |||||
info.version = "0.0.6_dev" | |||||
info.authors = { | info.authors = { | ||||
"NiroUwU", | "NiroUwU", | ||||
"Madiwka4" | "Madiwka4" | ||||
@@ -3,11 +3,12 @@ settings = { | |||||
min = 0.0001, | min = 0.0001, | ||||
max = 4, | max = 4, | ||||
step = 0.05, | step = 0.05, | ||||
reset = 0.0001 | |||||
reset = 0.2, | |||||
arrowAppear = 0.03 | |||||
}, | }, | ||||
warp = { | warp = { | ||||
min = 1, | min = 1, | ||||
max = 10, | |||||
max = 25, | |||||
step = 1, | step = 1, | ||||
cooldown = 10 | cooldown = 10 | ||||
@@ -3,11 +3,11 @@ starshipTypes = { | |||||
orbiter = { | orbiter = { | ||||
name = "Classic Orbiter", | name = "Classic Orbiter", | ||||
description = "Dolor fugiat irure sit aliqua labore. Culpa voluptate occaecat anim exercitation proident sint ex dolor. Officia in labore sint Lorem ea. Ad minim aliqua aliqua non commodo qui in ea sit excepteur excepteur qui.", | description = "Dolor fugiat irure sit aliqua labore. Culpa voluptate occaecat anim exercitation proident sint ex dolor. Officia in labore sint Lorem ea. Ad minim aliqua aliqua non commodo qui in ea sit excepteur excepteur qui.", | ||||
impacttolerance = 0.75, | |||||
mass = 100000, -- idk, feels better but holy fuck thats a thicc ass boi xD | |||||
speed = 0.05, | |||||
impacttolerance = 3, | |||||
mass = 1000000, -- idk, feels better but holy fuck thats a thicc ass boi xD | |||||
speed = 0.01, | |||||
specials = {"orbitSync"}, | specials = {"orbitSync"}, | ||||
texture = texture.player.orbiter | |||||
textures = texture.player.orbiter | |||||
} | } | ||||
} | } | ||||
@@ -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 |
@@ -4,18 +4,21 @@ | |||||
require "libraries" | require "libraries" | ||||
-- General Data: | -- General Data: | ||||
info = require "data/info" | |||||
texture = require "textures/textures" | texture = require "textures/textures" | ||||
info = require "data/info" | |||||
controls = require "data/controls" | controls = require "data/controls" | ||||
settings = require "data/settings" | settings = require "data/settings" | ||||
starshipTypes = require "data/starshipTypes" | starshipTypes = require "data/starshipTypes" | ||||
font = require "data/font" | font = require "data/font" | ||||
text = require "data/textbox" | |||||
-- Game Source: | -- Game Source: | ||||
calc = require "src/calc" | calc = require "src/calc" | ||||
-- Game Classes: | -- Game Classes: | ||||
require "src/class/Menubutton" | require "src/class/Menubutton" | ||||
require "src/class/Button" | |||||
require "src/class/Textbox" | |||||
require "src/class/Player" | require "src/class/Player" | ||||
require "src/class/Gui" | require "src/class/Gui" | ||||
require "src/class/Planet" | require "src/class/Planet" | ||||
@@ -19,14 +19,24 @@ function love.load() | |||||
-- Menubuttons: | -- Menubuttons: | ||||
menubutton = { | menubutton = { | ||||
menu = { | menu = { | ||||
startGame = Menubutton(20, 100, 200, 50, gamestate.game, nil, "Start Game", {255, 255, 255}, {57, 45, 66}), | |||||
quitGame = Menubutton(30, 170, 180, 40, gamestate.quit, nil, "Quit Game", {255, 255, 255}, {57, 45, 66}) | |||||
Menubutton(20, 100, 200, 50, gamestate.game, nil, "Start Game", {255, 255, 255}, {57, 45, 66}), | |||||
Menubutton(30, 170, 180, 40, gamestate.quit, nil, "Quit Game", {255, 255, 255}, {57, 45, 66}) | |||||
}, | }, | ||||
game = { | game = { | ||||
-- Pause button or something here in future? | -- Pause button or something here in future? | ||||
} | } | ||||
} | } | ||||
-- 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: | -- Camera: | ||||
cam = Camera() | cam = Camera() | ||||
@@ -83,6 +93,9 @@ function drawPlanets() | |||||
end | end | ||||
end | end | ||||
-- Effects | |||||
function drawEffects() | function drawEffects() | ||||
for i=1, #effects do | for i=1, #effects do | ||||
effects[i]:draw() | effects[i]:draw() | ||||
@@ -97,8 +110,6 @@ end | |||||
-- Camera | -- Camera | ||||
function cameraControls() | function cameraControls() | ||||
local step = settings.zoom.step | local step = settings.zoom.step | ||||
@@ -118,8 +129,7 @@ function cameraControls() | |||||
end | end | ||||
-- Zoom Limit: | -- 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 | if zoomlevel < min then | ||||
zoomlevel = min | zoomlevel = min | ||||
end | end | ||||
@@ -130,6 +140,9 @@ function cameraControls() | |||||
cam:zoomTo(zoomlevel) | cam:zoomTo(zoomlevel) | ||||
end | end | ||||
-- Time Warp | |||||
function timewarpControls() | function timewarpControls() | ||||
-- Time Warp Toggle Cooldowns: | -- Time Warp Toggle Cooldowns: | ||||
local maxCooldown = settings.warp.cooldown | local maxCooldown = settings.warp.cooldown | ||||
@@ -167,6 +180,35 @@ function timewarpControls() | |||||
end | end | ||||
-- Menubuttons | |||||
function menubuttonUpdate() | |||||
if GAMESTATE == gamestate.menu then | |||||
for i, button in ipairs(menubutton.menu) do | |||||
button:update() | |||||
end | |||||
elseif GAMESTATE == gamestate.game then | |||||
for i, button in ipairs(menubutton.game) do | |||||
button:update() | |||||
end | |||||
end | |||||
end | |||||
function menubuttonDraw() | |||||
if GAMESTATE == gamestate.menu then | |||||
for i, button in ipairs(menubutton.menu) do | |||||
button:draw() | |||||
end | |||||
elseif GAMESTATE == gamestate.game then | |||||
for i, button in ipairs(menubutton.game) do | |||||
button:draw() | |||||
end | |||||
end | |||||
end | |||||
-- MAIN | -- MAIN | ||||
@@ -176,8 +218,6 @@ function love.update(dt) | |||||
love.event.quit(0) | love.event.quit(0) | ||||
elseif GAMESTATE == gamestate.menu then | elseif GAMESTATE == gamestate.menu then | ||||
menubutton.menu.startGame:update(dt) | |||||
menubutton.menu.quitGame:update(dt) | |||||
elseif GAMESTATE == gamestate.game then | elseif GAMESTATE == gamestate.game then | ||||
-- Game Objects: | -- Game Objects: | ||||
@@ -190,12 +230,13 @@ function love.update(dt) | |||||
-- Gui: | -- Gui: | ||||
gui:update(dt) | gui:update(dt) | ||||
button.tutorial:update() | |||||
-- Camera: | -- Camera: | ||||
cam:lookAt(player.x, player.y) | cam:lookAt(player.x, player.y) | ||||
cameraControls() | cameraControls() | ||||
--debug(player.x .. " " .. player.y) | |||||
end | end | ||||
menubuttonUpdate() | |||||
end | end | ||||
function love.draw() | function love.draw() | ||||
@@ -205,25 +246,22 @@ function love.draw() | |||||
love.graphics.setFont(font.gametitle) | love.graphics.setFont(font.gametitle) | ||||
love.graphics.printf(info.title, 20, 20, width, "left") | love.graphics.printf(info.title, 20, 20, width, "left") | ||||
-- Buttons: | |||||
menubutton.menu.startGame:draw() | |||||
menubutton.menu.quitGame:draw() | |||||
elseif GAMESTATE == gamestate.game then | elseif GAMESTATE == gamestate.game then | ||||
cam:attach() | cam:attach() | ||||
-- Game Objects: | -- Game Objects: | ||||
drawPlanets() | drawPlanets() | ||||
drawEffects() | drawEffects() | ||||
player:draw() | player:draw() | ||||
-- Camera Zoom Player Location Indicator: OVERWORK SOON PLS KAY; IT UGLY | |||||
if zoomlevel < 0.3 then | |||||
love.graphics.setColor(1, 1, 1, 0.2) | |||||
love.graphics.circle("fill", player.x, player.y, (1/zoomlevel)*10) | |||||
end | |||||
cam:detach() | cam:detach() | ||||
-- Gui: | -- Gui: | ||||
player:drawPositionIndicator() | |||||
gui:draw() | gui:draw() | ||||
if button.tutorial.isActive then | |||||
textbox.tutorial:draw() | |||||
end | |||||
button.tutorial:draw() | |||||
end | end | ||||
menubuttonDraw() | |||||
end | end |
@@ -4,6 +4,7 @@ calc = {} | |||||
-- G-Constant | -- G-Constant | ||||
calc.G = 6.67e-11 -- TWEAKABLE FOR LATER DEPENDING ON SCALE!!!!!!!!!!! | calc.G = 6.67e-11 -- TWEAKABLE FOR LATER DEPENDING ON SCALE!!!!!!!!!!! | ||||
calc.pi = 3.14 | calc.pi = 3.14 | ||||
-- Development debugging/logging thing | -- Development debugging/logging thing | ||||
function calc.debug(text) | function calc.debug(text) | ||||
if calc.isDebug then | if calc.isDebug then | ||||
@@ -50,5 +51,13 @@ function calc.closestObj(target) | |||||
return minPlanet | return minPlanet | ||||
end | 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 | 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 |
@@ -9,6 +9,7 @@ function Player:init(tempX, tempY, tempT) | |||||
self.xStart = tempX | self.xStart = tempX | ||||
self.yStart = tempY | self.yStart = tempY | ||||
-- Speed of Parent: | |||||
self.orbitalX = 0 | self.orbitalX = 0 | ||||
self.orbitalY = 0 | self.orbitalY = 0 | ||||
@@ -32,19 +33,26 @@ function Player:init(tempX, tempY, tempT) | |||||
self.angle = calc.pi/2 | self.angle = calc.pi/2 | ||||
-- Status: | -- Status: | ||||
self.isAccelerating = false | |||||
self.exploding = false | self.exploding = false | ||||
self.inRange = nil | self.inRange = nil | ||||
--TEXTURE HERE? | |||||
self.texture = love.graphics.newImage(starshipTypes[tempT].texture) | |||||
self.width = self.texture:getWidth() | |||||
self.height = self.texture:getHeight() | |||||
-- Spacecraft Textures: | |||||
self.texture = { | |||||
ship = starshipTypes[tempT].textures.ship, | |||||
fullThrust = starshipTypes[tempT].textures.fullThrust, | |||||
lowThrust = starshipTypes[tempT].textures.lowThrust | |||||
} | |||||
self.width = self.texture.ship:getWidth() | |||||
self.height = self.texture.ship:getHeight() | |||||
end | end | ||||
-- FUNCTIONS | -- FUNCTIONS | ||||
-- Player Controls: | |||||
function Player:throttleControls() | function Player:throttleControls() | ||||
local change = 0.01 | local change = 0.01 | ||||
local max, min = 1, 0 | local max, min = 1, 0 | ||||
@@ -129,9 +137,11 @@ function Player:flightControls() | |||||
if (calc.distance(closestPla.x, closestPla.y, self.x, self.y) > calc.distance(closestPla.x, closestPla.y, self.x+self.xSpeed + math.cos(self.angle) * speedChange*2, self.y+self.ySpeed - math.sin(self.angle) * speedChange*2) and self:isLanded()) then --Holy moly this is long | if (calc.distance(closestPla.x, closestPla.y, self.x, self.y) > calc.distance(closestPla.x, closestPla.y, self.x+self.xSpeed + math.cos(self.angle) * speedChange*2, self.y+self.ySpeed - math.sin(self.angle) * speedChange*2) and self:isLanded()) then --Holy moly this is long | ||||
debug("Flying into a planet!") | debug("Flying into a planet!") | ||||
else | else | ||||
self.xSpeed = self.xSpeed + math.cos(self.angle) * speedChange*2 | |||||
self.xSpeed = self.xSpeed + math.cos(self.angle) * speedChange*10 | |||||
--debug("Ship thrusters X: " .. math.cos(self.angle) .. " " .. math.sin(self.angle) .. " " .. self.angle) | --debug("Ship thrusters X: " .. math.cos(self.angle) .. " " .. math.sin(self.angle) .. " " .. self.angle) | ||||
self.ySpeed = self.ySpeed - math.sin(self.angle) * speedChange*2 | |||||
self.ySpeed = self.ySpeed - math.sin(self.angle) * speedChange*10 | |||||
self.isAccelerating = true | |||||
end | end | ||||
end | end | ||||
if love.keyboard.isDown(controls.flight.thrust.rotleft) then | if love.keyboard.isDown(controls.flight.thrust.rotleft) then | ||||
@@ -148,6 +158,9 @@ function Player:flightControls() | |||||
end | end | ||||
end | end | ||||
-- Get Player Data: | |||||
function Player:getSpeed() -- absolute speed | function Player:getSpeed() -- absolute speed | ||||
return math.abs(self.xSpeed) + math.abs(self.ySpeed) + math.abs(self.orbitalY) + math.abs(self.orbitalX) | return math.abs(self.xSpeed) + math.abs(self.ySpeed) + math.abs(self.orbitalY) + math.abs(self.orbitalX) | ||||
end | end | ||||
@@ -176,7 +189,7 @@ function Player:isLanded() | |||||
if self:getOrbitHeight(p) <= 1 then | if self:getOrbitHeight(p) <= 1 then | ||||
landed = true | landed = true | ||||
self.landedOn = p | self.landedOn = p | ||||
debug("Player touched down on: "..p.name) | |||||
--debug("Player touched down on: "..p.name) | |||||
end | end | ||||
end | end | ||||
-- Save Landing Speed: | -- Save Landing Speed: | ||||
@@ -185,12 +198,15 @@ function Player:isLanded() | |||||
local planet = math.abs(self.landedOn:getSpeed()) | local planet = math.abs(self.landedOn:getSpeed()) | ||||
self.landingspeed = math.abs(player-planet) | self.landingspeed = math.abs(player-planet) | ||||
debug("Landing speed: "..self.landingspeed) | |||||
--debug("Landing speed: "..self.landingspeed) | |||||
end | end | ||||
self:hasCrashed() | self:hasCrashed() | ||||
return landed | return landed | ||||
end | end | ||||
-- Player Calculations: | |||||
function Player:gravity() | function Player:gravity() | ||||
if self:isLanded() then | if self:isLanded() then | ||||
-- Player is landed: | -- Player is landed: | ||||
@@ -220,21 +236,33 @@ function Player:updatePosition() | |||||
self.y = self.y + self.ySpeed + self.orbitalY | self.y = self.y + self.ySpeed + self.orbitalY | ||||
end | end | ||||
function Player:drawTexture(x, y, r) | |||||
-- Graphics / Drawing: | |||||
function Player:drawTexture(x, y, r, s, texture) | |||||
-- Texture offset and size | -- Texture offset and size | ||||
local t = {s = 50} | |||||
local w, h = texture:getWidth(), texture:getHeight() | |||||
-- Draw Texture | -- Draw Texture | ||||
love.graphics.setColor(1, 1, 1) | love.graphics.setColor(1, 1, 1) | ||||
love.graphics.draw(self.texture, self.x, self.y, -(self.angle-calc.pi/2), 1, 1, self.width/2, self.height/2) | |||||
love.graphics.draw(texture, x, y, -(self.angle-calc.pi/2), s, s, w/2, h/2) | |||||
--debug("Angle: "..self.angle) | --debug("Angle: "..self.angle) | ||||
end | end | ||||
function Player:drawPositionIndicator(x, y) | |||||
-- Directional Arrow (when zoomed out) | |||||
if zoomlevel < settings.zoom.arrowAppear then | |||||
local s = 0.03 | |||||
self:drawTexture(width/2, height/2, calc.pi/2 - self.angle, s, texture.ui.arrow.red) | |||||
end | |||||
end | |||||
-- MAIN | -- MAIN | ||||
function Player:update(dt) | function Player:update(dt) | ||||
self.isAccelerating = false | |||||
if self.angle > calc.pi*2 then | if self.angle > calc.pi*2 then | ||||
self.angle = 0 | self.angle = 0 | ||||
elseif self.angle < 0 then | elseif self.angle < 0 then | ||||
@@ -248,22 +276,29 @@ function Player:update(dt) | |||||
end | end | ||||
function Player:draw() | function Player:draw() | ||||
local x, y = self.x, self.y | |||||
local x, y, scale = self.x, self.y, 1 | |||||
local dist = 10 | local dist = 10 | ||||
if not self.exploding then | |||||
self:drawTexture(x, y, calc.pi/2 - self.angle) | |||||
end | |||||
local shake = 0 | |||||
-- Shake (to textures): | |||||
if self.isAccelerating then | |||||
shake = math.random(0, 1) * self.throttle | |||||
x, y = x + shake, y + shake | |||||
end | |||||
-- Draw Spacecraft: | |||||
if not self.exploding then | if not self.exploding then | ||||
if calc.isDebug then | |||||
-- Debugging Draw of actual Player Position | |||||
love.graphics.setColor(1, 0, 0) | |||||
love.graphics.circle("fill", x, y, 5, 20) | |||||
-- Draw Thrust Exhaust: | |||||
if self.isAccelerating and self.throttle ~= 0 then | |||||
local limit = 0.5 | |||||
if self.throttle < limit then | |||||
self:drawTexture(x, y, calc.pi/2 - self.angle, scale, self.texture.lowThrust) | |||||
else | |||||
self:drawTexture(x, y, calc.pi/2 - self.angle, scale, self.texture.fullThrust) | |||||
end | |||||
end | end | ||||
-- Directional Circle (temporary until actual rotatable ship texture is made) | |||||
love.graphics.circle("fill", x+dist*(1/zoomlevel*2)*math.cos(self.angle), y-dist*(1/zoomlevel*2)*math.sin(self.angle), 1/zoomlevel*2) | |||||
end | |||||
-- Ship Texture Drawing: | |||||
self:drawTexture(x, y, calc.pi/2 - self.angle, scale, self.texture.ship) | |||||
end | |||||
end | end |
@@ -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 |
@@ -1,10 +1,24 @@ | |||||
texture = { | texture = { | ||||
-- (G)UI Textures: | |||||
ui = { | |||||
arrow = { | |||||
grey = love.graphics.newImage("textures/ui/arrow_grey.png"), | |||||
red = love.graphics.newImage("textures/ui/arrow_red.png") | |||||
} | |||||
}, | |||||
-- Player/Spacecraft Textures: | |||||
player = { | player = { | ||||
orbiter = "textures/player/orbiter.png" | |||||
-- Orbiter Spacecraft: | |||||
orbiter = { | |||||
ship = love.graphics.newImage("textures/player/orbiter/orbiter.png"), | |||||
lowThrust = love.graphics.newImage("textures/player/orbiter/lowThrust.png"), | |||||
fullThrust = love.graphics.newImage("textures/player/orbiter/fullThrust.png") | |||||
} | |||||
}, | }, | ||||
planet = { | |||||
-- here will go planet textures in future | |||||
} | |||||
-- Planet Textures: | |||||
planet = {} | |||||
} | } | ||||
return texture | return texture |