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