This commit is contained in:
2025-11-27 02:40:12 -07:00
parent 52f49377a6
commit 37144f2fc3
+68
View File
@@ -1,4 +1,5 @@
local screen_width, screen_height = love.graphics.getDimensions()
math.randomseed(os.time())
local player_ship = {
position_x = screen_width / 2,
@@ -6,9 +7,37 @@ local player_ship = {
velocity_x = 0,
velocity_y = 0,
acceleration = 100,
radar_size = 10,
cargo_free_space = 100,
cargo_contents = {},
cargo_fill_speed = 10,
}
local resource_points = {}
for i = 1, 3 do
local resource_point = {
position_x = math.random() * screen_width,
position_y = math.random() * screen_height,
radar_size = 10,
cargo_free_space = 100000,
cargo_contents = {},
}
local cargo_types = { "iron ore", "copper ore", }
local selected_type = cargo_types[math.random(2)]
local cargo_amount = math.random() * 10000
resource_point.cargo_contents[selected_type] = cargo_amount
resource_point.cargo_free_space = resource_point.cargo_free_space - cargo_amount
-- TODO make sure it is not placed on top of another one or too close
table.insert(resource_points, resource_point)
end
-- The player can hold a button to collect those resources and store them on their ship.
function love.update(dt)
if love.keyboard.isDown("w") then
player_ship.velocity_y = player_ship.velocity_y - player_ship.acceleration * dt
@@ -25,12 +54,51 @@ 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
if love.keyboard.isDown("space") then
local selected_point, distance_to_point = nil, math.huge
for i = 1, #resource_points do
local resource_point = resource_points[i]
local distance_squared = (player_ship.position_x - resource_point.position_x)^2 + (player_ship.position_y - resource_point.position_y)^2
if distance_squared < distance_to_point then
selected_point = resource_point
distance_to_point = distance_squared
end
end
if distance_to_point > selected_point.radar_size^2 then
print("Too far to pick up cargo.")
return
end
if player_ship.cargo_free_space <= 0 then
print("No cargo space left.")
return
end
local cargo_type = next(selected_point.cargo_contents)
local cargo_amount = math.min(player_ship.cargo_fill_speed * dt, selected_point.cargo_contents[cargo_type])
if cargo_amount <= 0 then
print("There is no cargo to pick up.")
return
end
if not player_ship.cargo_contents[cargo_type] then
player_ship.cargo_contents[cargo_type] = 0
end
player_ship.cargo_contents[cargo_type] = player_ship.cargo_contents[cargo_type] + cargo_amount
player_ship.cargo_free_space = player_ship.cargo_free_space - cargo_amount
selected_point.cargo_contents[cargo_type] = selected_point.cargo_contents[cargo_type] - cargo_amount
selected_point.cargo_free_space = selected_point.cargo_free_space + cargo_amount
print("Transfered " .. cargo_amount .. " " .. cargo_type .. ".")
end
end
function love.draw()
love.graphics.setColor(1, 1, 1, 1)
-- love.graphics.circle("fill", player_ship.position_x, player_ship.position_y, 5)
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)
for i = 1, #resource_points do
local resource_point = resource_points[i]
love.graphics.circle("line", resource_point.position_x, resource_point.position_y, resource_point.radar_size)
end
end
function love.keypressed(key)