update mod stuf, add some more

This commit is contained in:
shenjack 2023-04-19 00:42:31 +08:00
parent e83c3ac7fb
commit 5b24a0a240
8 changed files with 84 additions and 84 deletions

View File

@ -25,12 +25,13 @@ from libs.MCDR.version import Version
game_version = Version("0.7.2.1") # 游戏版本
build_version = Version("1.2.1.0") # 编译文件版本(与游戏本体无关)
DR_rust_version = Version("0.2.6.1") # DR 的 Rust 编写部分的版本
Api_version = Version("0.0.1.0") # API 版本
Api_version = Version("0.0.2.0") # API 版本
__version__ = game_version
long_version: int = 13
long_version: int = 14
"""
long_version: 一个用于标记内部协议的整数
14: BaseScreen 的每一个函数都添加了一个参数: window: "ClientWindow"
13: DR_runtime 添加 API_version
12: 去除 DR_runtime global_logger
logging 自己拿去

View File

@ -6,7 +6,6 @@
import typing
from typing import List
# from pyglet.window import Window
from pyglet.event import EventDispatcher
@ -29,7 +28,20 @@ class BaseScreen(EventDispatcher):
self.window_pointer = main_window
if typing.TYPE_CHECKING:
def on_activate(self):
def on_command(self, command: CommandText, window: "ClientWindow"):
"""
命令输入事件
"""
def draw_update(self, tick: float, window: "ClientWindow"):
"""
画面更新
"""
"""
Pyglet 定义的事件
"""
def on_activate(self, window: "ClientWindow"):
"""The window was activated.
This event can be triggered by clicking on the title bar, bringing
@ -40,7 +52,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_close(self):
def on_close(self, window: "ClientWindow"):
"""The user attempted to close the window.
This event can be triggered by clicking on the "X" control box in
@ -53,7 +65,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_context_lost(self):
def on_context_lost(self, window: "ClientWindow"):
"""The window's GL context was lost.
When the context is lost no more GL methods can be called until it
@ -65,7 +77,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_context_state_lost(self):
def on_context_state_lost(self, window: "ClientWindow"):
"""The state of the window's GL context was lost.
pyglet may sometimes need to recreate the window's GL context if
@ -78,7 +90,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_deactivate(self):
def on_deactivate(self, window: "ClientWindow"):
"""The window was deactivated.
This event can be triggered by clicking on another application
@ -88,7 +100,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_draw(self):
def on_draw(self, window: "ClientWindow"):
"""The window contents must be redrawn.
The `EventLoop` will dispatch this event when the window
@ -108,7 +120,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_expose(self):
def on_expose(self, window: "ClientWindow"):
"""A portion of the window needs to be redrawn.
This event is triggered when the window first appears, and any time
@ -123,7 +135,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_file_drop(self, x, y, paths):
def on_file_drop(self, x, y, paths, window: "ClientWindow"):
"""File(s) were dropped into the window, will return the position of the cursor and
a list of paths to the files that were dropped.
@ -132,7 +144,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_hide(self):
def on_hide(self, window: "ClientWindow"):
"""The window was hidden.
This event is triggered when a window is minimised
@ -141,7 +153,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_key_press(self, symbol, modifiers):
def on_key_press(self, symbol, modifiers, window: "ClientWindow"):
"""A key on the keyboard was pressed (and held down).
Since pyglet 1.1 the default handler dispatches the :py:meth:`~pyglet.window.Window.on_close`
@ -156,7 +168,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_key_release(self, symbol, modifiers):
def on_key_release(self, symbol, modifiers, window: "ClientWindow"):
"""A key on the keyboard was released.
:Parameters:
@ -168,7 +180,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_mouse_motion(self, x, y, dx, dy):
def on_mouse_motion(self, x, y, dx, dy, window: "ClientWindow"):
"""The mouse was moved with no buttons held down.
:Parameters:
@ -184,7 +196,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers, window: "ClientWindow"):
"""The mouse was moved with one or more mouse buttons pressed.
This event will continue to be fired even if the mouse leaves
@ -208,7 +220,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_mouse_press(self, x, y, button, modifiers):
def on_mouse_press(self, x, y, button, modifiers, window: "ClientWindow"):
"""A mouse button was pressed (and held down).
:Parameters:
@ -225,7 +237,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_mouse_release(self, x, y, button, modifiers):
def on_mouse_release(self, x, y, button, modifiers, window: "ClientWindow"):
"""A mouse button was released.
:Parameters:
@ -242,7 +254,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_mouse_scroll(self, x, y, scroll_x, scroll_y):
def on_mouse_scroll(self, x, y, scroll_x, scroll_y, window: "ClientWindow"):
"""The mouse wheel was scrolled.
Note that most mice have only a vertical scroll wheel, so
@ -263,7 +275,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_mouse_enter(self, x, y):
def on_mouse_enter(self, x, y, window: "ClientWindow"):
"""The mouse was moved into the window.
This event will not be triggered if the mouse is currently being
@ -278,7 +290,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_mouse_leave(self, x, y):
def on_mouse_leave(self, x, y, window: "ClientWindow"):
"""The mouse was moved outside of the window.
This event will not be triggered if the mouse is currently being
@ -294,7 +306,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_move(self, x, y):
def on_move(self, x, y, window: "ClientWindow"):
"""The window was moved.
:Parameters:
@ -309,7 +321,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_refresh(self, dt):
def on_refresh(self, dt, window: "ClientWindow"):
"""The window contents must be redrawn.
The `EventLoop` will dispatch this event when the window
@ -328,7 +340,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_resize(self, width, height):
def on_resize(self, width, height, window: "ClientWindow"):
"""The window was resized.
The window will have the GL context when this event is dispatched;
@ -343,7 +355,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_show(self):
def on_show(self, window: "ClientWindow"):
"""The window was shown.
This event is triggered when a window is restored after being
@ -352,7 +364,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_text(self, text):
def on_text(self, text, window: "ClientWindow"):
"""The user input some text.
Typically this is called after :py:meth:`~pyglet.window.Window.on_key_press` and before
@ -371,7 +383,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_text_motion(self, motion):
def on_text_motion(self, motion, window: "ClientWindow"):
"""The user moved the text input cursor.
Typically this is called after :py:meth:`~pyglet.window.Window.on_key_press` and before
@ -407,7 +419,7 @@ class BaseScreen(EventDispatcher):
:event:
"""
def on_text_motion_select(self, motion):
def on_text_motion_select(self, motion, window: "ClientWindow"):
"""The user moved the text input cursor while extending the
selection.

View File

@ -121,7 +121,7 @@ def _call_screen_after(func: Callable) -> Callable:
for a_screen in self.screen_list:
if hasattr(a_screen, func.__name__):
try:
getattr(a_screen, func.__name__)(*args, **kwargs)
getattr(a_screen, func.__name__)(*args, **kwargs, window=self)
except Exception:
traceback.print_exc()
return result
@ -136,7 +136,7 @@ def _call_screen_before(func: Callable) -> Callable:
for a_screen in self.screen_list:
if hasattr(a_screen, func.__name__):
try:
getattr(a_screen, func.__name__)(*args, **kwargs)
getattr(a_screen, func.__name__)(*args, **kwargs, window=self)
except Exception:
traceback.print_exc()
result = func(self, *args, **kwargs)
@ -203,6 +203,7 @@ class ClientWindow(Window):
def setup(self):
self.load_fonts()
self.screen_list: List[BaseScreen]
# TODO 读取配置文件,加载不同的屏幕,解耦
self.screen_list.append(DRDEBUGScreen(self))
self.screen_list.append(DRScreen(self))
self.screen_list.append(SR1ShipRender(self))

View File

@ -234,7 +234,7 @@ class SR1ShipRender(BaseScreen):
self.window_pointer.height / 2) + 10, 0
self.need_update_parts = False
def on_draw(self):
def on_draw(self, window: "ClientWindow"):
if self.need_draw:
self.render_ship()
@ -267,7 +267,7 @@ class SR1ShipRender(BaseScreen):
if SR1ShipRender_Option.debug_mouse_d_pos:
self.debug_mouse_delta_line.draw()
def on_resize(self, width: int, height: int):
def on_resize(self, width: int, height: int, window: "ClientWindow"):
if not self.rendered:
return
self.debug_line.x = width / 2
@ -278,11 +278,11 @@ class SR1ShipRender(BaseScreen):
self.debug_mouse_delta_line.y = height / 2
self.update_parts()
def on_mouse_scroll(self, x: int, y: int, scroll_x: int, scroll_y: int):
def on_mouse_scroll(self, x: int, y: int, scroll_x: int, scroll_y: int, window: "ClientWindow"):
if not self.rendered:
return
mouse_dx = x - (self.window_pointer.width / 2)
mouse_dy = y - (self.window_pointer.height / 2)
mouse_dx = x - (window.width / 2)
mouse_dy = y - (window.height / 2)
# 鼠标缩放位置相对于屏幕中心的位置
mouse_dx_d = mouse_dx - self.camera_rs.dx
mouse_dy_d = mouse_dy - self.camera_rs.dy
@ -305,15 +305,15 @@ class SR1ShipRender(BaseScreen):
self.debug_mouse_line.x2, self.debug_mouse_line.y2 = x, y
self.debug_mouse_delta_line.x2 = (mouse_dx - self.camera_rs.dx) * (1 - (0.5 ** scroll_y)) + (
self.window_pointer.width / 2)
window.width / 2)
self.debug_mouse_delta_line.y2 = (mouse_dy - self.camera_rs.dy) * (1 - (0.5 ** scroll_y)) + (
self.window_pointer.height / 2)
window.height / 2)
self.debug_mouse_label.text = f'x: {mouse_dx} y: {mouse_dy}'
self.debug_mouse_label.position = x, y + 10, 0
self.need_update_parts = True
# self.update_parts()
def on_command(self, command: CommandText):
def on_command(self, command: CommandText, window: "ClientWindow"):
if command.re_match('render'):
if command.re_match('reset'):
self.camera_rs.zoom = 1
@ -358,7 +358,7 @@ class SR1ShipRender(BaseScreen):
image_data = screenshot(self.window_pointer)
image_data.save('test.png')
def on_mouse_drag(self, x: int, y: int, dx: int, dy: int, buttons: int, modifiers: int):
def on_mouse_drag(self, x: int, y: int, dx: int, dy: int, buttons: int, modifiers: int, window: "ClientWindow"):
if not self.focus:
return
self.camera_rs.dx += dx
@ -366,7 +366,7 @@ class SR1ShipRender(BaseScreen):
self.need_update_parts = True
# self.update_parts()
def on_file_drop(self, x: int, y: int, paths: List[str]):
def on_file_drop(self, x: int, y: int, paths: List[str], window: "ClientWindow"):
for path in paths:
if self.load_xml(path): # 加载成功一个就停下
break

View File

@ -38,21 +38,21 @@ class DRDEBUGScreen(BaseScreen):
batch=self.main_batch, group=self.main_group)
self.fps_label.text = "11111114514"
def draw_update(self, tick: float):
self.update_label()
def draw_update(self, tick: float, window: "ClientWindow"):
self.update_label(window)
def update_label(self):
def update_label(self, window: "ClientWindow"):
now_FPS = get_frequency()
self.fps_label.text = (
f'FPS: {self.window_pointer.fps_log.fps: >5.1f}('
f'{self.window_pointer.fps_log.middle_fps: >5.1f})[{now_FPS: >.7f}]\n '
f'{self.window_pointer.fps_log.max_fps: >7.1f} '
f'{self.window_pointer.fps_log.min_fps:>5.1f}'
f'FPS: {window.fps_log.fps: >5.1f}('
f'{window.fps_log.middle_fps: >5.1f})[{now_FPS: >.7f}]\n '
f'{window.fps_log.max_fps: >7.1f} '
f'{window.fps_log.min_fps:>5.1f}'
)
def on_resize(self, width, height):
def on_resize(self, width, height, window: "ClientWindow"):
self.fps_label.y = height - 10
def on_draw(self, *dt):
def on_draw(self, *dt, window: "ClientWindow"):
self.main_batch.draw()
# print(self.window_pointer.try_if_runs)

View File

@ -10,3 +10,9 @@ mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
from Difficult_Rocket.api.screen import BaseScreen
__all__ = ['BaseScreen']

View File

@ -1,34 +0,0 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
"""
这里是所有客户端 mod 加载器的装饰器实现
可以实现类似
from Difficult_Rocket.mods.client import KeyBinding
@KeyBinding()
"""
def KeyBinding(func):
"""
客户端键盘事件传递装饰器
"""
def wrapper(*args, **kwargs):
func(*args, **kwargs)
return wrapper

View File

@ -22,7 +22,7 @@
- [![Readme-gitee](https://img.shields.io/badge/Readme-中文(点我!)-blue.svg?style=flat-square)](../../README.md)
- Using [SemVer 2.0.0](https://semver.org/) to manage version
## 202304 DR `0.7.2.2` + DR_rs `0.2.7.1`
## 202304 DR `0.7.2.2` + DR_rs `0.2.7.1` + DR_api `0.0.2.0` + 14
### DR_rs V 0.2.6.1
@ -45,6 +45,11 @@
- `to_sr_part_data`
- `to_raw_part_data`
### DR_api V `0.0.2.0`
- 用于适应 `api.screen` 的变化
- Used to adapt to the changes in `api.screen`
### Changes
- `DR.py`
@ -69,6 +74,15 @@
- Now the system information will be output in the log
- (Actually it's used by `crash`)
### breaking changes
- `api.screen`
- `BaseScreen`
- 为每一个函数添加了 `window: "ClientWindow"` 参数
- 用于传递父窗口信息
- For each function, add `window: "ClientWindow"` parameter
- Used to pass parent window information
### Translate
- 添加