broken positioning, but functional mechanic almost

This commit is contained in:
2025-11-28 17:13:01 -07:00
parent 84cde293db
commit ac175ef371
+23 -10
View File
@@ -124,7 +124,8 @@ local player_ship = {
-- TODO fuel capacity and use (idle and while acceleration)
-- TODO cargo / mass affects acceleration
}
player_ship.orbital_radius = math.sqrt(player_ship.position_x^2 + player_ship.position_y^2)
-- player_ship.orbital_radius = math.sqrt(player_ship.position_x^2 + player_ship.position_y^2)
-- player_ship.rotation_offset = math.atan2(player_ship.position_y, player_ship.position_x)
-- TODO this just needs to be a list of all objects - including the player
local resource_points = {} -- NOTE they're "planets" but I intend for them to be multiple things tbh
@@ -180,8 +181,8 @@ local core_object = {
local last_message = ""
local game_time = 0
-- local orbital_speed_constant = 1 -- ironically, I think 1 is exactly the speed I want (that was before the new orbit system)
local orbital_speed_constant = 50
local orbital_speed_constant = 1 -- ironically, I think 1 is exactly the speed I want
-- local orbital_speed_constant = 50
function love.update(dt)
game_time = game_time + dt
@@ -233,12 +234,21 @@ function love.update(dt)
player_ship.position_x = player_ship.position_x + player_ship.velocity_x * dt
player_ship.position_y = player_ship.position_y + player_ship.velocity_y * dt
-- NOTE hardcoded player_ship orbiting center
player_ship.orbital_radius = math.sqrt(player_ship.position_x^2 + player_ship.position_y^2)
local player_rotation_offset = math.atan2(player_ship.position_y, player_ship.position_x)
local x, y = math.cos(dt / player_ship.orbital_radius / (1 / orbital_speed_constant) + player_rotation_offset), math.sin(dt / player_ship.orbital_radius / (1 / orbital_speed_constant) + player_rotation_offset)
player_ship.position_x = x * player_ship.orbital_radius
player_ship.position_y = y * player_ship.orbital_radius
if player_ship.velocity_x == 0 and player_ship.velocity_y == 0 then
player_ship.orbital_radius = player_ship.orbital_radius or math.sqrt(player_ship.position_x^2 + player_ship.position_y^2)
player_ship.rotation_offset = player_ship.rotation_offset or math.atan2(player_ship.position_y, player_ship.position_x) -- this will fail due to not being at timestep 0
-- might be fixable by computing where the game thinks the player should be and then adjusting it by where they are
-- TEMP player_ship localed to core_object orbit
local argument = game_time / player_ship.orbital_radius^1.337 * orbital_speed_constant * core_object.radar_size^2 + player_ship.rotation_offset
if (argument == math.huge) or (argument ~= argument) then
argument = 0
end
player_ship.position_x, player_ship.position_y = core_object.position_x + player_ship.orbital_radius * math.cos(argument), core_object.position_y + player_ship.orbital_radius * math.sin(argument)
else
player_ship.orbital_radius = nil
player_ship.rotation_offset = nil
end
-- TODO make this toggleable instead of requiring holding a key
if love.keyboard.isDown("space") then
@@ -285,7 +295,9 @@ function love.draw()
love.graphics.translate(camera_offset.x, camera_offset.y)
love.graphics.rectangle("line", player_ship.position_x - player_ship.radar_size / 2, player_ship.position_y - player_ship.radar_size / 2, player_ship.radar_size, player_ship.radar_size)
love.graphics.circle("line", 0, 0, player_ship.orbital_radius)
if player_ship.orbital_radius then
love.graphics.circle("line", 0, 0, player_ship.orbital_radius)
end
local draw_object
draw_object = function(current_object, parent_x, parent_y)
@@ -351,6 +363,7 @@ function love.keypressed(key)
transfer_cargo(player_ship, nil, "warp fuel", 5)
player_ship.position_x = screen_width / 2
player_ship.position_y = screen_height / 2
-- WARNING currently broken because the core_object isn't updated
resource_points = {}
add_resource_points(love.math.random(5))
end