Difficult-Rocket/Difficult_Rocket/__init__.py

168 lines
5.0 KiB
Python

# -------------------------------
# Difficult Rocket
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import contextlib
# import ctypes
import sys
import logging
import warnings
import traceback
from typing import List, Dict, Union, Optional
from Difficult_Rocket.api.types import Options
from libs.MCDR.version import Version
game_version = Version("0.7.0.0") # 游戏版本
build_version = Version("1.1.0.0") # 编译文件版本(与游戏本体无关)
DR_rust_version = Version("0.1.7.0") # DR 的 Rust 编写部分的版本
__version__ = game_version
long_version: int = 11
"""
long_version: 一个用于标记内部协议的整数
11: 为 DR_option 添加 use_DR_rust
修复了一些拼写错误
10: 为 DR_runtime 添加 DR_Rust_get_version
9 : 为 DR_option 添加 pyglet_macosx_dev_test
8 : 为 DR_runtime 添加 DR_rust_version
为 DR_option 添加 DR_rust_available
以后就有 DR_rust 了
7 : 为 DR_option 添加 std_font_size
6 : 事实证明, 不如直接用int
5 : 添加 build_version 信息,用于标记编译文件版本,
游戏版本改为四位数,终于有一个可以让我随便刷的版本号位数了
4 : 把 translate 的字体常量位置改了一下,顺便调换顺序
3 : 就是试试改一下,正好 compiler 要用
2 : 哦,对 longlong 好耶!
1 : 我可算想起来还有这回事了 v0.6.4
"""
class _DR_option(Options):
"""
DR 的一般配置/状态
"""
name = 'DR Option'
# runtime options
InputBox_use_TextEntry: bool = True
record_threads: bool = True
report_translate_not_found: bool = True
use_multiprocess: bool = False
DR_rust_available: bool = False
use_DR_rust: bool = True
use_cProfile: bool = False
use_local_logging: bool = False
# tests
playing: bool = False
debugging: bool = False
crash_report_test: bool = True
pyglet_macosx_dev_test: bool = True
# window option
gui_scale: float = 1.0 # default 1.0 2.0 -> 2x 3 -> 3x
def init(self, **kwargs):
if sys.platform != 'darwin': # MacOS 的测试只能在 Macos 上跑
self.pyglet_macosx_dev_test = False
try:
from libs.Difficult_Rocket_rs import test_call, get_version_str
test_call(self)
print(f'DR_rust available: {get_version_str()}')
except ImportError:
if __name__ != '__main__':
traceback.print_exc()
self.DR_rust_available = False
self.use_DR_rust = self.use_DR_rust and self.DR_rust_available
self.flush_option()
def draw(self):
self.DR_rust_available = True
@property
def std_font_size(self) -> int:
return round(12 * self.gui_scale)
class _DR_runtime(Options):
"""
DR 的运行时配置/状态
"""
name = 'DR Runtime'
# game status
DR_version: Version = game_version
Build_version: Version = build_version
DR_Rust_version: Version = DR_rust_version
DR_Rust_get_version: Optional[Version] = None
DR_long_version: int = long_version
# run status
running: bool = False
start_time_ns: int = None
client_setup_cause_ns: int = None
server_setup_cause_ns: int = None
# game runtimes
global_logger: logging.Logger
# game options
_language = 'zh-CN'
default_language: str = 'zh-CN'
def init(self, **kwargs) -> None:
with contextlib.suppress(ImportError):
from libs.Difficult_Rocket_rs import get_version_str
self.DR_Rust_get_version = Version(get_version_str())
if self.DR_Rust_get_version != self.DR_Rust_version:
relationship = 'larger' if self.DR_Rust_version > self.DR_Rust_get_version else 'smaller'
warnings.warn(f'DR_rust builtin version is {self.DR_Rust_version} but true version is {get_version_str()}.\n'
f'Builtin version {relationship} than true version')
def __init__(self, **kwargs):
self.__options = {'language': self.language}
super().__init__(**kwargs)
@property
def language(self):
return self._language
@language.setter
def language(self, value: str):
if value == self._language:
return
assert isinstance(value, str), "DR language MUST be string"
self._language = value
from Difficult_Rocket.utils import translate
translate.tr._update_lang()
_DR_runtime.add_option('language', _DR_runtime.language)
DR_option = _DR_option()
DR_runtime = _DR_runtime()
if DR_option.playing:
from Difficult_Rocket.utils import new_thread
def think_it(something):
return something
@new_thread('think')
def think(some_thing_to_think):
gotcha = think_it(some_thing_to_think)
return gotcha