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

154 lines
7.0 KiB
GDScript

extends Node
const GEAR := preload("res://scripts/planets/captain_equipment.gd")
const PROFILES := preload("res://scripts/planets/planet_profiles.gd")
const SURFACE := preload("res://scripts/planets/surface_generator.gd")
func _ready() -> void:
var captain: Resource = preload("res://scripts/captain/captain_progress.gd").new()
assert(captain.gear_items.size() == 3)
for kind in GEAR.KINDS:
assert(GEAR.level(captain,kind) == 1)
assert(not GEAR.equip(captain,"suit",1))
var easy := 0
for index in 1000:
var profile: Dictionary = PROFILES.generate(821,index,"Test")
if profile.easy:
easy += 1
assert(profile.oxygen > 80 and profile.temperature >= -10 and profile.temperature <= 40 and profile.flora == 0)
assert(profile.landing_damage >= 5 and profile.landing_damage <= 20)
assert(easy > 640 and easy < 760)
var profile: Dictionary = PROFILES.generate(821,0,"Test")
var state: Resource = captain.expedition
assert(state.begin_visit(profile))
var seed1: int = state.visit_seed
state.add_material("silicon",12)
var before := int(captain.minerals.get("silicon",0))
assert(int(captain.minerals.get("silicon",0)) == before)
state.finish_visit(captain,true)
assert(captain.minerals.silicon == before+12)
state.finish_visit(captain,true)
assert(captain.minerals.silicon == before+12)
assert(not state.begin_visit(profile))
captain.parts = 300
var parts_before: int = captain.parts
var cost: int = state.repair_cost()
assert(state.repair(captain))
assert(captain.parts == parts_before-cost)
assert(state.begin_visit(profile))
assert(state.visit_seed != seed1)
state.add_material("silicon",100)
state.damage(100)
state.finish_visit(captain,true)
assert(captain.minerals.silicon == before+12)
assert(state.repair_cost() == 100)
assert(state.repair(captain))
for key in ["silicon","copper","nickel","iron","tungsten","titanium"]:
captain.minerals[key] = 200
var crafted: Dictionary = GEAR.craft(captain,"breathing")
assert(crafted.level == 2)
assert(GEAR.level(captain,"breathing") == 1)
assert(GEAR.equip(captain,"breathing",crafted.uid))
assert(GEAR.level(captain,"breathing") == 2)
var world: Dictionary = SURFACE.generate(11447,profile)
assert(world.pois.size() >= 8 and world.pois.size() <= 16 and world.trees.size() > 0 and world.mountains.size() > 0 and world.structures.size() > 0)
assert(SURFACE.generate(11447,profile).pois == world.pois)
assert(SURFACE.generate(11448,profile).pois != world.pois)
for seed_value in 100:
var system: Dictionary = preload("res://scripts/levels/system_generator.gd").generate(1+seed_value%50,seed_value+711)
var landable := 0
for planet in system.planets:
if planet.earthlike:
landable += 1
assert(PROFILES.is_earthlike(planet.texture))
if planet.protected:
assert(planet.earthlike and not planet.profile.is_empty())
assert(landable >= 1)
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
await get_tree().process_frame
var manager := game.get_node("PlanetExpeditions")
var player := game.get_node("PlayerShip")
for enemy in get_tree().get_nodes_in_group("enemies"):
enemy.position = Vector2(9999,9999)
player.position = manager.freighter.position
await get_tree().process_frame
player.landing_combat_lock = 6
manager._process(0)
manager.land_nearby()
assert(manager.screen == null and not get_tree().paused)
player.landing_combat_lock = 0
var blocker := get_tree().get_first_node_in_group("enemies")
blocker.position = player.position + Vector2(200,0)
assert(manager.combat_blocked())
manager.land_nearby()
assert(manager.screen == null)
blocker.position = Vector2(9999,9999)
assert(not manager.combat_blocked())
var inventory: ShipInventory = player.get_node("ShipInventory")
var module := preload("res://scripts/items/item_generator.gd").generate_loot(1,0)
for slot in 20:
inventory.cargo[slot] = module
GameState.captain.expedition.delivered_modules.append(module)
assert(GameState.captain.expedition.deliver_modules(inventory) == 0)
assert(GameState.captain.expedition.delivered_modules.size() == 1)
inventory.cargo[0] = null
assert(GameState.captain.expedition.deliver_modules(inventory) == 1)
assert(GameState.captain.expedition.delivered_modules.is_empty())
var gear_panel := game.get_node("HUD/HUDRoot/CaptainEquipment")
var breathing_slot: Control = gear_panel._wardrobe.find_child("BreathingSlot",true,false)
var suit_slot: Control = gear_panel._wardrobe.find_child("SuitSlot",true,false)
GameState.captain.parts = 500
GameState.captain.minerals.silicon = 500
GameState.captain.minerals.copper = 500
var upgrade: Dictionary = GEAR.craft(GameState.captain,"breathing")
assert(breathing_slot._can_drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid}))
assert(not suit_slot._can_drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid}))
assert(not breathing_slot._can_drop_data(Vector2.ZERO,{"item":module}))
breathing_slot._drop_data(Vector2.ZERO,{"captain_gear":upgrade.uid})
assert(GEAR.level(GameState.captain,"breathing") == 2)
manager.land_nearby()
assert(get_tree().paused and player.is_docked)
assert(manager.screen != null)
manager.screen._tab = "workshop"
manager.screen._refresh()
manager.screen._tab = "lab"
manager.screen._refresh()
manager._leave()
assert(not get_tree().paused and not player.is_docked)
player.position = game.protected_planet.position
await get_tree().process_frame
manager.scan_nearby()
manager.land_nearby()
assert(get_tree().paused and GameState.captain.expedition.active)
assert(manager.screen.world.data.pois.size() >= 8 and manager.screen.world.data.pois.size() <= 16)
assert(manager.screen.planet_texture == manager._near_planet.body_texture)
assert(manager.screen._telemetry.portrait.texture == manager._near_planet.body_texture)
for poi in manager.screen.world.data.pois:
manager.screen._poi = poi
manager.screen._show_poi()
assert(manager.screen._dialog.visible)
manager.screen.lander.position = manager.screen.world.data.pois[0].position
manager.screen._poi = manager.screen.world.data.pois[0]
manager.screen._show_poi()
manager.screen._attempt()
var missiles_before := inventory.missile_ammunition
var credits_before := GameState.captain.credits
var owned_parts_before := GameState.captain.parts
var ammo_before := inventory.ammunition
var irradiated_before := inventory.irradiated_ammunition
GameState.captain.expedition.add_material("ammunition",100)
GameState.captain.expedition.add_material("irradiated_ammunition",20)
GameState.captain.expedition.cargo_missiles = 3
GameState.captain.expedition.cargo_credits = 23
GameState.captain.expedition.cargo_parts = 4
manager.finish_surface(true)
assert(inventory.missile_ammunition == missiles_before+3)
assert(GameState.captain.credits == credits_before+23)
assert(GameState.captain.parts == owned_parts_before+4)
assert(inventory.ammunition >= ammo_before+100)
assert(inventory.irradiated_ammunition == irradiated_before+20)
assert(not get_tree().paused)
game.queue_free()
await get_tree().process_frame
print("PLANET EXPEDITIONS PASS: profiles, transactions, failure, repairs, gear, maps, docking, workshop, scanning, surface, return")
get_tree().quit()