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