# part_hiding_test —— §4.1 修改 4:变身 / 时装部位遮挡(PartHiding)1:1 自检。 # canonical #18。 godot --headless --path project --script part_hiding_test.gd extends SceneTree const PartHiding = preload("res://part_hiding.gd") var failed := 0 func _ck(ok: bool, message: String) -> void: if not ok: failed += 1 printerr("FAIL: " + message) func _init() -> void: _test_animal_wear() _test_dress_and_bouquet() _test_changable_weapon() _test_weapon_hidden() _test_hair_hidden() _test_body_shape() _test_effective_weapon() if failed == 0: print("PASS: part_hiding_test (§4.1 修改 4 poly / animal-wear / dress 遮挡 1:1)") quit(0) else: quit(1) func _test_animal_wear() -> void: for s in [100, 101, 102, 103]: _ck(PartHiding.is_animal_wear(s), "shape %d is animal-wear" % s) for s in [0, 5, 99, 104, 201]: _ck(not PartHiding.is_animal_wear(s), "shape %d not animal-wear" % s) func _test_dress_and_bouquet() -> void: _ck(PartHiding.is_wearing_dress(201), "shape 201 is wedding dress") for s in [0, 200, 202, 100]: _ck(not PartHiding.is_wearing_dress(s), "shape %d not dress" % s) for v in [50201, 50202, 50203, 50204]: _ck(PartHiding.is_bouquet(v), "vnum %d is bouquet" % v) for v in [0, 50200, 50205, 19]: _ck(not PartHiding.is_bouquet(v), "vnum %d not bouquet" % v) func _test_changable_weapon() -> void: # 婚纱:只有捧花可换 _ck(PartHiding.is_changable_weapon(50201, 201), "dress + bouquet -> changable") _ck(not PartHiding.is_changable_weapon(19, 201), "dress + sword -> not changable") # 非婚纱 shape:任何武器可换(动物时装的隐藏走 weapon_hidden,不走这条) _ck(PartHiding.is_changable_weapon(19, 5), "normal shape + sword -> changable") _ck(PartHiding.is_changable_weapon(19, 100), "animal-wear shape not blocked by __IsChangableWeapon") func _test_weapon_hidden() -> void: _ck(not PartHiding.weapon_hidden(5, false, 19), "normal shape, not poly -> weapon shown") _ck(PartHiding.weapon_hidden(5, true, 19), "poly -> weapon hidden (any shape)") _ck(PartHiding.weapon_hidden(101, false, 19), "animal-wear shape -> weapon hidden") _ck(PartHiding.weapon_hidden(201, false, 19), "dress + non-bouquet -> weapon hidden") _ck(not PartHiding.weapon_hidden(201, false, 50203), "dress + bouquet -> weapon shown") _ck(PartHiding.weapon_hidden(201, false), "dress + no weapon -> hidden") func _test_hair_hidden() -> void: _ck(not PartHiding.hair_hidden(5, false), "normal -> hair shown") _ck(PartHiding.hair_hidden(5, true), "poly -> hair hidden") _ck(PartHiding.hair_hidden(102, false), "animal-wear -> hair hidden") _ck(not PartHiding.hair_hidden(201, false), "dress -> hair NOT hidden") func _test_body_shape() -> void: _ck(PartHiding.body_shape(3, false) == 3, "normal shape passthrough") _ck(PartHiding.body_shape(100, false) == 100, "animal-wear shape kept (出时装体)") _ck(PartHiding.body_shape(3, true) == 0, "poly -> body shape 0") _ck(PartHiding.body_shape(201, true) == 0, "poly overrides dress shape") func _test_effective_weapon() -> void: _ck(PartHiding.effective_weapon(19, 5, false) == 19, "normal -> weapon passthrough") _ck(PartHiding.effective_weapon(19, 100, false) == 0, "animal-wear -> weapon 0") _ck(PartHiding.effective_weapon(50201, 201, false) == 50201, "dress + bouquet -> keep bouquet") _ck(PartHiding.effective_weapon(19, 201, false) == 0, "dress + sword -> 0") _ck(PartHiding.effective_weapon(19, 5, true) == 0, "poly -> weapon 0")