Author | SHA1 | Message | Date |
---|---|---|---|
Niro | 0016c01a0f | added gamestate, completed Menubutton, added menu | 2 years ago |
nirokay |
63820e69f9
|
Merge pull request #5 from NiroUwU/testing
Please please end my suffering as well |
2 years ago |
Madiwka | 3e41bd9e52 | I swear i'm going to end the lives of those who inventer game developing if this keeps up | 2 years ago |
Madiwka | 9fcad0dde2 | Fixed ship texture rotation | 2 years ago |
@@ -0,0 +1,6 @@ | |||||
font = { | |||||
default = love.graphics.setNewFont(20), | |||||
gametitle = love.graphics.setNewFont(40) | |||||
} | |||||
return font |
@@ -1,6 +1,7 @@ | |||||
info = {} | info = {} | ||||
info.name = "Questionable Örbital Mechanics" | info.name = "Questionable Örbital Mechanics" | ||||
info.title = info.name | |||||
info.version = "0.0.2_dev" | info.version = "0.0.2_dev" | ||||
info.authors = { | info.authors = { | ||||
"NiroUwU", | "NiroUwU", | ||||
@@ -3,7 +3,7 @@ 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.5, | |||||
impacttolerance = 0.75, | |||||
mass = 100000, -- idk, feels better but holy fuck thats a thicc ass boi xD | mass = 100000, -- idk, feels better but holy fuck thats a thicc ass boi xD | ||||
speed = 0.05, | speed = 0.05, | ||||
specials = {"orbitSync"}, | specials = {"orbitSync"}, | ||||
@@ -9,14 +9,13 @@ texture = require "textures/textures" | |||||
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" | |||||
-- Game Source: | -- Game Source: | ||||
calc = require "src/calc" | calc = require "src/calc" | ||||
font = require "src/font" | |||||
-- Game Classes: | -- Game Classes: | ||||
require "src/class/Menubutton" | |||||
require "src/class/Player" | require "src/class/Player" | ||||
require "src/class/Gui" | require "src/class/Gui" | ||||
require "src/class/Planet" | require "src/class/Planet" | ||||
@@ -1,14 +1,33 @@ | |||||
require "import" | |||||
debug = calc.debug | |||||
calc.isDebug = true | |||||
function love.load() | function love.load() | ||||
require "import" | |||||
-- Debugging / Logging: | |||||
debug = calc.debug | |||||
calc.isDebug = true | |||||
-- Declaration: | -- Declaration: | ||||
love.window.setTitle(info.name.." - v"..info.version) | love.window.setTitle(info.name.." - v"..info.version) | ||||
--love.graphics.setDefaultFilter("nearest", "nearest") | |||||
width, height = love.graphics.getDimensions() | width, height = love.graphics.getDimensions() | ||||
-- Gamestate: | |||||
gamestate = { | |||||
quit = "stateQUIT", | |||||
menu = "stateMENU", | |||||
game = "stateGAME" | |||||
} | |||||
GAMESTATE = gamestate.menu | |||||
-- Menubuttons: | |||||
menubutton = { | |||||
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}) | |||||
}, | |||||
game = { | |||||
-- Pause button or something here in future? | |||||
} | |||||
} | |||||
-- Camera: | -- Camera: | ||||
cam = Camera() | cam = Camera() | ||||
zoomlevel = settings.zoom.reset | zoomlevel = settings.zoom.reset | ||||
@@ -152,37 +171,59 @@ end | |||||
-- MAIN | -- MAIN | ||||
function love.update(dt) | function love.update(dt) | ||||
-- Game Objects: | |||||
for i=1, timewarpControls() do | |||||
-- Physics go in here: | |||||
updatePlanets() | |||||
player:update(dt) | |||||
end | |||||
player:throttleControls() | |||||
-- Gui: | |||||
gui:update(dt) | |||||
if GAMESTATE == gamestate.quit then | |||||
debug("Game has been quit, goodbye :)") | |||||
love.event.quit(0) | |||||
-- Camera: | |||||
cam:lookAt(player.x, player.y) | |||||
cameraControls() | |||||
--debug(player.x .. " " .. player.y) | |||||
end | |||||
elseif GAMESTATE == gamestate.menu then | |||||
menubutton.menu.startGame:update(dt) | |||||
menubutton.menu.quitGame:update(dt) | |||||
function love.draw() | |||||
cam:attach() | |||||
elseif GAMESTATE == gamestate.game then | |||||
-- Game Objects: | -- Game Objects: | ||||
drawPlanets() | |||||
drawEffects() | |||||
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) | |||||
for i=1, timewarpControls() do | |||||
-- Physics go in here: | |||||
updatePlanets() | |||||
player:update(dt) | |||||
end | end | ||||
cam:detach() | |||||
player:throttleControls() | |||||
-- Gui: | |||||
gui:update(dt) | |||||
-- Gui: | |||||
gui:draw() | |||||
-- Camera: | |||||
cam:lookAt(player.x, player.y) | |||||
cameraControls() | |||||
--debug(player.x .. " " .. player.y) | |||||
end | |||||
end | |||||
function love.draw() | |||||
if GAMESTATE == gamestate.menu then | |||||
-- Game Title: | |||||
love.graphics.setColor(1, 1, 0.6) | |||||
love.graphics.setFont(font.gametitle) | |||||
love.graphics.printf(info.title, 20, 20, width, "left") | |||||
-- Buttons: | |||||
menubutton.menu.startGame:draw() | |||||
menubutton.menu.quitGame:draw() | |||||
elseif GAMESTATE == gamestate.game then | |||||
cam:attach() | |||||
-- Game Objects: | |||||
drawPlanets() | |||||
drawEffects() | |||||
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() | |||||
-- Gui: | |||||
gui:draw() | |||||
end | |||||
end | end |
@@ -1,5 +1,85 @@ | |||||
Menubutton = Class {} | Menubutton = Class {} | ||||
function Menubutton:init(tempX, tempY, tempW, tempH) | |||||
function Menubutton:init(tempX, tempY, tempW, tempH, tempState, tempFormat, tempText, tempTC, tempBC) | |||||
-- Position and Dimensions: | |||||
self.x = tempX | |||||
self.y = tempY | |||||
self.w = tempW | |||||
self.h = tempH | |||||
-- State to jump to: | |||||
self.toState = tempState | |||||
-- Formatting: | |||||
self.format = tempFormat | |||||
if self.format == "center" or self.format == "centre" then | |||||
self.x = self.x - self.w | |||||
self.y = self.y - self.h | |||||
end | |||||
-- Text and Colours: | |||||
self.text = tempText | |||||
self.colour = { | |||||
text = tempTC, | |||||
background = tempBC | |||||
} | |||||
end | |||||
-- FUNCTIONS | |||||
function Menubutton: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 Menubutton:click() | |||||
local click = false | |||||
if self:hover() and love.mouse.isDown(1) then | |||||
click = true | |||||
end | |||||
return click | |||||
end | |||||
-- MAIN | |||||
function Menubutton:update(dt) | |||||
if self:click() then | |||||
-- Here is room for calling effects or something... looking at you madi qwq xD | |||||
GAMESTATE = self.toState | |||||
end | |||||
end | |||||
function Menubutton:draw() | |||||
local x, y, w, h = self.x, self.y, self.w, self.h | |||||
local bg, tx = self.colour.background, self.colour.text | |||||
bg, tx = calc.colour(bg[1], bg[2], bg[3]), calc.colour(tx[1], tx[2], tx[3]) | |||||
-- Hover Effects | |||||
if self:hover() then | |||||
-- Slight Colour Lightup | |||||
for i = 1, #bg do | |||||
bg[i] = bg[i]*1.1 | |||||
end | |||||
-- Slight pop up effect (purly visual) | |||||
local pop = 3 | |||||
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 | end |
@@ -41,7 +41,7 @@ end | |||||
-- FUNCTIONS | -- FUNCTIONS | ||||
function Planet:getSpeed() | function Planet:getSpeed() | ||||
return math.abs(self.xSpeed) + math.abs(self.ySpeed) | |||||
return math.abs(self.xSpeed) + math.abs(self.ySpeed) + math.abs(self.orbitalY) + math.abs(self.orbitalX) | |||||
end | end | ||||
function Planet:updatePosition() | function Planet:updatePosition() | ||||
@@ -95,4 +95,6 @@ function Planet:draw() | |||||
local col = self.colour | local col = self.colour | ||||
love.graphics.setColor(calc.c(col[1]), calc.c(col[2]), calc.c(col[3])) | love.graphics.setColor(calc.c(col[1]), calc.c(col[2]), calc.c(col[3])) | ||||
love.graphics.circle("fill", self.x, self.y, self.r) | love.graphics.circle("fill", self.x, self.y, self.r) | ||||
love.graphics.setColor(0.1,0.1,0.1,0.2) | |||||
love.graphics.circle("fill", self.x, self.y, self.r*2) | |||||
end | end |
@@ -9,6 +9,9 @@ function Player:init(tempX, tempY, tempT) | |||||
self.xStart = tempX | self.xStart = tempX | ||||
self.yStart = tempY | self.yStart = tempY | ||||
self.orbitalX = 0 | |||||
self.orbitalY = 0 | |||||
-- Speed: | -- Speed: | ||||
self.xSpeed = 0 | self.xSpeed = 0 | ||||
self.ySpeed = 0 | self.ySpeed = 0 | ||||
@@ -30,9 +33,12 @@ function Player:init(tempX, tempY, tempT) | |||||
-- Status: | -- Status: | ||||
self.exploding = false | self.exploding = false | ||||
self.inRange = nil | |||||
--TEXTURE HERE? | --TEXTURE HERE? | ||||
self.texture = love.graphics.newImage(starshipTypes[tempT].texture) | self.texture = love.graphics.newImage(starshipTypes[tempT].texture) | ||||
self.width = self.texture:getWidth() | |||||
self.height = self.texture:getHeight() | |||||
end | end | ||||
@@ -71,7 +77,8 @@ end | |||||
function Player:reset() | function Player:reset() | ||||
self.x = self.xStart | self.x = self.xStart | ||||
self.y = self.yStart | self.y = self.yStart | ||||
self.landingspeed = 0 | |||||
self.angle = calc.pi/2 | |||||
self.xSpeed = 0 | self.xSpeed = 0 | ||||
self.ySpeed = 0 | self.ySpeed = 0 | ||||
end | end | ||||
@@ -142,7 +149,7 @@ function Player:flightControls() | |||||
end | end | ||||
function Player:getSpeed() -- absolute speed | function Player:getSpeed() -- absolute speed | ||||
return math.abs(self.xSpeed) + math.abs(self.ySpeed) | |||||
return math.abs(self.xSpeed) + math.abs(self.ySpeed) + math.abs(self.orbitalY) + math.abs(self.orbitalX) | |||||
end | end | ||||
function Player:getSpeedTo(obj) -- relative speed to an object | function Player:getSpeedTo(obj) -- relative speed to an object | ||||
@@ -166,7 +173,7 @@ end | |||||
function Player:isLanded() | function Player:isLanded() | ||||
local landed = false | local landed = false | ||||
for i, p in ipairs(planet) do | for i, p in ipairs(planet) do | ||||
if self:getOrbitHeight(p) <= 0 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) | ||||
@@ -188,25 +195,39 @@ function Player:gravity() | |||||
if self:isLanded() then | if self:isLanded() then | ||||
-- Player is landed: | -- Player is landed: | ||||
local p = self.landedOn | local p = self.landedOn | ||||
self.xSpeed, self.ySpeed = math.abs(p.xSpeed), math.abs(p.ySpeed) | |||||
self.xSpeed, self.ySpeed = 0, 0 | |||||
end | |||||
local p = calc.closestObj(player) | |||||
if self:getOrbitHeight(p) < p.r and p.parent then | |||||
if self.inRange ~= p then | |||||
self.xSpeed = 0 | |||||
self.ySpeed = 0 | |||||
self.inRange = p | |||||
end | |||||
self.orbitalX = p.xSpeed + p.orbitalX | |||||
self.orbitalY = p.ySpeed + p.orbitalY | |||||
debug("Synced speed" .. self.orbitalX .. " " .. self.orbitalY .. " with " .. p.name) | |||||
else | |||||
self.inRange = nil | |||||
self.orbitalX = 0 | |||||
self.orbitalY = 0 | |||||
end | end | ||||
end | end | ||||
function Player:updatePosition() | function Player:updatePosition() | ||||
self.x = self.x + self.xSpeed | |||||
self.y = self.y + self.ySpeed | |||||
self.x = self.x + self.xSpeed + self.orbitalX | |||||
self.y = self.y + self.ySpeed + self.orbitalY | |||||
end | end | ||||
function Player:drawTexture(x, y, r) | function Player:drawTexture(x, y, r) | ||||
-- Texture offset and size | -- Texture offset and size | ||||
local t = {s = 50} | local t = {s = 50} | ||||
t.x = x - love.graphics.getPixelWidth(self.texture)/2 -- ????????????????????????????????? | |||||
t.y = y - love.graphics.getPixelHeight(self.texture)/2 | |||||
-- Draw Texture | -- Draw Texture | ||||
love.graphics.setColor(1, 1, 1) | love.graphics.setColor(1, 1, 1) | ||||
love.graphics.draw(self.texture, t.x, t.y, r) | |||||
debug("Angle: "..self.angle) | |||||
love.graphics.draw(self.texture, self.x, self.y, -(self.angle-calc.pi/2), 1, 1, self.width/2, self.height/2) | |||||
--debug("Angle: "..self.angle) | |||||
end | end | ||||
@@ -230,7 +251,10 @@ function Player:draw() | |||||
local x, y = self.x, self.y | local x, y = self.x, self.y | ||||
local dist = 10 | local dist = 10 | ||||
if not self.exploding then | |||||
self:drawTexture(x, y, calc.pi/2 - self.angle) | self:drawTexture(x, y, calc.pi/2 - self.angle) | ||||
end | |||||
if not self.exploding then | if not self.exploding then | ||||
if calc.isDebug then | if calc.isDebug then | ||||
@@ -1 +0,0 @@ | |||||
default = love.graphics.setNewFont(20) |