From 20ba0011fa698d3a05199c92f134ede4313d14cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Wisniewski?= Date: Fri, 14 Aug 2026 22:30:19 +0200 Subject: [PATCH] Slow logistics vessel travel --- GameState.gd | 9 ++++-- InterceptorVesselDefinition.tres | 2 +- ShieldVesselDefinition.tres | 2 +- TransporterVesselDefinition.tres | 2 +- tests/_extractor_transfer_preview.gd.uid | 1 + tests/test_extractor_transfer.gd.uid | 1 + tests/test_logistics_travel_speed.gd | 37 ++++++++++++++++++++++++ tests/test_logistics_travel_speed.gd.uid | 1 + 8 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 tests/_extractor_transfer_preview.gd.uid create mode 100644 tests/test_extractor_transfer.gd.uid create mode 100644 tests/test_logistics_travel_speed.gd create mode 100644 tests/test_logistics_travel_speed.gd.uid diff --git a/GameState.gd b/GameState.gd index c6687ee..db77793 100644 --- a/GameState.gd +++ b/GameState.gd @@ -368,7 +368,7 @@ var stored_vessels: Array = [] # hangar. State is authoritative here so delivery continues off-screen. # {"type", "from", "to", "progress"} var vessel_deliveries: Array = [] -const VESSEL_DELIVERY_SPEED: float = 950.0 +const VESSEL_DELIVERY_SPEED: float = 180.0 signal order_completed(building_id: int, type: String) @@ -436,7 +436,7 @@ const SHIP_BASE_ACCEL: float = 450.0 const SHIELD_BASE_CHARGES: int = 1 const SHIELD_BASE_RECHARGE: float = 6.0 const TRANSPORTER_BASE_LOAD: int = 20 -const TRANSPORTER_BASE_SPEED: float = 340.0 +const TRANSPORTER_BASE_SPEED: float = 150.0 var vessel_levels: Dictionary = {} @@ -987,7 +987,10 @@ func _advance_vessel_deliveries(delta: float) -> void: for i in range(vessel_deliveries.size() - 1, -1, -1): var delivery: Dictionary = vessel_deliveries[i] var distance: float = (delivery.from as Vector2).distance_to(delivery.to as Vector2) - delivery.progress = float(delivery.progress) + delta / maxf(distance / VESSEL_DELIVERY_SPEED, 0.001) + var delivery_speed: float = vessel_stat(String(delivery.type), "delivery_speed") + if delivery_speed <= 0.0: + delivery_speed = VESSEL_DELIVERY_SPEED + delivery.progress = float(delivery.progress) + delta / maxf(distance / delivery_speed, 0.001) if float(delivery.progress) >= 1.0: stored_vessels.append(String(delivery.type)) vessel_deliveries.remove_at(i) diff --git a/InterceptorVesselDefinition.tres b/InterceptorVesselDefinition.tres index a18f6c4..0a0d45b 100644 --- a/InterceptorVesselDefinition.tres +++ b/InterceptorVesselDefinition.tres @@ -16,5 +16,5 @@ icon = 2 glow_color = Color(0.25, 0.85, 1, 1) capabilities = PackedStringArray("weapon") component_scenes = Array[PackedScene]([ExtResource("2")]) -base_stats = {"damage": 1.0, "fire_cooldown": 0.5, "fire_range": 320.0, "max_speed": 460.0, "acceleration": 450.0} +base_stats = {"damage": 1.0, "fire_cooldown": 0.5, "fire_range": 320.0, "max_speed": 460.0, "acceleration": 450.0, "delivery_speed": 180.0} upgrades = Array[Resource]([ExtResource("3"), ExtResource("4"), ExtResource("5"), ExtResource("6")]) diff --git a/ShieldVesselDefinition.tres b/ShieldVesselDefinition.tres index 9df3bf8..c2d04a9 100644 --- a/ShieldVesselDefinition.tres +++ b/ShieldVesselDefinition.tres @@ -16,7 +16,7 @@ icon = 2 glow_color = Color(0.45, 0.8, 1, 1) capabilities = PackedStringArray("weapon", "shield") component_scenes = Array[PackedScene]([ExtResource("2"), ExtResource("3")]) -base_stats = {"damage": 1.0, "fire_cooldown": 0.5, "fire_range": 320.0, "max_speed": 460.0, "acceleration": 450.0, "shield_charges": 1.0, "shield_recharge": 6.0} +base_stats = {"damage": 1.0, "fire_cooldown": 0.5, "fire_range": 320.0, "max_speed": 460.0, "acceleration": 450.0, "shield_charges": 1.0, "shield_recharge": 6.0, "delivery_speed": 180.0} minimum_stats = {"shield_recharge": 2.0} upgrades = Array[Resource]([ExtResource("4"), ExtResource("5"), ExtResource("6")]) unlock_id = "unlock_shield" diff --git a/TransporterVesselDefinition.tres b/TransporterVesselDefinition.tres index c654a48..9e82f6c 100644 --- a/TransporterVesselDefinition.tres +++ b/TransporterVesselDefinition.tres @@ -15,5 +15,5 @@ icon = 12 glow_color = Color(0.95, 0.55, 0.85, 1) capabilities = PackedStringArray("cargo", "transport") component_scenes = Array[PackedScene]([ExtResource("2"), ExtResource("3")]) -base_stats = {"max_speed": 460.0, "acceleration": 450.0, "cargo_capacity": 20.0, "transport_speed": 340.0} +base_stats = {"max_speed": 460.0, "acceleration": 450.0, "cargo_capacity": 20.0, "transport_speed": 150.0, "delivery_speed": 180.0} upgrades = Array[Resource]([ExtResource("4"), ExtResource("5")]) diff --git a/tests/_extractor_transfer_preview.gd.uid b/tests/_extractor_transfer_preview.gd.uid new file mode 100644 index 0000000..a6c6dee --- /dev/null +++ b/tests/_extractor_transfer_preview.gd.uid @@ -0,0 +1 @@ +uid://bgoci6v44t6eg diff --git a/tests/test_extractor_transfer.gd.uid b/tests/test_extractor_transfer.gd.uid new file mode 100644 index 0000000..de94ea3 --- /dev/null +++ b/tests/test_extractor_transfer.gd.uid @@ -0,0 +1 @@ +uid://bak3xyval0qsj diff --git a/tests/test_logistics_travel_speed.gd b/tests/test_logistics_travel_speed.gd new file mode 100644 index 0000000..092bad0 --- /dev/null +++ b/tests/test_logistics_travel_speed.gd @@ -0,0 +1,37 @@ +extends SceneTree + + +func _initialize() -> void: + var state: Node = root.get_node("GameState") + state.vessel_deliveries.clear() + state.transporters.clear() + state.buildings.clear() + state.reset_progression() + var delivery_speed: float = state.vessel_stat("interceptor", "delivery_speed") + var transport_speed: float = state.transporter_speed() + if delivery_speed >= 300.0 or transport_speed >= 300.0: + return _fail("logistics still rushes at delivery %.0f / transport %.0f" % [delivery_speed, transport_speed]) + + state.vessel_deliveries.append({"type": "interceptor", "from": Vector2.ZERO, + "to": Vector2(900, 0), "progress": 0.0}) + state._advance_vessel_deliveries(1.0) + var delivery_progress: float = state.vessel_deliveries[0].progress + if delivery_progress < 0.18 or delivery_progress > 0.22: + return _fail("900-unit delivery advanced %.3f in one second" % delivery_progress) + + state.transporters.append({"hub_id": 0, "state": state.TRANSPORTER_RETURNING, + "target_id": 0, "carrying": 0, "progress": 0.0, + "from": Vector2.ZERO, "to": Vector2(600, 0)}) + state._advance_transporters(1.0) + var transport_progress: float = state.transporters[0].progress + if transport_progress < 0.23 or transport_progress > 0.27: + return _fail("600-unit transport leg advanced %.3f in one second" % transport_progress) + + print("delivery %.0f u/s, transporter %.0f u/s" % [delivery_speed, transport_speed]) + print("TEST_LOGISTICS_TRAVEL_SPEED: PASS") + quit(0) + + +func _fail(message: String) -> void: + print("TEST_LOGISTICS_TRAVEL_SPEED: FAIL (%s)" % message) + quit(1) diff --git a/tests/test_logistics_travel_speed.gd.uid b/tests/test_logistics_travel_speed.gd.uid new file mode 100644 index 0000000..bbffc07 --- /dev/null +++ b/tests/test_logistics_travel_speed.gd.uid @@ -0,0 +1 @@ +uid://cmrsrj2j5yblk