75 lines
3.0 KiB
GDScript
75 lines
3.0 KiB
GDScript
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() == 15)
|
|
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)
|
|
if item.definition.category == ItemDefinition.Category.ACTIVE_EXTENSION:
|
|
assert(item.additional_modifiers.is_empty())
|
|
continue
|
|
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 bounds := modifier.affix.get_value_range(level)
|
|
assert(modifier.value >= bounds.x - 0.0001)
|
|
assert(modifier.value <= bounds.y + 0.0001)
|
|
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)")
|