154 lines
7.0 KiB
GDScript
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()
|