96 lines
4.4 KiB
GDScript
96 lines
4.4 KiB
GDScript
# skybox_test —— 40250 ClientVS22 texture-mode SkyBox -> Godot sky shader。
|
||
# 验证真实 texture-mode SkyBox:CapeDragonHead 的五个非空面回退渐变,
|
||
# DawnMistWood 的六面天空与云层同时接入并保留参考 UV / 速度参数。
|
||
extends SceneTree
|
||
|
||
var _fail := 0
|
||
|
||
func _ck(ok: bool, message: String) -> void:
|
||
if not ok:
|
||
_fail += 1
|
||
printerr("FAIL: " + message)
|
||
|
||
func _make_world(map_path: String) -> Node:
|
||
var world: Node = ClassDB.instantiate("Metin2World")
|
||
world.set("auto_load", false)
|
||
world.set("assets_root", AssetRoot.path())
|
||
world.set("map_path", map_path)
|
||
world.set("focus_tile", Vector2i(0, 0))
|
||
world.set("load_radius_tiles", 0)
|
||
world.set("objects_enabled", false)
|
||
world.set("splat_enabled", false)
|
||
world.set("water_enabled", false)
|
||
get_root().add_child(world)
|
||
return world
|
||
|
||
func _init() -> void:
|
||
if not ClassDB.class_exists("Metin2World"):
|
||
printerr("FAIL: Metin2World extension is not registered")
|
||
quit(1)
|
||
return
|
||
var world := _make_world("metin2_patch_dragon_rock/metin2_map_capedragonhead")
|
||
_ck(bool(world.call("load_map")), "CapeDragonHead map loads")
|
||
var report: Dictionary = world.call("get_load_report")
|
||
_ck(bool(report.get("env_ok", false)), "texture-mode .msenv env_ok")
|
||
var env_node := world.get_node_or_null("WorldEnv") as WorldEnvironment
|
||
_ck(env_node != null and env_node.environment != null, "WorldEnv has Environment")
|
||
if env_node != null:
|
||
_ck(int(env_node.get_meta("msenv_sky_face_count", 0)) == 5,
|
||
"five non-empty SkyBox faces resolve")
|
||
_ck(bool(env_node.get_meta("msenv_sky_texture_mode_applied", false)),
|
||
"texture render mode uses six-face shader")
|
||
var sky := env_node.environment.sky
|
||
_ck(sky != null, "WorldEnv has sky")
|
||
if sky != null:
|
||
var mat := sky.get_material() as ShaderMaterial
|
||
_ck(mat != null, "texture-mode sky uses ShaderMaterial")
|
||
if mat != null:
|
||
_ck(mat.shader != null and mat.shader.code.find("shader_type sky;") >= 0,
|
||
"six-face sky shader is installed")
|
||
_ck(bool(mat.get_shader_parameter("has_front")), "front face is present")
|
||
_ck(bool(mat.get_shader_parameter("has_back")), "back face is present")
|
||
_ck(bool(mat.get_shader_parameter("has_left")), "left face is present")
|
||
_ck(bool(mat.get_shader_parameter("has_right")), "right face is present")
|
||
_ck(bool(mat.get_shader_parameter("has_top")), "top face is present")
|
||
_ck(not bool(mat.get_shader_parameter("has_bottom")),
|
||
"empty bottom face falls back to gradient")
|
||
world.queue_free()
|
||
await process_frame
|
||
|
||
var cloud_world := _make_world("metin2_patch_dragon_rock/metin2_map_dawnmistwood")
|
||
_ck(bool(cloud_world.call("load_map")), "DawnMistWood map loads")
|
||
var cloud_report: Dictionary = cloud_world.call("get_load_report")
|
||
_ck(bool(cloud_report.get("env_ok", false)), "texture-mode + cloud .msenv env_ok")
|
||
var cloud_env := cloud_world.get_node_or_null("WorldEnv") as WorldEnvironment
|
||
_ck(cloud_env != null and cloud_env.environment != null, "cloud WorldEnv has Environment")
|
||
if cloud_env != null:
|
||
_ck(int(cloud_env.get_meta("msenv_sky_face_count", 0)) == 5,
|
||
"cloud map five non-empty SkyBox faces resolve")
|
||
_ck(bool(cloud_env.get_meta("msenv_sky_texture_mode_applied", false)),
|
||
"texture render mode remains active when CloudTexture exists")
|
||
_ck(bool(cloud_env.get_meta("msenv_sky_cloud_applied", false)),
|
||
"cloud texture is attached to texture-mode sky shader")
|
||
var cloud_sky := cloud_env.environment.sky
|
||
var cloud_mat := cloud_sky.get_material() as ShaderMaterial if cloud_sky != null else null
|
||
_ck(cloud_mat != null, "cloud map uses ShaderMaterial")
|
||
if cloud_mat != null:
|
||
_ck(bool(cloud_mat.get_shader_parameter("has_cloud")),
|
||
"sky shader enables cloud plane")
|
||
_ck(cloud_mat.shader != null and cloud_mat.shader.code.find("TIME * cloud_speed") >= 0,
|
||
"cloud shader preserves reference UV scroll")
|
||
if cloud_mat != null:
|
||
var scale := cloud_mat.get_shader_parameter("cloud_scale") as Vector2
|
||
_ck(scale != null and is_equal_approx(scale.x, 2000.0) and is_equal_approx(scale.y, 2000.0),
|
||
"cloud scale converts reference centimetres to Godot metres")
|
||
var speed := cloud_mat.get_shader_parameter("cloud_speed") as Vector2
|
||
_ck(speed != null and is_equal_approx(speed.x, 0.001) and is_equal_approx(speed.y, 0.001),
|
||
"cloud speed preserves reference seconds parameter")
|
||
cloud_world.queue_free()
|
||
await process_frame
|
||
if _fail == 0:
|
||
print("PASS: skybox_test (.msenv six-face texture sky)")
|
||
quit(0)
|
||
else:
|
||
printerr("%d check(s) failed" % _fail)
|
||
quit(1)
|