Files
mtgodot-poc/project/skybox_test.gd
T

96 lines
4.4 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# skybox_test —— 40250 ClientVS22 texture-mode SkyBox -> Godot sky shader。
# 验证真实 texture-mode SkyBoxCapeDragonHead 的五个非空面回退渐变,
# 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)