diff --git a/.gitignore b/.gitignore index 0cdeb22..f24647f 100644 --- a/.gitignore +++ b/.gitignore @@ -145,5 +145,4 @@ dmypy.json .gitattributes # some other thing -other things/ -.git-/ \ No newline at end of file +other things/ \ No newline at end of file diff --git a/Difficult_Rocket/api/Exp/command.py b/Difficult_Rocket/api/Exp/command.py index fe6c6e6..bc88d91 100644 --- a/Difficult_Rocket/api/Exp/command.py +++ b/Difficult_Rocket/api/Exp/command.py @@ -35,13 +35,6 @@ class CommandQMarkMissing(CommandParseError): 例如: /command "aawwdawda awdaw """ -class CommandQMarkConflict(CommandParseError): - """命令中引号位置冲突 - 例如: /command "aaaa "aaaa aaaa""" - first_qmark_pos = None - conflict_qmark_pos = None - - class CommandQMarkPreMissing(CommandQMarkMissing): """命令中 前面的引号缺失 例如: /command aaaa" aaaaaa""" diff --git a/Difficult_Rocket/client/__init__.py b/Difficult_Rocket/client/__init__.py index 6b85fd4..e2d0164 100644 --- a/Difficult_Rocket/client/__init__.py +++ b/Difficult_Rocket/client/__init__.py @@ -23,7 +23,7 @@ from decimal import Decimal # Difficult_Rocket function from Difficult_Rocket.command import line, tree -from Difficult_Rocket.utils import new_thread +from Difficult_Rocket.api import new_thread from Difficult_Rocket.utils.translate import tr from Difficult_Rocket.guis.widgets import InputBox # from Difficult_Rocket.client.screen import DRScreen diff --git a/Difficult_Rocket/client/fps/fps_log.py b/Difficult_Rocket/client/fps/fps_log.py index 7860eba..03f57ed 100644 --- a/Difficult_Rocket/client/fps/fps_log.py +++ b/Difficult_Rocket/client/fps/fps_log.py @@ -19,7 +19,6 @@ from decimal import Decimal from libs.pyglet.clock import get_frequency - class FpsLogger: def __init__(self, stable_fps: int = 60, @@ -33,6 +32,7 @@ class FpsLogger: self._max_fps = stable_fps self._min_fps = stable_fps + def update_tick(self, tick: Decimal): now_fps = get_frequency() diff --git a/Difficult_Rocket/command/api.py b/Difficult_Rocket/command/api.py index 1b0b633..af36309 100644 --- a/Difficult_Rocket/command/api.py +++ b/Difficult_Rocket/command/api.py @@ -14,7 +14,7 @@ gitee: @shenjackyuanjie # system function import re -from typing import Union, Optional, Type, Tuple, List +from typing import Union, Optional, Type, Tuple # DR from Difficult_Rocket.api.Exp.command import * @@ -39,16 +39,22 @@ class CommandText: self.tree_node = tree_list @staticmethod - def parse_text(raw_text: str) -> str: - q_mark_iter = re.finditer('\\"', raw_text) - for q_mark in q_mark_iter: - ... + def parse_command(raw_command: Union[str, "CommandText"]) -> Tuple[list, Union[Type[CommandParseError], type(True)]]: + spilt_list = str(raw_command).split(" ") - @staticmethod - def parse_command(raw_command: Union[str, "CommandText"]) -> Tuple[List[str], Union[CommandParseError, type(True)]]: - spilt_list = re.split(r'', raw_command) - done_list = [re.sub(r'\\"', '"', raw_text) for raw_text in spilt_list] - return done_list, True # 完事了 + spilts = [None, None] + for spited in spilt_list: + if len(spited) > 1: + if spited[0] == "\"": # 开头有一个 " + if spilts[0] is None: # 如果没有标记一个字符串开头 + pass + else: # 已经标记了一个字符串开头 + return spilt_list, CommandQMarkPosError + if spited[-1] == "\"" and spited[-2] != "\\": # 末尾有一个没有被转义的 " + + ... + + return spilt_list, True def find(self, text: str) -> Union[str, bool]: finding = re.match(text, self.text) diff --git a/Difficult_Rocket/command/line.py b/Difficult_Rocket/command/line.py index d8fa9d0..282cb91 100644 --- a/Difficult_Rocket/command/line.py +++ b/Difficult_Rocket/command/line.py @@ -19,7 +19,7 @@ from decimal import Decimal # from DR from utils import translate -from Difficult_Rocket.utils import new_thread +from Difficult_Rocket.api import new_thread from Difficult_Rocket.command.api import CommandText # from libs.pyglet diff --git a/Difficult_Rocket/utils/__init__.py b/Difficult_Rocket/utils/__init__.py index 9c1851b..43badfc 100644 --- a/Difficult_Rocket/utils/__init__.py +++ b/Difficult_Rocket/utils/__init__.py @@ -10,7 +10,3 @@ mail: 3695888@qq.com github: @shenjackyuanjie gitee: @shenjackyuanjie """ - -from .new_thread import new_thread - -__all__ = ['new_thread'] diff --git a/Difficult_Rocket/utils/new_thread.py b/Difficult_Rocket/utils/new_thread.py index b6b96d4..27badac 100644 --- a/Difficult_Rocket/utils/new_thread.py +++ b/Difficult_Rocket/utils/new_thread.py @@ -19,6 +19,11 @@ GNU Lesser General Public License v3.0(GNU LGPL v3) (have some changes) """ +__all__ = [ + 'new_thread', + 'FunctionThread' +] + def copy_signature(target: Callable, origin: Callable) -> Callable: """ diff --git a/Difficult_Rocket/utils/tools.py b/Difficult_Rocket/utils/tools.py index 6a636df..c8c63b8 100644 --- a/Difficult_Rocket/utils/tools.py +++ b/Difficult_Rocket/utils/tools.py @@ -194,3 +194,142 @@ def C_R_P(position, degrees): # stand for calculation sin = math.sin(radians) rotated_pos = (position[0] * cos - position[1] * sin, position[0] * sin + position[1] * cos) return rotated_pos + + +""" +Physics calculation +""" + + +def is_decimal(A: any) -> bool: + if isinstance(A, decimal.Decimal): + return False + else: + return True + + +def F_D(A: decimal, B: decimal) -> decimal: + if is_decimal(A) and is_decimal(B): + return A / B + + +def F_Mu(A: decimal, B: decimal) -> decimal: + if is_decimal(A) and is_decimal(B): + return A * B + + +def F_Mi(A: decimal, B: decimal) -> decimal: + if is_decimal(A) and is_decimal(B): + return A - B + + +def F_A(A: decimal, B: decimal) -> decimal: + if is_decimal(A) and is_decimal(B): + return A + B + + +def D_C(listA: list, listB: list): # stand for Duplicate check + """ + usage:\n + input two list\n + the fun will do duplicate check and sort then\n + the fun won't return any thing just change the list now + """ + for unit in listB: + if unit in listA: + listA.remove(unit) + listB.remove(unit) + else: + continue + listA.sort() + listB.sort() + + +def S_C_float_check(SC): # stand for Scientific notation's float check + """ + formats: + SC list format:docs.basic_config.json:basic_number""" + while SC[0] >= 10: + SC[0] = F_D(SC[0], 10) + SC[1] += 1 + while SC[0] < 1: + SC[0] = F_Mu(SC[0], 10) + SC[1] -= 1 + + +def S_N_M(*SN): # stand for Scientific notation multiple + """ + formats: + A & B & C list format:docs.basic_config.json:basic_number""" + if len(SN) < 2: + raise TypeError('it need more than 1!') + elif len(SN) == 2: + return __S_N_M(SN[0], SN[1]) + else: + R = __S_N_M(SN[0], SN[1]) + for A in SN[2:]: + R = __S_N_M(R, A) + return R + + +def __S_N_M(A, B): + """ + formats: + A & B list format:docs.basic_config.json:basic_number""" + R = [F_Mu(A[0], B[0]), A[1] + B[1]] + S_C_float_check(R) + Unit1, Unit2 = A[2] + B[2], A[3] + B[3] + if Unit1 is None: + Unit1 = [] + D_C(Unit1, Unit2) + R += [Unit1, Unit2] + return R + + +def S_N_D(A, B): # stand for Scientific notation divided + """ + formats: + A & B list format:docs.basic_config:basic_number""" + R = [F_D(A[0], B[0]), A[1] - B[1]] + S_C_float_check(R) + Unit1, Unit2 = A[2] + B[3], A[3] + B[2] + if Unit1 is None: + Unit1 = [] + D_C(Unit1, Unit2) + R += [Unit1, Unit2] + return R + + +def G_C(M, m, R, G): # stand for gravity calculation + """ + formats: + M : ship's mass + m : planet's mass + R : distance to the planet + G : Gravitational constant + M & m & R format: docs.basic_config:basic_number + """ + g = configs.basic_force() + A = S_N_M(M, m, G) + g = S_N_D(A, S_N_M(R, R)) + return g + + +def distance(A, B): + """ + formats: + A & B format: docs.basic_config:basic_poi + """ + poi_dis = configs.basic_poi() + for x in A, B: + x = decimal.Decimal(str(x)) + xd = A[0] - B[0] + yd = A[1] - B[1] + poi_dis[0] = xd + poi_dis[1] = yd + # 勾股定理 + poi_dis[0] **= 2 + poi_dis[1] **= 2 + poi_dis.append(poi_dis[0] + poi_dis[1]) + poi_dis[2] **= 0.5 + return poi_dis[2] diff --git a/Difficult_Rocket/utils/translate.py b/Difficult_Rocket/utils/translate.py index 877de4c..338c12c 100644 --- a/Difficult_Rocket/utils/translate.py +++ b/Difficult_Rocket/utils/translate.py @@ -35,10 +35,10 @@ class Lang: lang.lang(xxx, xxx)来获取翻译过的值 """ - def __init__(self, language: str = 'zh-CN') -> None: + def __init__(self, language: str = 'zh-CN'): self.语言 = language - self.翻译结果 = tools.load_file(f'configs/lang/{language}.toml') - self.默认翻译 = tools.load_file('configs/lang/zh-CN.toml') + self.翻译结果 = tools.load_file(f'configs/lang/{language}.json5') + self.默认翻译 = tools.load_file('configs/lang/zh-CN.json5') def __str__(self) -> str: return self.语言 @@ -52,22 +52,22 @@ class Lang: except KeyError: raise LanguageError(f'there\'s no key {item} in both {self.语言} and zh-CN') - def __setitem__(self, key, value) -> None: + def __setitem__(self, key, value): if key == 'language' or key == 'lang': try: - self.翻译结果 = tools.load_file(f'configs/lang/{value}.toml') + self.翻译结果 = tools.load_file(f'configs/lang/{value}.json5') self.语言 = value except FileNotFoundError: - raise LanguageError(f'{value}\'s language toml file not found') + raise LanguageError(f'{value}\'s language json5 file not found') else: raise NotImplementedError def set_language(self, language) -> None: try: - self.翻译结果 = tools.load_file(f'configs/lang/{language}.toml') + self.翻译结果 = tools.load_file(f'configs/lang/{language}.json5') self.语言 = language except FileNotFoundError: - raise LanguageError(f'{language}\'s language toml file not found') + raise LanguageError(f'{language}\'s language json5 file not found') def lang(self, *args) -> Union[int, str, list, dict]: try: diff --git a/try/mcdr/command_tree.py b/try/mcdr/command_tree.py deleted file mode 100644 index c109817..0000000 --- a/try/mcdr/command_tree.py +++ /dev/null @@ -1,11 +0,0 @@ -# ------------------------------- -# Difficult Rocket -# Copyright © 2021-2022 by shenjackyuanjie -# All rights reserved -# ------------------------------- - -from mcdreforged.api.command import * - -test_command_tree = Literal('!!test') - -test_command_tree.parse('aaaaa')