diff --git a/src/main.lua b/src/main.lua index cffdd2f..64d4af9 100644 --- a/src/main.lua +++ b/src/main.lua @@ -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)