@tool extends SceneTree # One-shot cleanup: # 1. Reset VisualShader.graph_offset to default on every .material so the # deprecated property no longer triggers a warning at load. # 2. Re-save every .mesh whose surface format is the old (Godot 3) variant # so Godot 4 stops nagging. func _init() -> void: var changed := 0 for path in _find_resources("res://assets", [".material", ".tres"]): var res = ResourceLoader.load(path, "", ResourceLoader.CACHE_MODE_IGNORE) if res is ShaderMaterial and res.shader is VisualShader: var vs: VisualShader = res.shader if vs.graph_offset != Vector2.ZERO: vs.graph_offset = Vector2.ZERO if ResourceSaver.save(res, path) == OK: changed += 1 print("CLEARED graph_offset on ", path) for path in _find_resources("res://assets", [".mesh"]): var mesh = ResourceLoader.load(path, "", ResourceLoader.CACHE_MODE_IGNORE) if mesh is ArrayMesh: # Just re-saving rewrites the file using the current surface format. if ResourceSaver.save(mesh, path) == OK: changed += 1 print("RESAVED mesh ", path) print("Done. changed=", changed) quit() func _find_resources(dir_path: String, exts: Array) -> Array: var result := [] var dir = DirAccess.open(dir_path) if dir == null: return result dir.list_dir_begin() var name = dir.get_next() while name != "": if name != "." and name != "..": var sub = dir_path + "/" + name if dir.current_is_dir(): result.append_array(_find_resources(sub, exts)) else: for ext in exts: if name.ends_with(ext): result.append(sub) break name = dir.get_next() return result