Files
gymkhana-actions/scripts/generate-items.py
2023-08-25 19:43:51 +02:00

96 lines
2.7 KiB
Python
Executable File

#!/usr/bin/env python3
import shutil, sys, glob, os, math
from pathlib import Path
from PIL import Image
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def printHelp():
print ('./generate-items -i <inputDir> -o <outputDir> -p <prefix>')
overWrite=False
params = sys.argv
print(params)
if(len(params) < 4):
print("Missing params")
sys.exit()
inputDir = params[1]
outputDir = params[2]
itemPrefix = params[3]
if inputDir == "":
print ('Input directory is required')
printHelp()
sys.exit()
if outputDir == "":
print ('Output directory is required')
printHelp()
sys.exit()
if itemPrefix == "":
print ('Item prefix is required')
printHelp()
sys.exit()
if(outputDir[-1] != "/"):
outputDir += "/"
esceneFile = open('./item-template.tscn')
esceneTemplate = esceneFile.read()
files = glob.glob(inputDir + "*.png")
for file in files:
baseName = itemPrefix + "_" + Path(file).resolve().stem
print(f"Generating: {bcolors.BOLD}{baseName}{bcolors.ENDC}")
originalImage = Image.open(file)
scale = 0.15
newImage = originalImage.resize((math.ceil(originalImage.width * scale),math.ceil(originalImage.height * scale)))
newImageOutputPath = outputDir + "assets/" + baseName + ".png"
print(f"{bcolors.OKCYAN}Image:{bcolors.ENDC} {newImageOutputPath} {bcolors.OKGREEN}generated.{bcolors.ENDC}")
newImage.save(newImageOutputPath)
scriptName = baseName + ".esc"
scriptOutputPath = outputDir + scriptName
if(os.path.isfile(scriptOutputPath) and not(overWrite)):
print(f"{bcolors.OKCYAN}Script:{bcolors.ENDC} {scriptOutputPath} {bcolors.WARNING}already exists.{bcolors.ENDC}")
else:
print(f"{bcolors.OKCYAN}Script:{bcolors.ENDC} {scriptOutputPath} {bcolors.OKGREEN}generated.{bcolors.ENDC}")
shutil.copy('item-template.esc', scriptOutputPath)
esceneName = baseName + ".tscn"
esceneOutputPath = outputDir + esceneName
if(os.path.isfile(esceneOutputPath) and not(overWrite)):
print(f"{bcolors.OKCYAN}Scene:{bcolors.ENDC} {esceneOutputPath} {bcolors.WARNING}already exists.{bcolors.ENDC}")
else:
newScene = open(esceneOutputPath, mode='wt', encoding='utf-8')
newSceneTemplate = esceneTemplate
newSceneTemplate = newSceneTemplate.replace("BASENAME", baseName)
newScene.write(newSceneTemplate)
newScene.close()
print(f"{bcolors.OKCYAN}Scene:{bcolors.ENDC} {esceneOutputPath} {bcolors.OKGREEN}generated.{bcolors.ENDC}")
esceneFile.close()