pyglet_demo/engine/data.py

77 lines
2.1 KiB
Python

import os
import sys
g_pp = None
def program_path() -> str:
global g_pp
if g_pp == None:
g_pp = os.path.abspath(os.path.split(sys.argv[0])[0])
return g_pp
def exists(vault: str, path: str) -> bool:
fp = os.path.join(program_path(), vault, path)
return os.path.exists(fp)
def fd_open(vault: str, path: str) -> object:
fp = os.path.join(program_path(), vault, path)
return open(fp, 'r')
def fd_write(vault: str, path: str) -> object:
fp = os.path.join(program_path(), vault, path)
os.makedirs(os.path.join(program_path(), vault), exist_ok=True)
return open(fp, 'w')
g_data = {}
class ModInfo(object):
def __init__(self: object, modname: str):
self.name = modname
self.modinfo = None
class ModInfoDir(ModInfo):
def __init__(self: object, modname: str):
super().__init__(modname)
def path(self: object, path: str) -> str:
return os.path.join(self.name, path)
def exists(self: object, path: str) -> object:
return exists('data', self.path(path))
def fd_open(self: object, path: str) -> object:
return fd_open('data', self.path(path))
def has_modinfo(self: object) -> bool:
return exists('data', self.path('modinfo.json'))
def read_modinfo(self: object) -> None:
inffile = self.fd_open('data', self.path('modinfo.json'))
self.modinfo = json.load(inffile)
def load_mods() -> None:
global g_data
g_data = {}
full_modlist = {}
for mod in os.listdir(os.path.join(program_path(), 'data')):
mn, me = os.path.splitext(mod)
if not mn in full_modlist:
full_modlist[mn] = {}
if me.lower() == 'zip':
# handle zip mods here somehow
# full_modlist[mn][me] = mod
pass
elif me == '' or os.path.isdir(os.path.join(program_path(), 'data', mn)):
moddata = ModInfoDir()
if moddata.has_modinfo():
full_modlist[mn][me] = moddata
modlist = {}
for mn in full_modlist.keys():
if '' in full_modlist[mn]:
modlist[mn] = full_modlist[mn]['']