Slow logistics vessel travel

This commit is contained in:
Loïc Wisniewski 2026-08-14 22:30:19 +02:00
commit 20ba0011fa
8 changed files with 49 additions and 6 deletions

View file

@ -368,7 +368,7 @@ var stored_vessels: Array = []
# hangar. State is authoritative here so delivery continues off-screen. # hangar. State is authoritative here so delivery continues off-screen.
# {"type", "from", "to", "progress"} # {"type", "from", "to", "progress"}
var vessel_deliveries: Array = [] 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) 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_CHARGES: int = 1
const SHIELD_BASE_RECHARGE: float = 6.0 const SHIELD_BASE_RECHARGE: float = 6.0
const TRANSPORTER_BASE_LOAD: int = 20 const TRANSPORTER_BASE_LOAD: int = 20
const TRANSPORTER_BASE_SPEED: float = 340.0 const TRANSPORTER_BASE_SPEED: float = 150.0
var vessel_levels: Dictionary = {} 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): for i in range(vessel_deliveries.size() - 1, -1, -1):
var delivery: Dictionary = vessel_deliveries[i] var delivery: Dictionary = vessel_deliveries[i]
var distance: float = (delivery.from as Vector2).distance_to(delivery.to as Vector2) 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: if float(delivery.progress) >= 1.0:
stored_vessels.append(String(delivery.type)) stored_vessels.append(String(delivery.type))
vessel_deliveries.remove_at(i) vessel_deliveries.remove_at(i)

View file

@ -16,5 +16,5 @@ icon = 2
glow_color = Color(0.25, 0.85, 1, 1) glow_color = Color(0.25, 0.85, 1, 1)
capabilities = PackedStringArray("weapon") capabilities = PackedStringArray("weapon")
component_scenes = Array[PackedScene]([ExtResource("2")]) 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")]) upgrades = Array[Resource]([ExtResource("3"), ExtResource("4"), ExtResource("5"), ExtResource("6")])

View file

@ -16,7 +16,7 @@ icon = 2
glow_color = Color(0.45, 0.8, 1, 1) glow_color = Color(0.45, 0.8, 1, 1)
capabilities = PackedStringArray("weapon", "shield") capabilities = PackedStringArray("weapon", "shield")
component_scenes = Array[PackedScene]([ExtResource("2"), ExtResource("3")]) 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} minimum_stats = {"shield_recharge": 2.0}
upgrades = Array[Resource]([ExtResource("4"), ExtResource("5"), ExtResource("6")]) upgrades = Array[Resource]([ExtResource("4"), ExtResource("5"), ExtResource("6")])
unlock_id = "unlock_shield" unlock_id = "unlock_shield"

View file

@ -15,5 +15,5 @@ icon = 12
glow_color = Color(0.95, 0.55, 0.85, 1) glow_color = Color(0.95, 0.55, 0.85, 1)
capabilities = PackedStringArray("cargo", "transport") capabilities = PackedStringArray("cargo", "transport")
component_scenes = Array[PackedScene]([ExtResource("2"), ExtResource("3")]) 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")]) upgrades = Array[Resource]([ExtResource("4"), ExtResource("5")])

View file

@ -0,0 +1 @@
uid://bgoci6v44t6eg

View file

@ -0,0 +1 @@
uid://bak3xyval0qsj

View file

@ -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)

View file

@ -0,0 +1 @@
uid://cmrsrj2j5yblk