4 Révisions

9 fichiers modifiés avec 204 ajouts et 51 suppressions
  1. +6
    -0
      data/font.lua
  2. +1
    -0
      data/info.lua
  3. +1
    -1
      data/starshipTypes.lua
  4. +2
    -3
      import.lua
  5. +75
    -33
      main.lua
  6. +82
    -2
      src/class/Menubutton.lua
  7. +3
    -1
      src/class/Planet.lua
  8. +34
    -10
      src/class/Player.lua
  9. +0
    -1
      src/font.lua

+ 6
- 0
data/font.lua Voir le fichier

@@ -0,0 +1,6 @@
font = {
default = love.graphics.setNewFont(20),
gametitle = love.graphics.setNewFont(40)
}

return font

+ 1
- 0
data/info.lua Voir le fichier

@@ -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",


+ 1
- 1
data/starshipTypes.lua Voir le fichier

@@ -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"},


+ 2
- 3
import.lua Voir le fichier

@@ -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"


+ 75
- 33
main.lua Voir le fichier

@@ -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: if GAMESTATE == gamestate.quit then
for i=1, timewarpControls() do debug("Game has been quit, goodbye :)")
-- Physics go in here: love.event.quit(0)
updatePlanets()
player:update(dt)
end
player:throttleControls()

-- Gui:
gui:update(dt)


-- Camera: elseif GAMESTATE == gamestate.menu then
cam:lookAt(player.x, player.y) menubutton.menu.startGame:update(dt)
cameraControls() menubutton.menu.quitGame:update(dt)
--debug(player.x .. " " .. player.y)
end


function love.draw() elseif GAMESTATE == gamestate.game then
cam:attach()
-- Game Objects: -- Game Objects:
drawPlanets() for i=1, timewarpControls() do
drawEffects() -- Physics go in here:
player:draw() updatePlanets()

player:update(dt)
-- 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 end
cam:detach() player:throttleControls()

-- Gui:
gui:update(dt)


-- Gui: -- Camera:
gui:draw() 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

+ 82
- 2
src/class/Menubutton.lua Voir le fichier

@@ -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

+ 3
- 1
src/class/Planet.lua Voir le fichier

@@ -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

+ 34
- 10
src/class/Player.lua Voir le fichier

@@ -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.x = self.x + self.xSpeed + self.orbitalX
self.y = self.y + self.ySpeed 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) 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) --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


+ 0
- 1
src/font.lua Voir le fichier

@@ -1 +0,0 @@
default = love.graphics.setNewFont(20)

||||||
x
 
000:0
Chargement…
Annuler
Enregistrer