Skip to content

Commit 92d2177

Browse files
committed
delete sprites which are no longer part of the sprite sheet
1 parent dfaac07 commit 92d2177

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

addons/codeandweb.texturepacker/texturepacker_import_spritesheet.gd

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ func _import(source_file, save_path, options, r_platform_variants, r_gen_files):
8989

9090
create_atlas_textures(sheetFolder, sheet, image, r_gen_files)
9191

92+
delete_no_longer_existing_sprite_files(sheetFolder, r_gen_files)
93+
9294
# without this call Godot editor will not refresh its filesystem view
9395
EditorInterface.get_resource_filesystem().scan_sources();
9496

@@ -149,3 +151,43 @@ func read_sprite_sheet(fileName):
149151

150152
file.close()
151153
return dict
154+
155+
156+
func get_all_tres_files_recursive(folder_path: String) -> PackedStringArray:
157+
var result := PackedStringArray()
158+
var dir := DirAccess.open(folder_path)
159+
160+
# Get all files in this directory
161+
var files = dir.get_files()
162+
for file_name in files:
163+
if file_name.ends_with(".tres"):
164+
result.append(folder_path + "/" + file_name)
165+
166+
# Get all subdirectories and recurse
167+
var subdirs = dir.get_directories()
168+
for subdir_name in subdirs:
169+
var subdir_path = folder_path + "/" + subdir_name
170+
result.append_array(get_all_tres_files_recursive(subdir_path))
171+
172+
return result
173+
174+
175+
func delete_no_longer_existing_sprite_files(sheetFolder: String, generated_files: PackedStringArray) -> void:
176+
# Convert generated_files to a Set for fast lookup
177+
var generated_set := {}
178+
for path in generated_files:
179+
generated_set[path] = true
180+
181+
var dir := DirAccess.open(sheetFolder)
182+
if dir == null:
183+
printerr("Failed to open directory for deletion: " + sheetFolder)
184+
return
185+
186+
var existing_files = get_all_tres_files_recursive(sheetFolder)
187+
for file_path in existing_files:
188+
if not generated_set.has(file_path):
189+
var err = dir.remove(file_path)
190+
if err != OK:
191+
printerr("Failed to delete obsolete sprite: " + file_path)
192+
else:
193+
print("Deleted obsolete sprite: " + file_path)

0 commit comments

Comments
 (0)