完善客户端功能并同步差距文档
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user