- Ustvarjen skript za ločevanje objektov iz tileset slik (obdelaj_tilesete.py) - Odstranjevanje zelenega ozadja (#00FF00) iz vseh slik - Ločevanje posameznih objektov iz multi-object slik - Pomanjševanje na 50% originalne velikosti - Obdelanih 234 slik 3877 ločenih objektov - Ustvarjen skript za generiranje TSX datotek (generiraj_tsx_datoteke.py) - Avtomatsko generiranje 3877 TSX datotek za Tiled Map Editor - Pravilna XML struktura za vsak tileset - Avtomatska detekcija velikosti objektov - Relativne poti do slik Rezultati: - assets/narezano_loceno/ - 3877 ločenih PNG objektov - assets/tilesets_auto/ - 3877 TSX datotek za Tiled - Dokumentacija in navodila za uporabo Vse pripravljeno za uporabo v Tiled Map Editor!
108 lines
3.6 KiB
Python
108 lines
3.6 KiB
Python
import os
|
|
from PIL import Image
|
|
|
|
# ===== NASTAVITVE =====
|
|
vhodna_mapa = r"c:\novafarma\assets\narezano_loceno"
|
|
izhodna_mapa_tsx = r"c:\novafarma\assets\tilesets_auto"
|
|
|
|
# Ustvari izhodno mapo
|
|
if not os.path.exists(izhodna_mapa_tsx):
|
|
os.makedirs(izhodna_mapa_tsx)
|
|
|
|
def generiraj_tsx(pot_slike, ime_slike, relativna_pot_do_slike):
|
|
"""
|
|
Generiraj TSX datoteko za eno sliko.
|
|
"""
|
|
try:
|
|
# Preberi velikost slike
|
|
img = Image.open(pot_slike)
|
|
width, height = img.size
|
|
|
|
# Generiraj ime tileseta (brez _obj01, _obj02, itd.)
|
|
ime_brez_ext = os.path.splitext(ime_slike)[0]
|
|
|
|
# Odstrani _obj01, _obj02 iz imena za lepše ime tileseta
|
|
if "_obj" in ime_brez_ext:
|
|
base_name = ime_brez_ext.rsplit("_obj", 1)[0]
|
|
obj_num = ime_brez_ext.rsplit("_obj", 1)[1]
|
|
tileset_name = f"{base_name} - Object {obj_num}"
|
|
else:
|
|
tileset_name = ime_brez_ext
|
|
|
|
# Ustvari TSX vsebino
|
|
tsx_content = f'''<?xml version="1.0" encoding="UTF-8"?>
|
|
<tileset version="1.10" tiledversion="1.11.1" name="{tileset_name}" tilewidth="{width}" tileheight="{height}" tilecount="1" columns="1">
|
|
<image source="{relativna_pot_do_slike}" width="{width}" height="{height}"/>
|
|
</tileset>
|
|
'''
|
|
|
|
# Generiraj ime TSX datoteke
|
|
tsx_ime = f"{ime_brez_ext}.tsx"
|
|
tsx_pot = os.path.join(izhodna_mapa_tsx, tsx_ime)
|
|
|
|
# Shrani TSX datoteko
|
|
with open(tsx_pot, 'w', encoding='utf-8') as f:
|
|
f.write(tsx_content)
|
|
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f" ❌ Napaka pri {ime_slike}: {str(e)}")
|
|
return False
|
|
|
|
def generiraj_vse_tsx():
|
|
"""
|
|
Generiraj TSX datoteke za vse PNG slike v narezano_loceno mapi.
|
|
"""
|
|
print("🚀 Začenjam generiranje TSX datotek za Tiled...\n")
|
|
print(f"📂 Vhodna mapa: {vhodna_mapa}")
|
|
print(f"📦 Izhodna mapa: {izhodna_mapa_tsx}\n")
|
|
print("=" * 70)
|
|
|
|
skupaj_tsx = 0
|
|
skupaj_napak = 0
|
|
|
|
# Preglej vse podmape
|
|
for podmapa in os.listdir(vhodna_mapa):
|
|
pot_podmape = os.path.join(vhodna_mapa, podmapa)
|
|
|
|
if not os.path.isdir(pot_podmape):
|
|
continue
|
|
|
|
print(f"\n📁 Obdelujem: {podmapa}")
|
|
print("-" * 70)
|
|
|
|
# Najdi vse PNG slike v podmapi
|
|
slike = [f for f in os.listdir(pot_podmape) if f.endswith(".png")]
|
|
print(f" Najdenih {len(slike)} slik\n")
|
|
|
|
for ime_slike in slike:
|
|
pot_slike = os.path.join(pot_podmape, ime_slike)
|
|
|
|
# Relativna pot od tilesets_auto/ do slike
|
|
# tilesets_auto/ je v assets/
|
|
# slika je v assets/narezano_loceno/[podmapa]/[ime_slike]
|
|
relativna_pot = f"../narezano_loceno/{podmapa}/{ime_slike}"
|
|
|
|
if generiraj_tsx(pot_slike, ime_slike, relativna_pot):
|
|
skupaj_tsx += 1
|
|
if skupaj_tsx % 100 == 0:
|
|
print(f" ✅ Generirano {skupaj_tsx} TSX datotek...")
|
|
else:
|
|
skupaj_napak += 1
|
|
|
|
print("\n" + "=" * 70)
|
|
print(f"✨ KONČANO!")
|
|
print(f" ✅ Uspešno generirano: {skupaj_tsx} TSX datotek")
|
|
if skupaj_napak > 0:
|
|
print(f" ❌ Napake: {skupaj_napak}")
|
|
print(f"\n📂 TSX datoteke so v: {izhodna_mapa_tsx}")
|
|
print(f"\n🎮 Zdaj lahko dodaš te tilesete v Tiled:")
|
|
print(f" 1. Odpri svojo mapo v Tiled")
|
|
print(f" 2. Map → Add External Tileset...")
|
|
print(f" 3. Izberi TSX datoteko iz {izhodna_mapa_tsx}")
|
|
print(f" 4. Uporabi na mapi!")
|
|
|
|
if __name__ == "__main__":
|
|
generiraj_vse_tsx()
|