99 lines
3.7 KiB
Python
99 lines
3.7 KiB
Python
|
|
import os
|
|
import shutil
|
|
import re
|
|
|
|
ROOT = "assets/slike"
|
|
TARGET_ROOT = os.path.join(ROOT, "biomi")
|
|
|
|
# BIOME RULES (Keyword -> Folder Name)
|
|
BIOMES = {
|
|
"Dzungle": [r"jungle", r"tropical", r"rainforest", r"dzungla", r"džungla"],
|
|
"Mocvirje": [r"swamp", r"marsh", r"bog", r"barje", r"močvirje", r"mocvirje"],
|
|
"Puscava": [r"desert", r"sand_dunes", r"cactus", r"puščava", r"puscava"],
|
|
"Ledeno": [r"tundra", r"ice", r"snow", r"winter", r"sneg", r"led", r"arctic"],
|
|
"Vulkan": [r"volcano", r"lava", r"magma", r"ash", r"vulkan"],
|
|
"Mesto": [r"city", r"town", r"urban", r"street", r"concrete", r"asphalt", r"mesto", r"ljubljana", r"ruined_city"],
|
|
"Gozd": [r"forest", r"woods", r"dark_forest", r"gozd", r"pine"],
|
|
"Radioaktivno": [r"wasteland", r"radioactive", r"toxic", r"mutant_zone", r"nuklearno"],
|
|
"Jama": [r"cave", r"cavern", r"underground", r"jama", r"mine"],
|
|
"Obala": [r"coast", r"beach", r"sea", r"ocean", r"obala"],
|
|
"Farma_Travniki": [r"grassland", r"farm", r"meadow", r"field", r"travnik", r"kmetija"]
|
|
}
|
|
|
|
# SUB-CATEGORY RULES (Reuse logic)
|
|
CATEGORIES = [
|
|
(r"(zombie|undead|miner|spitter|boss|animation|animacija|walk|run|idle|attack)", "Zombiji"),
|
|
(r"(rabbit|sheep|animal|pig|cow|mutant|zival)", "Zivali"),
|
|
(r"(kai|ana|gronk|npc|player)", "Liki"),
|
|
(r"(tool|weapon|item|crop|seed|food|resource)", "Predmeti"),
|
|
(r"(tree|grass|ground|water|house|wall|prop|tile|terrain|teren)", "Teren"),
|
|
(r".*", "Nerazvrsceno")
|
|
]
|
|
|
|
def organize_biomes():
|
|
print(f"🚀 ORGANIZING BIOMES in {ROOT}...")
|
|
|
|
if not os.path.exists(TARGET_ROOT):
|
|
os.makedirs(TARGET_ROOT)
|
|
|
|
moved_count = 0
|
|
|
|
# Walk everything in assets/slike (Except 'biomi' itself to avoid loop)
|
|
# We want to pull from 'teren', 'liki', 'glavna_referenca', etc.
|
|
|
|
for root, dirs, files in os.walk(ROOT):
|
|
# Skip if already in Biomi
|
|
if os.path.abspath(root).startswith(os.path.abspath(TARGET_ROOT)):
|
|
continue
|
|
|
|
for file in files:
|
|
if not file.lower().endswith(('.png', '.jpg', '.jpeg')):
|
|
continue
|
|
|
|
fname_lower = file.lower()
|
|
detected_biome = None
|
|
|
|
# Detect Biome
|
|
for biome, keywords in BIOMES.items():
|
|
if any(re.search(k, fname_lower) for k in keywords):
|
|
detected_biome = biome
|
|
break
|
|
|
|
if detected_biome:
|
|
# Detect Category subfolder
|
|
target_sub = "Nerazvrsceno"
|
|
for pattern, folder in CATEGORIES:
|
|
if re.search(pattern, fname_lower):
|
|
target_sub = folder
|
|
break
|
|
|
|
# Move
|
|
# Path: assets/slike/biomi/BIOME_NAME/Category/Filename
|
|
dest_dir = os.path.join(TARGET_ROOT, detected_biome, target_sub)
|
|
if not os.path.exists(dest_dir):
|
|
os.makedirs(dest_dir)
|
|
|
|
src_path = os.path.join(root, file)
|
|
dest_path = os.path.join(dest_dir, file)
|
|
|
|
try:
|
|
shutil.move(src_path, dest_path)
|
|
moved_count += 1
|
|
except Exception as e:
|
|
print(f"Error {file}: {e}")
|
|
|
|
print("="*40)
|
|
print(f"✅ BIOME ORGANIZATION COMPLETE. Moved {moved_count} files.")
|
|
print("="*40)
|
|
|
|
# Stats
|
|
for b in os.listdir(TARGET_ROOT):
|
|
bp = os.path.join(TARGET_ROOT, b)
|
|
if os.path.isdir(bp):
|
|
c = sum([len(files) for r, d, files in os.walk(bp)])
|
|
print(f" 🌍 {b}: {c} files")
|
|
|
|
if __name__ == "__main__":
|
|
organize_biomes()
|