| @@ -3,7 +3,8 @@ info = {} | |||||
| info.name = "Questionable Örbital Mechanics" | info.name = "Questionable Örbital Mechanics" | ||||
| info.version = "0.0.2_dev" | info.version = "0.0.2_dev" | ||||
| info.authors = { | info.authors = { | ||||
| "NiroUwU" | |||||
| "NiroUwU", | |||||
| "Madiwka4" | |||||
| } | } | ||||
| return info | return info | ||||
| @@ -1,14 +1,16 @@ | |||||
| planetdata = { | planetdata = { | ||||
| { | { | ||||
| x = 0, y = 50000, | |||||
| r = 12000, m = 5e14, | |||||
| x = 0, y = 0, | |||||
| r = 500000, m = 5e15, | |||||
| xSpeed = 0, ySpeed = 0, | |||||
| name = "Testos", | name = "Testos", | ||||
| colour = {42, 04, 20}, | colour = {42, 04, 20}, | ||||
| parent = "star" | parent = "star" | ||||
| }, | }, | ||||
| { | { | ||||
| x = 30000, y = 50000, | |||||
| r = 2000, m = 1e14, | |||||
| x = 2000000, y = 0, | |||||
| r = 40000, m = 4e7, | |||||
| xSpeed = 0, ySpeed = 12000, | |||||
| name = "Deez", | name = "Deez", | ||||
| colour = {50, 50, 50}, | colour = {50, 50, 50}, | ||||
| parent = 1 | parent = 1 | ||||
| @@ -0,0 +1,17 @@ | |||||
| settings = { | |||||
| zoom = { | |||||
| min = 0.0001, | |||||
| max = 4, | |||||
| step = 0.01, | |||||
| reset = 0.0001 | |||||
| }, | |||||
| warp = { | |||||
| min = 1, | |||||
| max = 10, | |||||
| step = 1, | |||||
| cooldown = 10 | |||||
| } | |||||
| } | |||||
| return settings | |||||
| @@ -6,6 +6,7 @@ require "libraries" | |||||
| -- General Data: | -- General Data: | ||||
| info = require "data/info" | info = require "data/info" | ||||
| controls = require "data/controls" | controls = require "data/controls" | ||||
| settings = require "data/settings" | |||||
| texture = require "textures/textures" | texture = require "textures/textures" | ||||
| -- Game Source: | -- Game Source: | ||||
| @@ -7,10 +7,14 @@ function love.load() | |||||
| -- Declaration: | -- Declaration: | ||||
| love.window.setTitle(info.name.." - v"..info.version) | love.window.setTitle(info.name.." - v"..info.version) | ||||
| width, height = love.graphics.getDimensions() | width, height = love.graphics.getDimensions() | ||||
| cam = Camera() | |||||
| zoomlevel = 0.005 | |||||
| -- Camera: | |||||
| cam = Camera() | |||||
| zoomlevel = settings.zoom.reset | |||||
| --Simulation: | |||||
| warpspeed = 1 | |||||
| warpCoolDown = 0 | |||||
| -- Loading: | -- Loading: | ||||
| ships = {} --Potentially add other starships in the future? | ships = {} --Potentially add other starships in the future? | ||||
| @@ -36,6 +40,7 @@ function loadPlanets() | |||||
| -- Planet Data Assignment: | -- Planet Data Assignment: | ||||
| p.x, p.y, | p.x, p.y, | ||||
| p.r, p.m, | p.r, p.m, | ||||
| p.xSpeed, p.ySpeed, | |||||
| p.name, | p.name, | ||||
| p.colour, | p.colour, | ||||
| p.parent | p.parent | ||||
| @@ -65,26 +70,26 @@ end | |||||
| function cameraControls() | function cameraControls() | ||||
| local zooming = 0.01 | |||||
| local step = settings.zoom.step | |||||
| function love.wheelmoved(x, y) | function love.wheelmoved(x, y) | ||||
| if y > 0 then | if y > 0 then | ||||
| -- Zoom in: | -- Zoom in: | ||||
| zoomlevel = zoomlevel + zooming | |||||
| zoomlevel = zoomlevel + step | |||||
| elseif y < 0 then | elseif y < 0 then | ||||
| -- Zoom out: | -- Zoom out: | ||||
| zoomlevel = zoomlevel - zooming | |||||
| zoomlevel = zoomlevel - step | |||||
| end | end | ||||
| end | end | ||||
| -- Reset Zoom: | -- Reset Zoom: | ||||
| if love.mouse.isDown(3) then | |||||
| zoomlevel = 1 | |||||
| if love.mouse.isDown(controls.camera.zoom.reset) then | |||||
| zoomlevel = settings.zoom.reset | |||||
| end | end | ||||
| -- Zoom Limit: | -- Zoom Limit: | ||||
| local max = 4 | |||||
| local min = 0.001 | |||||
| local max = settings.zoom.max | |||||
| local min = settings.zoom.min | |||||
| if zoomlevel < min then | if zoomlevel < min then | ||||
| zoomlevel = min | zoomlevel = min | ||||
| end | end | ||||
| @@ -95,14 +100,54 @@ function cameraControls() | |||||
| cam:zoomTo(zoomlevel) | cam:zoomTo(zoomlevel) | ||||
| end | end | ||||
| function timewarpControls() | |||||
| -- Time Warp Toggle Cooldowns: | |||||
| local maxCooldown = settings.warp.cooldown | |||||
| -- Time Warp Steps: | |||||
| local step = settings.warp.step | |||||
| -- Time Warp Limits: | |||||
| local min = settings.warp.min | |||||
| local max = settings.warp.max | |||||
| -- Decrease Warp | |||||
| if love.keyboard.isDown(controls.flight.warp.down) and warpCoolDown <= 0 then | |||||
| warpspeed = warpspeed - step | |||||
| warpCoolDown = maxCooldown | |||||
| end | |||||
| -- Increase Warp | |||||
| if love.keyboard.isDown(controls.flight.warp.up) and warpCoolDown <= 0 then | |||||
| warpspeed = warpspeed + step | |||||
| warpCoolDown = maxCooldown | |||||
| end | |||||
| -- Reset Warp | |||||
| if love.keyboard.isDown(controls.flight.warp.reset) then | |||||
| warpspeed = min | |||||
| end | |||||
| -- Value Correction | |||||
| if warpspeed < min then | |||||
| warpspeed = min | |||||
| elseif warpspeed > max then | |||||
| warpspeed = max | |||||
| end | |||||
| warpCoolDown = warpCoolDown - 1 | |||||
| return warpspeed | |||||
| end | |||||
| -- MAIN | -- MAIN | ||||
| function love.update(dt) | function love.update(dt) | ||||
| -- Game Objects: | -- Game Objects: | ||||
| updatePlanets() | |||||
| player:update(dt) | |||||
| for i=1, timewarpControls() do | |||||
| -- Physics go in here: | |||||
| updatePlanets() | |||||
| player:update(dt) | |||||
| end | |||||
| player:throttleControls() | |||||
| -- Gui: | -- Gui: | ||||
| gui:update(dt) | gui:update(dt) | ||||
| @@ -16,7 +16,7 @@ function Gui:drawSpeed() | |||||
| end | end | ||||
| function Gui:drawWarp() | function Gui:drawWarp() | ||||
| local warp = player.warpspeed | |||||
| local warp = warpspeed | |||||
| love.graphics.setColor(1, 1, 1) | love.graphics.setColor(1, 1, 1) | ||||
| love.graphics.printf("Warp Speed: x"..warp, 5, 5, width, "left") | love.graphics.printf("Warp Speed: x"..warp, 5, 5, width, "left") | ||||
| end | end | ||||
| @@ -1,6 +1,6 @@ | |||||
| Planet = Class {} | Planet = Class {} | ||||
| function Planet:init(tempX, tempY, tempR, tempM, tempName, tempC, tempP) | |||||
| function Planet:init(tempX, tempY, tempR, tempM, tempXSpeed, tempYSpeed, tempName, tempC, tempP) | |||||
| -- Planet Position: | -- Planet Position: | ||||
| self.x = tempX | self.x = tempX | ||||
| self.y = tempY | self.y = tempY | ||||
| @@ -23,8 +23,9 @@ function Planet:init(tempX, tempY, tempR, tempM, tempName, tempC, tempP) | |||||
| -- Planet Family: | -- Planet Family: | ||||
| self.children = {} | self.children = {} | ||||
| if (tempP ~= "star") then | |||||
| self.ySpeed = 5 | |||||
| if (tempP ~= "star") then | |||||
| self.xSpeed = tempXSpeed | |||||
| self.ySpeed = tempYSpeed | |||||
| self.parent = planet[tempP] | self.parent = planet[tempP] | ||||
| table.insert(planet[tempP].children, self) | table.insert(planet[tempP].children, self) | ||||
| end | end | ||||
| @@ -48,7 +49,7 @@ function Planet:attract(dt) --Planet doing the attracting, divided in two parts | |||||
| for i, child in ipairs(self.children) do | for i, child in ipairs(self.children) do | ||||
| local grav = calc.gPull(self, child) | local grav = calc.gPull(self, child) | ||||
| local dist = calc.distance(self.x, self.y, child.x, child.y) | local dist = calc.distance(self.x, self.y, child.x, child.y) | ||||
| local pull = 20/dist * grav/1e14 | |||||
| local pull = 20/dist * grav | |||||
| child.xSpeed = child.xSpeed - (child.x - self.x)*pull | child.xSpeed = child.xSpeed - (child.x - self.x)*pull | ||||
| child.ySpeed = child.ySpeed - (child.y - self.y)*pull | child.ySpeed = child.ySpeed - (child.y - self.y)*pull | ||||
| @@ -17,13 +17,6 @@ function Player:init(tempX, tempY) | |||||
| self.throttle = 0.5 | self.throttle = 0.5 | ||||
| self.speed = 0.05 | self.speed = 0.05 | ||||
| -- Time Warping: | |||||
| self.warpspeed = 1 | |||||
| self.warpLimit = 10 | |||||
| -- Cooldown Between Clicking: | |||||
| self.warpCoolDown = 30 | |||||
| self.coolDown = 0 | |||||
| -- Landings: | -- Landings: | ||||
| self.impacttolerance = 0.5 | self.impacttolerance = 0.5 | ||||
| self.landingspeed = 0 | self.landingspeed = 0 | ||||
| @@ -140,37 +133,6 @@ function Player:gravity() | |||||
| end | end | ||||
| end | end | ||||
| function Player:timewarp() | |||||
| local step = 1 | |||||
| -- Time Warp Limits: | |||||
| local min = 1 | |||||
| local max = self.warpLimit | |||||
| -- Decrease Warp | |||||
| if love.keyboard.isDown(controls.flight.warp.down) and self.coolDown <= 0 then | |||||
| self.warpspeed = self.warpspeed - step | |||||
| self.coolDown = self.warpCoolDown | |||||
| end | |||||
| -- Increase Warp | |||||
| if love.keyboard.isDown(controls.flight.warp.up) and self.coolDown <= 0 then | |||||
| self.warpspeed = self.warpspeed + step | |||||
| self.coolDown = self.warpCoolDown | |||||
| end | |||||
| -- Reset Warp | |||||
| if love.keyboard.isDown(controls.flight.warp.reset) then | |||||
| self.warpspeed = min | |||||
| end | |||||
| -- Value Correction | |||||
| if self.warpspeed < min then | |||||
| self.warpspeed = min | |||||
| elseif self.warpspeed > max then | |||||
| self.warpspeed = max | |||||
| end | |||||
| return self.warpspeed | |||||
| end | |||||
| function Player:updatePosition() | function Player:updatePosition() | ||||
| self.x = self.x + self.xSpeed | self.x = self.x + self.xSpeed | ||||
| self.y = self.y + self.ySpeed | self.y = self.y + self.ySpeed | ||||
| @@ -182,15 +144,9 @@ end | |||||
| function Player:update(dt) | function Player:update(dt) | ||||
| --debug(self.warpspeed) | --debug(self.warpspeed) | ||||
| self:timewarp() | |||||
| for i=1, self.warpspeed do | |||||
| self:gravity() | |||||
| self:flightControls() | |||||
| self:updatePosition() | |||||
| end | |||||
| self:throttleControls() | |||||
| self.coolDown = self.coolDown - 1 | |||||
| self:gravity() | |||||
| self:flightControls() | |||||
| self:updatePosition() | |||||
| end | end | ||||
| function Player:draw() | function Player:draw() | ||||