106 lines
4.2 KiB
GDScript
106 lines
4.2 KiB
GDScript
extends Node2D
|
|
const POI = preload("res://scripts/levels/exploration_poi.gd")
|
|
|
|
class PlanetStub:
|
|
extends Node2D
|
|
var radius := 100.0
|
|
|
|
func _ready() -> void:
|
|
GameState.start_new_run()
|
|
var ship = preload("res://scenes/game/player_ship.tscn").instantiate()
|
|
ship.name = "PlayerShip"
|
|
add_child(ship)
|
|
ship.set_physics_process(false)
|
|
ship.get_node("WeaponController").set_physics_process(false)
|
|
var inv = ship.get_node("ShipInventory")
|
|
for kind in ["wreck", "asteroid", "ruin"]:
|
|
for index in 12:
|
|
var poi = StaticBody2D.new()
|
|
poi.set_script(POI)
|
|
poi.kind = kind
|
|
poi.player = ship
|
|
poi.reward_seed = index + 1
|
|
poi.poi_id = kind + str(index)
|
|
add_child(poi)
|
|
if kind == "asteroid":
|
|
assert(poi.has_node("AsteroidSprite"))
|
|
assert(poi.get_node("AsteroidSprite").texture is Texture2D)
|
|
var asteroid = poi.get_node("AsteroidSprite")
|
|
assert(asteroid.texture == poi.ASTEROID_TEXTURES[poi._mineral])
|
|
assert(not poi._label.visible and poi._label.text.is_empty())
|
|
var minerals_before := GameState.captain.minerals.duplicate()
|
|
var previous_rotation = asteroid.rotation
|
|
poi._process(1.0)
|
|
assert(not is_equal_approx(asteroid.rotation, previous_rotation))
|
|
assert(absf(asteroid.rotation - previous_rotation) < 0.1)
|
|
assert(poi.rotation == 0.0)
|
|
poi.take_weapon_hit(poi.hull - 1)
|
|
assert(not poi._claimed and is_equal_approx(poi.hull, 1))
|
|
poi.take_weapon_hit(1)
|
|
assert(poi._claimed)
|
|
for mineral in minerals_before:
|
|
if mineral == poi._mineral:
|
|
assert(GameState.captain.minerals[mineral] > minerals_before[mineral])
|
|
else:
|
|
assert(GameState.captain.minerals[mineral] == minerals_before[mineral])
|
|
else:
|
|
if kind == "wreck":
|
|
assert(poi.has_node("WreckSprite"))
|
|
assert(poi.WRECK_TEXTURES.has(poi.get_node("WreckSprite").texture))
|
|
assert(poi.claim())
|
|
assert(not poi.claim())
|
|
await get_tree().process_frame
|
|
assert(GameState.captain.parts > 0)
|
|
assert(inv.ammunition > 50 and inv.missile_ammunition > 2)
|
|
assert(GameState.captain.minerals.iron + GameState.captain.minerals.titanium + GameState.captain.minerals.aluminium > 0)
|
|
var ancient = 0
|
|
var modules: Array = inv.cargo.filter(func(item): return item != null)
|
|
for loot in get_tree().get_nodes_in_group("loot"):
|
|
modules.append(loot.item)
|
|
for item in modules:
|
|
if item.item_level == 2:
|
|
ancient += 1
|
|
if item.definition.category == ItemDefinition.Category.ACTIVE_EXTENSION:
|
|
assert(item.get_addon_count() == 0)
|
|
else:
|
|
assert(item.get_addon_count() >= 4)
|
|
for modifier in item.additional_modifiers:
|
|
var bounds = modifier.affix.get_value_range(2)
|
|
assert(modifier.value >= lerpf(bounds.x, bounds.y, 0.9) - 0.00001)
|
|
assert(ancient == 12)
|
|
var discovery = StaticBody2D.new()
|
|
discovery.set_script(POI)
|
|
discovery.kind = "ruin"
|
|
discovery.player = ship
|
|
discovery.poi_id = "auto-discovery"
|
|
discovery.position = Vector2(1000, 0)
|
|
discovery.approach_radius = 200
|
|
add_child(discovery)
|
|
assert(discovery._label.text == "?")
|
|
discovery._physics_process(0)
|
|
assert(not discovery._claimed)
|
|
ship.position = Vector2(810, 0)
|
|
discovery._physics_process(0)
|
|
assert(discovery._claimed and GameState.explored_pois.has("auto-discovery"))
|
|
assert(not discovery.claim())
|
|
var data = preload("res://scripts/levels/system_generator.gd").generate(1, 1234)
|
|
var bodies = Node2D.new()
|
|
bodies.name = "CelestialBodies"
|
|
add_child(bodies)
|
|
for index in data["planets"].size():
|
|
var planet := PlanetStub.new()
|
|
planet.name = "Planet%d" % (index + 1)
|
|
planet.position = data["planets"][index]["position"]
|
|
planet.radius = data["planets"][index]["radius"]
|
|
bodies.add_child(planet)
|
|
preload("res://scripts/levels/exploration_generator.gd").spawn(self, data, ship)
|
|
var generated = get_tree().get_nodes_in_group("exploration_pois").filter(func(p): return not p.is_queued_for_deletion())
|
|
assert(generated.size() >= 8 and generated.size() <= 15)
|
|
var probe = generated[0]
|
|
assert(probe.reward_scale() == 1.0)
|
|
GameState.system_level = 10
|
|
assert(is_equal_approx(probe.reward_scale(), 1.45))
|
|
GameState.system_level = 1
|
|
print("EXPLORATION_TEST: PASS rewards, duplicate prevention, ore textures match mined minerals, hidden asteroid labels, ancient level+1 and high addons, generation")
|
|
get_tree().quit()
|