extends Node const GENERATOR := preload("res://scripts/items/item_generator.gd") const DATABASE := preload("res://resources/items/affix_database.tres") func _ready() -> void: assert(DATABASE.affixes.size() == 8) for level in [1, 50, 1000]: for tier in [0, 1, 2]: for sample in 50: var item := GENERATOR.generate(level, tier) assert(item.item_level == level) assert(item.additional_modifiers.size() >= 1 and item.additional_modifiers.size() <= 5) if tier == 2: assert(item.additional_modifiers.size() >= 4) var ids: Array[String] = [] for modifier in item.additional_modifiers: assert(modifier.affix.can_roll(item.definition, level)) assert(modifier.affix.affix_id not in ids) ids.append(modifier.affix.affix_id) var progression := float(level - 1) / 999.0 assert(modifier.value >= lerpf(modifier.affix.minimum_value_level_1, modifier.affix.minimum_value_level_1000, progression)) assert(modifier.value <= lerpf(modifier.affix.maximum_value_level_1, modifier.affix.maximum_value_level_1000, progression)) assert(item.get_tooltip_text().contains(item.additional_modifiers[0].affix.display_name)) var weapon := ItemDefinition.new() weapon.item_id = "test_weapon" weapon.category = ItemDefinition.Category.WEAPON var shield := ItemDefinition.new() shield.item_id = "test_shield" shield.category = ItemDefinition.Category.SHIELD var first := ItemAffixDefinition.new() first.affix_id = "first" first.stat_key = "damage_percent" first.category_mask = 1 assert(first.can_roll(weapon, 1)) assert(not first.can_roll(shield, 1)) first.allowed_item_ids = PackedStringArray(["another_weapon"]) assert(not first.can_roll(weapon, 1)) first.allowed_item_ids = PackedStringArray([weapon.item_id]) assert(first.can_roll(weapon, 1)) first.excluded_item_ids = PackedStringArray([weapon.item_id]) assert(not first.can_roll(weapon, 1)) first.excluded_item_ids.clear() first.minimum_level = 10 first.maximum_level = 20 assert(not first.can_roll(weapon, 1)) assert(first.can_roll(weapon, 15)) assert(not first.can_roll(weapon, 21)) first.minimum_level = 1 first.maximum_level = 1000 var second := first.duplicate() as ItemAffixDefinition second.affix_id = "second" var database := ItemAffixDatabase.new() database.affixes.assign([first, second]) assert(database.roll_affixes(weapon, 1, 5).size() == 2) first.exclusive_group = "test_group" second.exclusive_group = "test_group" assert(database.roll_affixes(weapon, 1, 5).size() == 1) first.exclusive_group = "" second.exclusive_group = "" first.incompatible_affix_ids = PackedStringArray([second.affix_id]) assert(not first.can_combine(second) and not second.can_combine(first)) assert(database.roll_affixes(weapon, 1, 5).size() == 1) first.incompatible_affix_ids.clear() first.selection_weight = 0.0 assert(database.roll_affixes(weapon, 1, 5)[0].affix == second) second.enabled = false assert(database.roll_affixes(weapon, 1, 5).is_empty()) print("AFFIX_DATABASE_TEST: PASS (450 generated items, category/ID/level filters, exclusions, weights and empty pools)")