52 lines
2.7 KiB
GDScript
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()
|