|
|
@@ -1,30 +1,42 @@ |
|
|
|
|
|
|
|
|
|
|
|
import os, sys |
|
|
|
import logging |
|
|
|
import json |
|
|
|
import weakref |
|
|
|
import pygame |
|
|
|
from .resourceLoaders import * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ResourceError(Exception): |
|
|
|
pass |
|
|
|
|
|
|
|
_GAME_PATH=calculate_real_path(os.path.dirname(sys.argv[0])) |
|
|
|
|
|
|
|
def _BuildLogger(): |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
logger.setLevel(logging.DEBUG) |
|
|
|
log_format = logging.Formatter("[%(levelname)s : %(asctime)s] %(message)s") |
|
|
|
log_handler = logging.FileHandler(join_path(_GAME_PATH, "logs/gbe.log")) |
|
|
|
log_handler.setFormatter(log_format) |
|
|
|
logger.addHandler(log_handler) |
|
|
|
return logger |
|
|
|
_l = _BuildLogger() |
|
|
|
|
|
|
|
_RESOURCES={} |
|
|
|
|
|
|
|
def define_resource_type(rtype, sub_path, loader_fn): |
|
|
|
global _RESOURCES, _GAME_PATH, join_path |
|
|
|
if rtype in _RESOURCES: |
|
|
|
raise ResourceError("Resource '{}' already defined.".format(rtype)) |
|
|
|
_l.error("Resource '{}' already defined.".format(rtype)) |
|
|
|
return |
|
|
|
fullpath = join_path(_GAME_PATH, sub_path) |
|
|
|
if not os.path.isdir(fullpath): |
|
|
|
print("'{}' | '{}'".format(_GAME_PATH, fullpath)) |
|
|
|
raise ResourceError("'{}' is not a valid directory.".format(sub_path)) |
|
|
|
_l.warning("'{}' is not a valid directory.".format(sub_path)) |
|
|
|
if not callable(loader_fn): |
|
|
|
raise ResourceError("Expected a callable as the resource loader.") |
|
|
|
_RESOURCES[rtype]={"r":[], "loader":loader_fn, "path":fullpath} |
|
|
|
_l.info("Added resource type '{}' with search path '{}'.".format(rtype, sub_path)) |
|
|
|
|
|
|
|
|
|
|
|
def configure(conf): |
|
|
@@ -35,7 +47,7 @@ def configure(conf): |
|
|
|
if key in _RESOURCES: |
|
|
|
fullpath = join_path(_GAME_PATH, conf[key]) |
|
|
|
if not os.path.isdir(fullpath): |
|
|
|
raise ResourceError("'{}' is not a valid directory.".format(conf[key])) |
|
|
|
_l.warning("'{}' is not a valid directory.".format(conf[key])) |
|
|
|
_RESOURCES[key]["path"] = fullpath |
|
|
|
_RESOURCES[key]["r"] = [] # Completely drop old list. |
|
|
|
|
|
|
@@ -104,7 +116,8 @@ class Manager: |
|
|
|
try: |
|
|
|
d["instance"] = loader(filename) |
|
|
|
except Exception as e: |
|
|
|
raise e |
|
|
|
_l.error(e.message) |
|
|
|
return None |
|
|
|
return weakref.ref(d["instance"]) |
|
|
|
|
|
|
|
def lock(self, rtype, src, lock=True): |