From 4128823b3fb5c8eddc2b66327ed2a561dfd64d27 Mon Sep 17 00:00:00 2001 From: shenjack <3695888@qq.com> Date: Sat, 17 Jun 2023 00:47:00 +0800 Subject: [PATCH] move DR_runtime [build skip] [build rs skip] --- DR.py | 3 +- Difficult_Rocket/__init__.py | 83 ++++++++---------------------------- Difficult_Rocket/runtime.py | 79 ++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 66 deletions(-) create mode 100644 Difficult_Rocket/runtime.py diff --git a/DR.py b/DR.py index 4a235cf..b5a9a24 100644 --- a/DR.py +++ b/DR.py @@ -58,7 +58,8 @@ def main() -> int: pyglet.resource.path = ['/textures/'] pyglet.resource.reindex() - from Difficult_Rocket import main, DR_runtime + from Difficult_Rocket import main + from Difficult_Rocket.runtime import DR_runtime DR_runtime.start_time_ns = start_time_ns # from pyglet.gl import glClearColor # 调整背景颜色 diff --git a/Difficult_Rocket/__init__.py b/Difficult_Rocket/__init__.py index ee92659..03887af 100644 --- a/Difficult_Rocket/__init__.py +++ b/Difficult_Rocket/__init__.py @@ -4,14 +4,6 @@ # All rights reserved # ------------------------------- -import sys -import importlib -import traceback -import contextlib -import importlib.util -from pathlib import Path -from typing import Optional, List, Tuple - from Difficult_Rocket.api.types import Options, Version game_version = Version("0.8.2.0") # 游戏版本 @@ -20,6 +12,24 @@ Api_version = Version("0.1.1.0") # API 版本 __version__ = game_version +__all__ = [ + # __init__ + 'DR_status', + # folder + 'api', + 'client', + 'server', + 'command', + 'crash', + 'exception', + 'mod', + 'utils', + # file + 'main', + 'runtime', +] + + class _DR_status(Options): """ DR 的特性开关 / 基本状态 @@ -58,64 +68,7 @@ class _DR_status(Options): return round(12 * self.gui_scale) -class _DR_runtime(Options): - """ - DR 的运行时配置 / 状态 - """ - name = 'DR Runtime' - - language: str = 'zh-CN' - mod_path: str = './mods' - DR_Mod_List: List[Tuple[str, Version]] = [] # DR Mod 列表 (name, version) - - # run status - start_time_ns: Optional[int] = None - client_setup_cause_ns: Optional[int] = None - server_setup_cause_ns: Optional[int] = None - - def load_file(self) -> bool: - with contextlib.suppress(FileNotFoundError): - with open('./configs/main.toml', 'r', encoding='utf-8') as f: - import rtoml - config_file = rtoml.load(f) - self.language = config_file['runtime']['language'] - self.mod_path = config_file['game']['mods']['path'] - return True - return False - - def find_mods(self) -> List[str]: - mods = [] - mod_path = Path(self.mod_path) - if not mod_path.exists(): - mod_path.mkdir() - return [] - paths = mod_path.iterdir() - sys.path.append(self.mod_path) - for mod_path in paths: - try: - if mod_path.is_dir() and mod_path.name != '__pycache__': # 处理文件夹 mod - if importlib.util.find_spec(mod_path.name) is not None: - mods.append(mod_path.name) - else: - print(f'can not import mod {mod_path} because importlib can not find spec') - elif mod_path.suffix in ('.pyz', '.zip'): # 处理压缩包 mod - if importlib.util.find_spec(mod_path.name) is not None: - mods.append(mod_path.name) - elif mod_path.suffix == '.pyd': # pyd 扩展 mod - if importlib.util.find_spec(mod_path.name) is not None: - mods.append(mod_path.name) - elif mod_path.suffix == '.py': # 处理单文件 mod - print(f'importing mod {mod_path=} {mod_path.stem}') - if importlib.util.find_spec(mod_path.stem) is not None: - mods.append(mod_path.stem) - except ImportError: - print(f'ImportError when loading mod {mod_path}') - traceback.print_exc() - return mods - - DR_status = _DR_status() -DR_runtime = _DR_runtime() if DR_status.playing: from Difficult_Rocket.utils.thread import new_thread diff --git a/Difficult_Rocket/runtime.py b/Difficult_Rocket/runtime.py new file mode 100644 index 0000000..9507ff1 --- /dev/null +++ b/Difficult_Rocket/runtime.py @@ -0,0 +1,79 @@ +# ------------------------------- +# Difficult Rocket +# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com +# All rights reserved +# ------------------------------- + +import sys +import importlib +import traceback +import contextlib +import importlib.util +from pathlib import Path +from typing import Optional, List, Tuple + +from Difficult_Rocket.api.types import Options, Version + + +__all__ = [ + 'DR_runtime' +] + + +class _DR_runtime(Options): + """ + DR 的运行时配置 / 状态 + """ + name = 'DR Runtime' + + language: str = 'zh-CN' + mod_path: str = './mods' + DR_Mod_List: List[Tuple[str, Version]] = [] # DR Mod 列表 (name, version) + + # run status + start_time_ns: Optional[int] = None + client_setup_cause_ns: Optional[int] = None + server_setup_cause_ns: Optional[int] = None + + def load_file(self) -> bool: + with contextlib.suppress(FileNotFoundError): + with open('./configs/main.toml', 'r', encoding='utf-8') as f: + import rtoml + config_file = rtoml.load(f) + self.language = config_file['runtime']['language'] + self.mod_path = config_file['game']['mods']['path'] + return True + return False + + def find_mods(self) -> List[str]: + mods = [] + mod_path = Path(self.mod_path) + if not mod_path.exists(): + mod_path.mkdir() + return [] + paths = mod_path.iterdir() + sys.path.append(self.mod_path) + for mod_path in paths: + try: + if mod_path.is_dir() and mod_path.name != '__pycache__': # 处理文件夹 mod + if importlib.util.find_spec(mod_path.name) is not None: + mods.append(mod_path.name) + else: + print(f'can not import mod {mod_path} because importlib can not find spec') + elif mod_path.suffix in ('.pyz', '.zip'): # 处理压缩包 mod + if importlib.util.find_spec(mod_path.name) is not None: + mods.append(mod_path.name) + elif mod_path.suffix == '.pyd': # pyd 扩展 mod + if importlib.util.find_spec(mod_path.name) is not None: + mods.append(mod_path.name) + elif mod_path.suffix == '.py': # 处理单文件 mod + print(f'importing mod {mod_path=} {mod_path.stem}') + if importlib.util.find_spec(mod_path.stem) is not None: + mods.append(mod_path.stem) + except ImportError: + print(f'ImportError when loading mod {mod_path}') + traceback.print_exc() + return mods + + +DR_runtime = _DR_runtime()