# This script can be used to move your regions by an offset. # Eventually this tool will find its way into a built in UI # # Attach it to your Terrain3D node # Save and reload your scene # Select your Terrain3D node # Enter a valid `offset` where all regions will be within -16, +15 # Run it # It should unload the regions, rename files, and reload them # Clear the script and resave your scene @tool extends Terrain3D @export var offset: Vector2i @export var run: bool = false : set = start_rename func start_rename(val: bool = false) -> void: if val == false or offset == Vector2i.ZERO: return var dir_name: String = data_directory data_directory = "" var dir := DirAccess.open(dir_name) if not dir: print("An error occurred when trying to access the path: ", data_directory) return var affected_files: PackedStringArray var files: PackedStringArray = dir.get_files() for file_name in files: if file_name.match("terrain3d*.res") and not dir.current_is_dir(): var region_loc: Vector2i = Terrain3DUtil.filename_to_location(file_name) var new_loc: Vector2i = region_loc + offset if new_loc.x < -16 or new_loc.x > 15 or new_loc.y < -16 or new_loc.y > 15: push_error("New location %.0v out of bounds for region %.0v. Aborting" % [ new_loc, region_loc ]) return var new_name: String = "tmp_" + Terrain3DUtil.location_to_filename(new_loc) dir.rename(file_name, new_name) affected_files.push_back(new_name) print("File: %s renamed to: %s" % [ file_name, new_name ]) for file_name in affected_files: var new_name: String = file_name.trim_prefix("tmp_") dir.rename(file_name, new_name) print("File: %s renamed to: %s" % [ file_name, new_name ]) data_directory = dir_name EditorInterface.get_resource_filesystem().scan()