Randoloot/tests/items/shield_module_regeneration_test.gd
2026-10-26 21:06:32 +01:00

52 lines
2.7 KiB
GDScript

extends Node
const GENERATOR := preload("res://scripts/items/item_generator.gd")
const BALANCE := preload("res://scripts/levels/level_balance.gd")
func _ready() -> void:
GameState.start_new_run()
for definition in [preload("res://resources/items/reinforced_shield.tres"),preload("res://resources/items/shield_recharger.tres")]:
var legacy := ItemInstance.new()
legacy.definition = definition
assert(legacy.get_stat_total("max_shields") == definition.primary_value)
assert(legacy.get_stat_total("shield_regeneration") == 2.0)
legacy.item_level = 50
assert(is_equal_approx(legacy.get_base_shield_regeneration(),2.0*BALANCE.item_stat_scale(50)))
for level in [1,10,50,120]:
for roll in 20:
var item := GENERATOR.generate_for_definition(definition,level)
var expected := 2.0*BALANCE.item_stat_scale(level)
assert(item.get_base_shield_regeneration() >= expected*0.8-0.001)
assert(item.get_base_shield_regeneration() <= expected*1.2+0.001)
assert(item.get_tooltip_text().contains("Regeneracja tarcz:"))
var addon := ItemStatModifier.new()
addon.stat_key = "shield_regeneration"
addon.value = 1.25
legacy.additional_modifiers.append(addon)
assert(is_equal_approx(legacy.get_stat_total("shield_regeneration"),legacy.get_base_shield_regeneration()+1.25))
assert(GENERATOR.advance(legacy))
assert(legacy.item_level == 51 and legacy.shield_regeneration_override > 0.0)
assert(ResourceSaver.save(legacy,"res://tmp/shield_regen_roundtrip.tres") == OK)
var restored := ResourceLoader.load("res://tmp/shield_regen_roundtrip.tres","",ResourceLoader.CACHE_MODE_IGNORE) as ItemInstance
assert(is_equal_approx(restored.get_stat_total("shield_regeneration"),legacy.get_stat_total("shield_regeneration")))
DirAccess.remove_absolute(ProjectSettings.globalize_path("res://tmp/shield_regen_roundtrip.tres"))
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
await get_tree().process_frame
var ship := game.get_node("PlayerShip")
ship.set_physics_process(false)
var inventory: ShipInventory = ship.get_node("ShipInventory")
var item := ItemInstance.new()
item.definition = preload("res://resources/items/reinforced_shield.tres")
assert(inventory.add_item(item))
assert(inventory.move_item("cargo",inventory.cargo.find(item),"module",0))
assert(is_equal_approx(ship.max_shields,ship.base_max_shields+30.0))
assert(is_equal_approx(ship.shield_regeneration,2.0))
ship.shields = 0.0
ship._physics_process(0.5)
assert(is_equal_approx(ship.shields,1.0))
print("SHIELD MODULE REGENERATION PASS: both definitions, legacy items, level scaling, affixes, upgrade, persistence, equipped capacity and actual regeneration")
game.queue_free()
await get_tree().process_frame
get_tree().quit()