88 lines
4.3 KiB
GDScript
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()
|