trying to add documentation and split source into logical files

This commit is contained in:
2026-04-20 18:31:32 -06:00
parent 8c3a15a73f
commit b824bf8c0c
4 changed files with 162 additions and 107 deletions
+11
View File
@@ -28,3 +28,14 @@ code, so issues are being tracked *in* the repo - here.
2. ✅ Resource points. The player can hold a button to collect those resources and store them on their ship.
3. ✅ The resources collected by the player can be spent on something, like improving the ship. Speed, capacity, collection speed, etc.
4. Imagine why you are out there collecting resources. Is someone directing you? Are you a freelancer? Is the universe dead? Are you preparing for something? Etc.
## Documentation
### Cargo Handling
- `transfer_cargo(source_object, destination_object, cargo_type, cargo_amount)`: Returns actual amount transferred. Source/Destination can be nil to create/destroy resources.
- `check_cargo_amount(source_object, cargo_type, cargo_amount)`: true/false Does that object have that amount of that cargo?
### Finding Objects
- `get_closest_object(object_list, current_object)`: Requires `position_x` and `position_y` on objects. Returns an object and distance squared to it.
- `get_closest_orbit(object_list, current_object)`: Deprecated.
- `get_closest_orbit2(current_object)`: Uses `parent_object` and `orbital_radius` to find the closest orbit to `current_object`'s orbit.
+62
View File
@@ -0,0 +1,62 @@
local cargo_handling = {}
cargo_handling.transfer_cargo = function(source_object, destination_object, cargo_type, cargo_amount)
-- source_object and destination_object can be nil to create/delete resources
-- returns cargo_amount (actual amount transferred)
if not source_object then
source_object = { cargo_contents = { [cargo_type] = math.huge }, cargo_free_space = 0, }
end
if not destination_object then
destination_object = { cargo_contents = {}, cargo_free_space = math.huge, }
end
if (not source_object.cargo_contents) or (not source_object.cargo_contents[cargo_type]) then
return 0
end
if not destination_object.cargo_contents then
destination_object.cargo_contents = {}
destination_object.cargo_free_space = 0
end
if not destination_object.cargo_contents[cargo_type] then
destination_object.cargo_contents[cargo_type] = 0
end
if cargo_amount > source_object.cargo_contents[cargo_type] then
cargo_amount = source_object.cargo_contents[cargo_type]
end
if cargo_amount > destination_object.cargo_free_space then
cargo_amount = destination_object.cargo_free_space
end
destination_object.cargo_contents[cargo_type] = destination_object.cargo_contents[cargo_type] + cargo_amount
destination_object.cargo_free_space = destination_object.cargo_free_space - cargo_amount
source_object.cargo_contents[cargo_type] = source_object.cargo_contents[cargo_type] - cargo_amount
source_object.cargo_free_space = source_object.cargo_free_space + cargo_amount
if source_object.cargo_contents[cargo_type] <= 0 then
source_object.cargo_contents[cargo_type] = nil
end
if destination_object.cargo_contents[cargo_type] <= 0 then
destination_object.cargo_contents[cargo_type] = nil
end
return cargo_amount
end
cargo_handling.check_cargo_amount = function(source_object, cargo_type, cargo_amount)
-- returns true/false: Does that object have that amount of that cargo?
if not source_object.cargo_contents then
return false
end
if not source_object.cargo_contents[cargo_type] then
return false
end
if source_object.cargo_contents[cargo_type] >= cargo_amount then
return true
end
return false
end
return cargo_handling
+72
View File
@@ -0,0 +1,72 @@
local finding_objects = {}
finding_objects.get_closest_object = function(object_list, current_object)
-- returns selected_object, distance_squared_to_object (if object_list is empty, returns nil, math.huge)
local selected_object, distance_squared_to_object = nil, math.huge
for i = 1, #object_list do
local function compare_object()
local comparison_object = object_list[i]
if comparison_object == current_object then
return
end
local comparison_distance_squared = (current_object.position_x - comparison_object.position_x)^2 + (current_object.position_y - comparison_object.position_y)^2
if comparison_distance_squared < distance_squared_to_object then
selected_object = comparison_object
distance_squared_to_object = comparison_distance_squared
end
end
compare_object()
end
return selected_object, distance_squared_to_object
end
-- DEPRECATED
finding_objects.get_closest_orbit = function(object_list, current_object)
-- returns selected_object, distance_to_orbit (if object_list is empty, returns nil, math.huge)
-- object_list must be of objects orbiting the same parent_object or results will be wrong
local selected_object, distance_to_orbit = nil, math.huge
for i = 1, #object_list do
local function compare_object()
local comparison_object = object_list[i]
if comparison_object == current_object then
return
end
local comparison_distance = math.abs(current_object.orbital_radius - comparison_object.orbital_radius)
if comparison_distance < distance_to_orbit then
selected_object = comparison_object
distance_to_orbit = comparison_distance
end
end
compare_object()
end
return selected_object, distance_to_orbit
end
finding_objects.get_closest_orbit2 = function(current_object)
-- returns selected_object, distance_to_orbit (if there are none, returns nil, math.huge)
local object_list = current_object.parent_object.child_objects
local selected_object, distance_to_orbit = nil, math.huge
for i = 1, #object_list do
local function compare_object()
local comparison_object = object_list[i]
if comparison_object == current_object then
return
end
local comparison_distance = math.abs(current_object.orbital_radius - comparison_object.orbital_radius)
if comparison_distance < distance_to_orbit then
selected_object = comparison_object
distance_to_orbit = comparison_distance
end
end
compare_object()
end
return selected_object, distance_to_orbit
end
return finding_objects
+17 -107
View File
@@ -4,104 +4,13 @@ love.math.setRandomSeed(os.time())
-- TODO make an object generator that adds all required properties with a default value
-- returns selected_object, distance_squared_to_object (if object_list is empty, returns nil, math.huge)
local function get_closest_object(object_list, current_object)
local selected_object, distance_squared_to_object = nil, math.huge
for i = 1, #object_list do
local function compare_object()
local comparison_object = object_list[i]
if comparison_object == current_object then
return
end
local comparison_distance_squared = (current_object.position_x - comparison_object.position_x)^2 + (current_object.position_y - comparison_object.position_y)^2
if comparison_distance_squared < distance_squared_to_object then
selected_object = comparison_object
distance_squared_to_object = comparison_distance_squared
end
end
compare_object()
end
local finding_objects = require "finding_objects"
local get_closest_object = finding_objects.get_closest_object
local get_closest_orbit = finding_objects.get_closest_orbit
return selected_object, distance_squared_to_object
end
-- returns selected_object, distance_to_orbit (if object_list is empty, returns nil, math.huge)
-- object_list must be of objects orbiting the same parent_object or results will be wrong
local function get_closest_orbit(object_list, current_object)
local selected_object, distance_to_orbit = nil, math.huge
for i = 1, #object_list do
local function compare_object()
local comparison_object = object_list[i]
if comparison_object == current_object then
return
end
local comparison_distance = math.abs(current_object.orbital_radius - comparison_object.orbital_radius)
if comparison_distance < distance_to_orbit then
selected_object = comparison_object
distance_to_orbit = comparison_distance
end
end
compare_object()
end
return selected_object, distance_to_orbit
end
-- source_object and destination_object can be nil to create/delete resources
-- returns cargo_amount (actual amount transferred)
local function transfer_cargo(source_object, destination_object, cargo_type, cargo_amount)
if not source_object then
source_object = { cargo_contents = { [cargo_type] = math.huge }, cargo_free_space = 0, }
end
if not destination_object then
destination_object = { cargo_contents = {}, cargo_free_space = math.huge, }
end
if (not source_object.cargo_contents) or (not source_object.cargo_contents[cargo_type]) then
return 0
end
if not destination_object.cargo_contents then
destination_object.cargo_contents = {}
destination_object.cargo_free_space = 0
end
if not destination_object.cargo_contents[cargo_type] then
destination_object.cargo_contents[cargo_type] = 0
end
if cargo_amount > source_object.cargo_contents[cargo_type] then
cargo_amount = source_object.cargo_contents[cargo_type]
end
if cargo_amount > destination_object.cargo_free_space then
cargo_amount = destination_object.cargo_free_space
end
destination_object.cargo_contents[cargo_type] = destination_object.cargo_contents[cargo_type] + cargo_amount
destination_object.cargo_free_space = destination_object.cargo_free_space - cargo_amount
source_object.cargo_contents[cargo_type] = source_object.cargo_contents[cargo_type] - cargo_amount
source_object.cargo_free_space = source_object.cargo_free_space + cargo_amount
if source_object.cargo_contents[cargo_type] <= 0 then
source_object.cargo_contents[cargo_type] = nil
end
if destination_object.cargo_contents[cargo_type] <= 0 then
destination_object.cargo_contents[cargo_type] = nil
end
return cargo_amount
end
local function check_cargo_amount(source_object, cargo_type, cargo_amount)
if not source_object.cargo_contents then
return false
end
if not source_object.cargo_contents[cargo_type] then
return false
end
if source_object.cargo_contents[cargo_type] >= cargo_amount then
return true
end
return false
end
local cargo_handling = require "cargo_handling"
local transfer_cargo = cargo_handling.transfer_cargo
local check_cargo_amount = cargo_handling.check_cargo_amount
local ore_types = { "iron ore", "copper ore", "warp fuel", }
@@ -161,6 +70,10 @@ local function make_resource_point(x, y)
return true
end
-- DEBUG hardcoded points to compare against
make_resource_point(15, 0)
make_resource_point(screen_width / 2 - 10, 0)
local function add_resource_points(point_count)
for i = 1, point_count do
if not make_resource_point() then
@@ -169,14 +82,11 @@ local function add_resource_points(point_count)
end
end
add_resource_points(8)
-- DEBUG hardcoded points to compare against (except they can still fail to spawn if something else is too close)
make_resource_point(15, 0)
make_resource_point(screen_width / 2 - 10, 0)
-- NOTE this object doesn't have "necessary" values because it isn't in resource_points
local core_object = {
position_x = 0, position_y = 0, orbital_radius = 0, radar_size = 7, rotation_offset = 0,
children = resource_points, -- TEMP all objects are orbitng the core_object
child_objects = resource_points, -- TEMP all objects are orbitng the core_object
}
local last_message = ""
@@ -194,9 +104,9 @@ function love.update(dt)
argument = 0
end
current_object.position_x, current_object.position_y = parent_x + current_object.orbital_radius * math.cos(argument), parent_y + current_object.orbital_radius * math.sin(argument)
if current_object.children then
for i = 1, #current_object.children do
update_object_position(current_object.children[i], current_object.position_x, current_object.position_y, current_object.radar_size^2)
if current_object.child_objects then
for i = 1, #current_object.child_objects do
update_object_position(current_object.child_objects[i], current_object.position_x, current_object.position_y, current_object.radar_size^2)
end
end
end
@@ -309,9 +219,9 @@ function love.draw()
draw_object = function(current_object, parent_x, parent_y)
love.graphics.circle("fill", current_object.position_x, current_object.position_y, math.max(current_object.radar_size, 0.8))
love.graphics.circle("line", parent_x, parent_y, current_object.orbital_radius)
if current_object.children then
for i = 1, #current_object.children do
draw_object(current_object.children[i], current_object.position_x, current_object.position_y)
if current_object.child_objects then
for i = 1, #current_object.child_objects do
draw_object(current_object.child_objects[i], current_object.position_x, current_object.position_y)
end
end
end