Randoloot/tests/levels/mining_network_test.gd
2026-10-19 22:58:37 +02:00

88 lines
4.3 KiB
GDScript

extends Node
const NETWORK := preload("res://scripts/planets/mining_network.gd")
const PROGRESS := preload("res://scripts/planets/planet_progress.gd")
const PROFILES := preload("res://scripts/planets/planet_profiles.gd")
func _ready() -> void:
GameState.start_new_run()
GameState.set_process(false)
var captain: Resource = GameState.captain
var progress: Resource = captain.expedition
assert(progress.freighter_rooms.expansion_3 == "module_storage")
var profiles: Array[Dictionary] = []
var deposits := 0
for index in 1000:
var profile := PROFILES.generate(87654, index, "Planeta %d" % index)
profiles.append(profile)
deposits += int(NETWORK.has_deep_deposit(profile))
assert(NETWORK.has_deep_deposit(profile) == NETWORK.has_deep_deposit(profile.duplicate(true)))
var easy: Dictionary = profile.duplicate(true)
var hard: Dictionary = profile.duplicate(true)
easy.difficulty = 0
hard.difficulty = 1
assert(NETWORK.recruit(easy).management in range(1, 21))
assert(NETWORK.recruit(hard).management in range(81, 101))
assert(deposits > 540 and deposits < 660)
var source: Dictionary = profiles.filter(func(p): return NETWORK.has_recruit(p) and NETWORK.has_deep_deposit(p))[0]
assert(not NETWORK.hire(progress, source))
progress.freighter_rooms.cabin_1 = "crew_cabin"
assert(NETWORK.hire(progress, source))
assert(not NETWORK.hire(progress, source))
var member: Dictionary = NETWORK.cabin_crew(progress, "cabin_1")
assert(not member.is_empty() and NETWORK.free_cabin(progress).is_empty())
captain.parts = 199
assert(not NETWORK.build(progress, captain, source, 1) and captain.parts == 199)
captain.parts = 400
assert(NETWORK.build(progress, captain, source, 1) and captain.parts == 200)
assert(not NETWORK.build(progress, captain, source, 1) and captain.parts == 200)
assert(NETWORK.advance(progress, 600) == 0 and progress.deuter == 0)
assert(NETWORK.assign(progress, source.id, member.id))
var expected: float = 1 + int(member.management)
NETWORK.advance(progress, 30)
assert(is_equal_approx(progress.deuter, expected * 0.5))
NETWORK.advance(progress, 30)
assert(is_equal_approx(progress.deuter, expected))
var second: Dictionary = profiles.filter(func(p): return NETWORK.has_deep_deposit(p) and p.id != source.id)[0]
assert(NETWORK.build(progress, captain, second, 2) and captain.parts == 0)
assert(NETWORK.assign(progress, second.id, member.id))
assert(progress.mining_stations[source.id].crew_id == "")
assert(NETWORK.total_rate(progress) == expected)
assert(not NETWORK.assign(progress, source.id, "unknown"))
var path := "res://tmp/mining_roundtrip.tres"
assert(ResourceSaver.save(progress, path) == OK)
var restored: Resource = ResourceLoader.load(path, "", ResourceLoader.CACHE_MODE_IGNORE)
assert(restored.deuter == progress.deuter and restored.crew == progress.crew and restored.mining_stations == progress.mining_stations)
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
game.set_physics_process(false)
game.player.set_physics_process(false)
for enemy in get_tree().get_nodes_in_group("enemies"): enemy.set_physics_process(false)
var before: float = progress.deuter
GameState.advance_play_time(60, game)
assert(is_equal_approx(progress.deuter - before, expected))
get_tree().paused = true
before = progress.deuter
GameState.advance_play_time(60, game)
assert(progress.deuter == before)
var expeditions := game.get_node("PlanetExpeditions")
expeditions.open_freighter()
GameState.advance_play_time(60, game)
assert(is_equal_approx(progress.deuter - before, expected))
expeditions._leave()
assert(progress.begin_visit(source))
expeditions._enter()
expeditions.screen = Control.new()
expeditions._layer.add_child(expeditions.screen)
before = progress.deuter
GameState.advance_play_time(60, game)
assert(is_equal_approx(progress.deuter - before, expected))
progress.finish_visit(captain, true)
assert(NETWORK.dismiss(progress, member.id))
assert(NETWORK.total_rate(progress) == 0 and NETWORK.free_cabin(progress) == "cabin_1")
assert(not NETWORK.hire(progress, source))
expeditions._leave()
get_tree().paused = false
game.free()
print("MINING_NETWORK_TEST_OK: 60%% stable sites (%d/1000), rating 1-100 by biome, cabins, hiring, 200 parts, assignment, 1+rating/min, game-time clock and pause, dismissal, resource persistence" % deposits)
get_tree().quit()