51 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
import os
 | 
						|
import threading
 | 
						|
import json
 | 
						|
 | 
						|
from Utils import local_path, user_path
 | 
						|
from worlds.alttp.Rom import Sprite
 | 
						|
 | 
						|
 | 
						|
def update_sprites_lttp():
 | 
						|
    from tkinter import Tk
 | 
						|
    from LttPAdjuster import get_image_for_sprite
 | 
						|
    from LttPAdjuster import BackgroundTaskProgress
 | 
						|
    from LttPAdjuster import BackgroundTaskProgressNullWindow
 | 
						|
    from LttPAdjuster import update_sprites
 | 
						|
 | 
						|
    # Target directories
 | 
						|
    input_dir = user_path("data", "sprites", "alttpr")
 | 
						|
    output_dir = local_path("WebHostLib", "static", "generated")  # TODO: move to user_path
 | 
						|
 | 
						|
    os.makedirs(os.path.join(output_dir, "sprites"), exist_ok=True)
 | 
						|
    # update sprites through gui.py's functions
 | 
						|
    done = threading.Event()
 | 
						|
    try:
 | 
						|
        top = Tk()
 | 
						|
    except:
 | 
						|
        task = BackgroundTaskProgressNullWindow(update_sprites, lambda successful, resultmessage: done.set())
 | 
						|
    else:
 | 
						|
        top.withdraw()
 | 
						|
        task = BackgroundTaskProgress(top, update_sprites, "Updating Sprites", lambda succesful, resultmessage: done.set())
 | 
						|
    while not done.isSet():
 | 
						|
        task.do_events()
 | 
						|
 | 
						|
    spriteData = []
 | 
						|
 | 
						|
    for file in (file for file in os.listdir(input_dir) if not file.startswith(".")):
 | 
						|
        sprite = Sprite(os.path.join(input_dir, file))
 | 
						|
 | 
						|
        if not sprite.name:
 | 
						|
            print("Warning:", file, "has no name.")
 | 
						|
            sprite.name = file.split(".", 1)[0]
 | 
						|
        if sprite.valid:
 | 
						|
            with open(os.path.join(output_dir, "sprites", f"{os.path.splitext(file)[0]}.gif"), 'wb') as image:
 | 
						|
                image.write(get_image_for_sprite(sprite, True))
 | 
						|
            spriteData.append({"file": file, "author": sprite.author_name, "name": sprite.name})
 | 
						|
        else:
 | 
						|
            print(file, "dropped, as it has no valid sprite data.")
 | 
						|
    spriteData.sort(key=lambda entry: entry["name"])
 | 
						|
    with open(f'{output_dir}/spriteData.json', 'w') as file:
 | 
						|
        json.dump({"sprites": spriteData}, file, indent=1)
 | 
						|
    return spriteData
 |