Compare commits

...

16 Commits

Author SHA1 Message Date
12c974c825
呐呐呐 2024-08-01 01:51:45 +08:00
931852dc98
稍微重命名一下 2024-07-31 22:51:35 +08:00
c6ad46a81f
加上 color 的定义,覆盖一下 super 2024-07-31 19:17:35 +08:00
9c1149dea8
ruaaaa 2024-07-31 19:04:55 +08:00
2ea9019afa
aaaa 2024-07-29 23:43:00 +08:00
a7517173f9
添加 highlight 2024-07-29 23:06:14 +08:00
6fa7809aa6
好好好 2024-07-29 18:54:26 +08:00
443fbefbee
这个shape可算是写完了(泪 2024-07-29 18:12:54 +08:00
e6a3a46734
进行一个按钮的写 2024-07-28 10:39:13 +08:00
6490ace480
死灵法师出现了! wtm! 2024-07-28 08:05:05 +08:00
695fad3c24
clockwise? 2024-07-27 03:35:27 +08:00
114f3c6e6a
property 2024-07-27 03:31:54 +08:00
7b1b9202c6
就是说……
太长了点
2024-07-27 03:23:40 +08:00
d191a3650c
修复了目前的一些问题(就是懒得具体看了 2024-07-27 00:28:09 +08:00
649cd4cd9c
fix 一些小东西 2024-07-26 11:41:54 +08:00
6a0c7cf11d
update dependecy 2024-07-26 00:30:29 +08:00
16 changed files with 857 additions and 295 deletions

View File

@ -4,7 +4,9 @@
# All rights reserved
# -------------------------------
from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING
from Difficult_Rocket.api.types import Options, Version
@ -13,6 +15,21 @@ build_version = Version("3.0.0.0") # 编译文件版本(与游戏本体无关)
api_version = Version("0.1.2.2") # API 版本
__version__ = sdk_version
if TYPE_CHECKING:
from Difficult_Rocket import (
api,
data,
client,
command,
crash,
exception,
server,
mod,
utils,
main,
runtime
)
__all__ = [
# __init__
"DR_status",

View File

@ -116,8 +116,8 @@ class BaseScreen(EventDispatcher, Options):
:event:
"""
def on_draw(self, dt: float, window: ClientWindow): # TODO: wait for pyglet 2.1
# def on_draw(self, window: ClientWindow):
# def on_draw(self, dt: float, window: ClientWindow): # TODO: wait for pyglet 2.1
def on_draw(self, window: ClientWindow):
"""The window contents must be redrawn.
The `EventLoop` will dispatch this event when the window

View File

@ -285,7 +285,6 @@ class ClientWindow(Window):
self.push_handlers(self.input_box)
self.input_box.enabled = True
# 设置刷新率
# pyglet.clock.schedule_interval(self.draw_update, float(self.SPF))
# 完成设置后的信息输出
self.logger.info(tr().window.os.pid_is().format(os.getpid(), os.getppid()))
end_time = time.time_ns()
@ -295,7 +294,7 @@ class ClientWindow(Window):
self.logger.debug(tr().window.setup.use_time_ns().format(self.use_time))
def setup(self):
self.set_icon(pyglet.image.load("assets/textures/icon.png"))
self.set_icon(pyglet.image.load("assets/textures/icon.ico"))
self.load_fonts()
self.screen_list["DR_debug"] = DRDEBUGScreen(self)
self.game.dispatch_mod_event("on_client_start", game=self.game, client=self)
@ -307,10 +306,9 @@ class ClientWindow(Window):
pyglet_load_fonts_folder(fonts_folder_path)
def start_game(self) -> None:
self.set_icon(pyglet.image.load("assets/textures/icon.png"))
try:
pyglet.clock.schedule_interval(self.draw_call, float(self.SPF))
pyglet.app.run(None)
# pyglet.clock.schedule(self.draw_call)
pyglet.app.run(0)
except KeyboardInterrupt:
self.logger.warn(
"==========client stop. KeyboardInterrupt info==========", tag="starter"
@ -356,17 +354,17 @@ class ClientWindow(Window):
now_FPS = pyglet.clock.get_frequency()
self.fps_log.update_tick(now_FPS, decimal_tick)
def draw_call(self, dt: float):
def draw_call(self):
self.switch_to()
self.on_draw(dt)
self.on_draw()
self.flip()
@_call_screen_after
def on_draw(self, dt: float):
def on_draw(self, *dt: float):
while (command := self.game.console.get_command()) is not None:
self.on_command(line.CommandText(command))
self.clear()
self.draw_update(dt)
self.draw_update(float(self.SPF))
self.draw_batch()
@_call_screen_after

View File

@ -4,28 +4,656 @@
# All rights reserved
# -------------------------------
from typing import Optional, Tuple, Type
from __future__ import annotations
import math
from typing import Optional, Tuple, Type, Sequence
from dataclasses import dataclass
from enum import Enum
# from libs import pyglet
import pyglet
from pyglet.gl import GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA
from pyglet.graphics.shader import ShaderProgram
from pyglet.text import Label
from pyglet.gui import widgets
from pyglet.window import mouse
# from pyglet.sprite import Sprite
from pyglet.shapes import Rectangle, BorderedRectangle
from pyglet.shapes import Rectangle, BorderedRectangle, ShapeBase, _rotate_point
from pyglet.gui.widgets import WidgetBase
# from pyglet.image import AbstractImage
from pyglet.graphics import Batch, Group
from Difficult_Rocket.api.types import Options, FontData
# from Difficult_Rocket import DR_status
RGBA = Tuple[int, int, int, int]
@dataclass
class WikiShapeColors:
# 这里都是 未按下的颜色
# 外面一圈高光
highlight: RGBA = (255, 255, 255, 255)
# 边框
border: RGBA = (0, 0, 0, 255)
# 下巴
down_pad: RGBA = (49, 50, 51, 255)
# 左下角和右上角的重叠点
corner: RGBA = (124, 124, 125, 255)
# 左上拐角
left_up: RGBA = (109, 109, 110, 255)
# 右下拐角
right_down: RGBA = (90, 91, 92, 255)
# 内部填充
inner: RGBA = (72, 73, 74, 255)
class WikiButtonStyles(Enum):
wiki_normal = WikiShapeColors()
wiki_press = WikiShapeColors(
corner=(106, 107, 108, 255),
down_pad=(35, 35, 36, 255),
left_up=(90, 91, 92, 255),
right_down=(70, 71, 71, 255),
inner=(49, 50, 51, 255),
)
game1_normal = WikiShapeColors(
border=(30, 30, 31, 255),
corner=(253, 253, 254, 255),
down_pad=(88, 88, 90, 255),
left_up=(251, 251, 253, 255),
right_down=(248, 250, 251, 255),
inner=(244, 246, 249, 255),
)
game1_select = WikiShapeColors(
border=(30, 30, 31, 255),
corner=(244, 244, 245, 255),
down_pad=(88, 88, 90, 255),
left_up=(236, 237, 238, 255),
right_down=(227, 227, 229, 255),
inner=(208, 209, 212, 255),
)
game1_press = WikiShapeColors(
border=(30, 30, 31, 255),
corner=(236, 236, 237, 255),
down_pad=(110, 111, 114, 255),
left_up=(224, 224, 225, 255),
right_down=(208, 209, 211, 255),
inner=(177, 178, 181, 255),
)
game2_normal = WikiShapeColors(
border=(30, 30, 31, 255),
corner=(131, 190, 109, 255),
down_pad=(29, 77, 19, 255),
left_up=(1117, 183, 93, 255),
right_down=(99, 174, 73, 255),
inner=(82, 165, 53, 255),
)
game2_select = WikiShapeColors(
border=(30, 30, 31, 255),
corner=(114, 167, 99, 255),
down_pad=(29, 77, 19, 255),
left_up=(99, 157, 82, 255),
right_down=(79, 145, 60, 255),
inner=(60, 133, 39, 255),
)
game2_press = WikiShapeColors(
border=(30, 30, 31, 255),
corner=(102, 143, 91, 255),
down_pad=(14, 77, 3, 255),
left_up=(85, 131, 73, 255),
right_down=(63, 115, 50, 255),
inner=(42, 100, 28, 255),
)
@dataclass
class WikiButtonStatus:
popout: bool = False
highlight: bool = False
pad: float = 2
down_pad: float = 5
colors: WikiShapeColors = WikiShapeColors()
class WikiButtonShape(ShapeBase):
def __init__(
self,
x: float,
y: float,
width: float,
height: float,
pad: float = 2,
down_pad: float = 5.0,
pop_out: bool = True,
highlight: bool = False,
colors: WikiShapeColors | None = None,
blend_src: int = GL_SRC_ALPHA,
blend_dest: int = GL_ONE_MINUS_SRC_ALPHA,
batch: Batch | None = None,
group: Group | None = None,
program: ShaderProgram | None = None,
):
self._x = x
self._y = y
self._width = width
self._height = height
self._pad = pad
self._down_pad = down_pad
self._pop_out = pop_out
self._highlight = highlight
self._colors = colors or WikiButtonStyles.wiki_normal.value
vertex = 32
if pop_out:
vertex += 4
super().__init__(vertex, blend_src, blend_dest, batch, group, program)
@property
def pop_out(self) -> bool:
return self._pop_out
@property
def pad(self) -> float:
return self._pad
@property
def down_pad(self) -> float:
return self._down_pad
@property
def color(self) -> WikiShapeColors:
return self._colors
@property
def colors(self) -> WikiShapeColors:
return self._colors
@property
def highlight(self) -> bool:
return self._highlight
@pop_out.setter
def pop_out(self, value: bool) -> None:
self._pop_out = value
self._create_vertex_list()
@pad.setter
def pad(self, value: float) -> None:
self._pad = value
self._update_vertices()
@down_pad.setter
def down_pad(self, value: float) -> None:
self._down_pad = value
self._update_vertices()
@color.setter
def color(self, value: WikiShapeColors) -> None:
self._colors = value
self._update_color()
@colors.setter
def colors(self, value: WikiShapeColors) -> None:
self._colors = value
self._update_color()
@highlight.setter
def highlight(self, value: bool) -> None:
self._highlight = value
self._create_vertex_list()
def _update_color(self) -> None:
if self._pop_out:
colors = (
self._colors.border * 4
+ self._colors.down_pad * 4
+ self._colors.corner * 8
+ self._colors.right_down * 6
+ self._colors.left_up * 6
+ self._colors.inner * 4
+ self._colors.highlight * 4
)
else:
colors = (
self._colors.border * 4
+ self._colors.corner * 8
+ self._colors.right_down * 6
+ self._colors.left_up * 6
+ self._colors.inner * 4
+ self._colors.highlight * 4
)
self._vertex_list.colors[:] = colors
def __contains__(self, point: tuple[float, float]) -> bool:
assert len(point) == 2
point = _rotate_point((self._x, self._y), point, math.radians(self._rotation))
x, y = self._x - self._anchor_x, self._y - self._anchor_y
return x < point[0] < x + self._width and y < point[1] < y + self._height
def _get_vertices(self) -> Sequence[float]:
if not self._visible:
return (0, 0) * self._num_verts
left = -self._anchor_x
right = left + self._width
bottom = -self.anchor_y
top = bottom + self._height
pad = self._pad
down_pad = self._down_pad
in_left = left + pad
i_right = right - pad
in_bottom = bottom + pad
inner_top = top - pad
"""
pop out ( 默认的弹出状态 )
20 顶点 (还有外面一圈高光)
3 2
18 15 14
19 16 17
11 10 13
7 9 6
4 5
0 1
unpop
16 顶点
3 2
7 15 6
13 12 14
10 9 11
4 8 5
0 1
"""
# fmt: off
out_border = [
left, bottom, # 0
right, bottom, # 1
right, top, # 2
left, top, # 3
]
if self._highlight:
highlight = [
left - pad, bottom - pad, # max+1
right + pad, bottom - pad, # max+2
right + pad, top + pad, # max+3
left - pad, top + pad, # max+4
]
else:
highlight = [0, 0, 0, 0, 0, 0, 0, 0]
if self._pop_out:
down_top = in_bottom + down_pad
# 底下那个下巴
down_part = [
in_left, in_bottom, # 4
i_right, in_bottom, # 5
i_right, down_top, # 6
in_left, down_top, # 7
]
# 左下角的小方块
left_down = [
in_left, down_top, # 8
in_left + pad, down_top, # 9
in_left + pad, down_top + pad, # 10
in_left, down_top + pad, # 11
]
# 右上角的小方块
right_up = [
i_right - pad, inner_top - pad, # 12
i_right, inner_top - pad, # 13
i_right, inner_top, # 14
i_right - pad, inner_top, # 15
]
# 左上的拐弯条
# 1 2
# 4 3
# 0 5
left_up = [
in_left, down_top + pad, # 16
in_left, inner_top, # 17
i_right - pad, inner_top, # 18
i_right - pad, inner_top - pad, # 19
in_left + pad, inner_top - pad, # 20
in_left + pad, down_top + pad, # 21
]
# 右下的拐弯条
# 3 2
# 5 4
# 0 1
right_down = [
in_left + pad, down_top, # 22
i_right, down_top, # 23
i_right, inner_top - pad, # 24
i_right - pad, inner_top - pad, # 25
i_right - pad, down_top + pad, # 26
in_left + pad, down_top + pad, # 27
]
# 中间的方块
inner_box = [
in_left + pad, down_top + pad, # 28
i_right - pad, down_top + pad, # 29
i_right - pad, inner_top - pad, # 30
in_left + pad, inner_top - pad, # 31
]
return (out_border +
down_part +
left_down + right_up +
left_up + right_down +
inner_box +
highlight)
else:
# 左下角的小方块
left_down = [
in_left, in_bottom, # 4
in_left + pad, in_bottom, # 5
in_left + pad, in_bottom + pad, # 6
in_left, in_bottom + pad, # 7
]
# 右上角的小方块
right_up = [
i_right - pad, inner_top - pad, # 8
i_right, inner_top - pad, # 9
i_right, inner_top, # 10
i_right - pad, inner_top, # 11
]
# 左上的拐弯条
# 1 2
# 4 3
# 0 5
left_up = [
in_left, in_bottom + pad, # 12
in_left, inner_top, # 13
i_right - pad, inner_top, # 14
i_right - pad, inner_top - pad, # 15
in_left + pad, inner_top - pad, # 16
in_left + pad, in_bottom + pad, # 17
]
# 右下的拐弯条
# 3 2
# 5 4
# 0 1
right_down = [
in_left + pad, in_bottom, # 18
i_right, in_bottom, # 19
i_right, inner_top - pad, # 20
i_right - pad, inner_top - pad, # 21
i_right - pad, in_bottom + pad, # 22
in_left + pad, in_bottom + pad, # 23
]
# 中间的方块
inner_box = [
in_left + pad, in_bottom + pad, # 24
i_right - pad, in_bottom + pad, # 25
i_right - pad, inner_top - pad, # 26
in_left + pad, inner_top - pad, # 27
]
return (out_border +
left_down + right_up +
left_up + right_down +
inner_box +
highlight)
# fmt: on
def _create_vertex_list(self) -> None:
if self._vertex_list:
self._vertex_list.delete()
colors = self._colors.border * 4
# fmt: off
indices = [
0, 1, 2, # 最基本的两个三角形
0, 2, 3, # 用来画黑色边框
]
if self._pop_out:
indices += [4, 5, 6, 4, 6, 7] # 下巴
indices += [8, 9, 10, 8, 10, 11] # 左下角
indices += [12, 13, 14, 12, 14, 15] # 右上角
indices += [16, 17, 20, 16, 20, 21,
18, 19, 20, 18, 17, 20] # 左上拐弯
indices += [22, 23, 26, 22, 26, 27,
23, 24, 26, 24, 25, 26] # 右下拐弯
indices += [28, 29, 30, 28, 30, 31] # 中间的方块
if self._highlight:
indices = [32, 33, 34, 32, 34, 35] + indices # 高光
colors += (
self._colors.down_pad * 4
+ self._colors.corner * 8
+ self._colors.right_down * 6
+ self._colors.left_up * 6
+ self._colors.inner * 4
+ self._colors.highlight * 4
)
self._num_verts = 36
else:
indices += [4, 5, 6, 4, 6, 7] # 左下角
indices += [8, 9, 10, 8, 10, 11] # 右上角
indices += [12, 16, 17, 12, 13, 16,
14, 15, 16, 14, 13, 16] # 左上拐弯
indices += [18, 22, 23, 18, 19, 22,
20, 21, 22, 20, 19, 22] # 右下拐弯
indices += [24, 25, 26, 24, 26, 27]
if self._highlight:
indices = [28, 29, 30, 28, 30, 31] + indices # 高光
colors += (
self._colors.corner * 8
+ self._colors.right_down * 6
+ self._colors.left_up * 6
+ self._colors.inner * 4
+ self._colors.highlight * 4
)
self._num_verts = 32
# fmt: on
self._vertex_list = self._program.vertex_list_indexed(
self._num_verts,
self._draw_mode,
indices,
self._batch,
self._group,
position=("f", self._get_vertices()),
colors=("Bn", colors),
translation=("f", (self._x, self._y) * self._num_verts),
)
def _update_vertices(self) -> None:
self._vertex_list.position[:] = self._get_vertices()
class 拐角(ShapeBase):
def __init__(
self,
x: float,
y: float,
width: float,
height: float,
thick1: float = 1.0,
thick2: float = 1.0,
color: tuple[int, int, int, int] = (255, 255, 255, 255),
clockwise: bool = True,
blend_src: int = GL_SRC_ALPHA,
blend_dest: int = GL_ONE_MINUS_SRC_ALPHA,
batch: Batch | None = None,
group: Group | None = None,
program: ShaderProgram | None = None,
) -> None:
self._x = x
self._y = y
self._width = width
self._height = height
self._thick1 = thick1
self._thick2 = thick2
self._clockwise = clockwise
self._rgba = color
super().__init__(6, blend_src, blend_dest, batch, group, program)
def __contains__(self, point: tuple[float, float]) -> bool:
assert len(point) == 2
# 先大框
point = _rotate_point((self._x, self._y), point, math.radians(self._rotation))
x, y = self._x - self._anchor_x, self._y - self._anchor_y
return (x < point[0] < x + self._width and y < point[1] < y + self._height) and (
(
(point[1] > y + self._height - self._thick2)
or (point[0] < x + self._thick1)
)
if self._clockwise
else (
(point[1] < y + self._thick1)
or (point[0] > x + self._width - self._thick2)
)
)
def _get_vertices(self) -> Sequence[float]:
if not self.visible:
return (0, 0) * self._num_verts
t1, t2 = self._thick1, self._thick2
left = -self._anchor_x
bottom = -self._anchor_y
right = left + self._width
top = bottom + self._height
x1 = left
x2 = left + t1
x3 = right - t1
x4 = right
y1 = bottom
y2 = bottom + t1
y3 = top - t2
y4 = top
# fmt: off
return ([
x1, y1,
x1, y4,
x4, y4,
x4, y3,
x2, y3,
x2, y1
] if self._clockwise else[
x1, y1,
x4, y1,
x4, y4,
x3, y4,
x3, y2,
x1, y2
])
# fmt: on
def _update_color(self) -> None:
self._vertex_list.colors[:] = self._rgba * self._num_verts
def _update_vertices(self) -> None:
self._vertex_list.position[:] = self._get_vertices() # pyright: ignore reportAttributeAccessIssue
def _create_vertex_list(self) -> None:
# 1 2
# 4 3
# 0 5
# or
# 3 2
# 5 4
# 0 1
# fmt: off
groups = [
1, 2, 3,
1, 3, 4,
1, 4, 5,
1, 5, 0,
]
# fmt: on
self._vertex_list = self._program.vertex_list_indexed(
self._num_verts,
self._draw_mode,
groups,
self._batch, # pyright: ignore reportArgumentType
self._group, # pyright: ignore reportArgumentType
position=("f", self._get_vertices()),
colors=("Bn", self._rgba * self._num_verts),
translation=("f", (self._x, self._y) * self._num_verts),
)
@property
def thick1(self) -> float:
return self._thick1
@property
def thick2(self) -> float:
return self.thick2
@property
def thickness(self) -> float:
return self._thick1
@thickness.setter
def thickness(self, value: float):
self._thick1 = value
self._thick2 = value
self._update_vertices()
@property
def width(self) -> float:
return self._width
@property
def height(self) -> float:
return self.height
@property
def clockwise(self) -> bool:
return self._clockwise
@thick1.setter
def thick1(self, value: float):
self._thick1 = value
self._update_vertices()
@thick2.setter
def thick2(self, value: float):
self._thick2 = value
self._update_vertices()
@width.setter
def width(self, value: float):
self._width = value
self._update_vertices()
@height.setter
def height(self, value: float):
self._height = value
self._update_vertices()
@clockwise.setter
def clockwise(self, value: bool):
self._clockwise = bool(value)
self._update_vertices()
class WikiButton(WidgetBase):
def __init__(
self, x: int, y: int, width: int, height: int, batch: Batch, group: Group
) -> None:
super().__init__(x, y, width, height)
self.enabled = False
pad = 2
down_pad = 5
self.pad = pad
self.down_pad = down_pad
# 覆盖式
self.main_batch = batch or Batch()
self.main_group = group or Group()
def __contains__(self, pos: tuple[float, float]) -> bool:
return self._check_hit()
def on_mouse_press(self, x: int, y: int, buttons: int, modifiers: int) -> None:
if (x, y) in self:
...
class BaseButtonTheme:
"""
按钮的风格
@ -83,9 +711,10 @@ class MinecraftWikiButtonTheme(BaseButtonTheme):
height: int,
batch: Batch,
group: Group,
theme: dict = None,
theme: Optional[dict] = None,
):
super().__init__(x, y, width, height, batch, group)
self.enable = False
self.batch = batch
self.group = group
a = (72, 73, 74, 255)

View File

@ -1,16 +1,3 @@
# -------------------------------
# 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 functools
import inspect
import threading
@ -76,7 +63,7 @@ class FunctionThread(threading.Thread):
target=target, args=args, kwargs=kwargs, name=name, daemon=daemon
)
self.__return_value = self.__NONE
self.__error = None
self.__error: Optional[Exception] = None
def wrapped_target(*args_, **kwargs_):
try:
@ -123,7 +110,7 @@ def new_thread(
arg: Optional[Union[str, Callable]] = None,
daemon: bool = False,
log_thread: bool = True,
):
) -> Callable:
"""
This is a one line solution to make your function executes in parallels.
When decorated with this decorator, functions will be executed in a new daemon thread
@ -178,7 +165,7 @@ def new_thread(
# bring the signature of the func to the wrap function
# so inspect.getfullargspec(func) works correctly
copy_signature(wrap, func)
wrap.original = func # access this field to get the original function
wrap.original = func # access this field to get the original function # pyright: ignore reportAttributeAccessIssue
return wrap
# Directly use @new_thread without ending brackets case, e.g. @new_thread

@ -1 +1 @@
Subproject commit f68bd5b57d2ece430ebbabb7b405eb4b821fb567
Subproject commit 60da39e4e8eac50dc58024545b298a7bc7e55d36

View File

@ -49,27 +49,21 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
[[package]]
name = "bit-vec"
version = "0.6.3"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22"
[[package]]
name = "bitflags"
version = "1.3.2"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
[[package]]
name = "bytemuck"
version = "1.16.0"
version = "1.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5"
checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e"
[[package]]
name = "cfg-if"
@ -135,7 +129,7 @@ checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
[[package]]
name = "difficult_rocket_rs"
version = "0.4.1"
version = "0.4.2"
dependencies = [
"anyhow",
"nalgebra",
@ -153,9 +147,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
[[package]]
name = "either"
version = "1.12.0"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b"
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
[[package]]
name = "hashbrown"
@ -169,9 +163,9 @@ dependencies = [
[[package]]
name = "heck"
version = "0.4.1"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "indoc"
@ -191,21 +185,11 @@ version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
[[package]]
name = "lock_api"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
dependencies = [
"autocfg",
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.21"
version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "matrixmultiply"
@ -234,9 +218,9 @@ dependencies = [
[[package]]
name = "nalgebra"
version = "0.32.6"
version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4"
checksum = "3c4b5f057b303842cf3262c27e465f4c303572e7f6b0648f60e16248ac3397f4"
dependencies = [
"approx",
"matrixmultiply",
@ -250,13 +234,23 @@ dependencies = [
[[package]]
name = "nalgebra-macros"
version = "0.2.1"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998"
checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
"syn",
]
[[package]]
name = "num-bigint"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
"num-integer",
"num-traits",
]
[[package]]
@ -276,7 +270,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.66",
"syn",
]
[[package]]
@ -294,6 +288,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
dependencies = [
"num-bigint",
"num-integer",
"num-traits",
]
@ -316,56 +311,35 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "ordered-float"
version = "4.2.0"
version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e"
checksum = "19ff2cf528c6c03d9ed653d6c4ce1dc0582dc4af309790ad92f07c1cd551b0be"
dependencies = [
"num-traits",
]
[[package]]
name = "parking_lot"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.9.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
"windows-targets",
]
[[package]]
name = "parry2d-f64"
version = "0.15.1"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "416b765a3db5f3e219fcc878d649ea6dc6b93490694be846c39c7398074f90d1"
checksum = "83cb2f7d0e018b2fc6c3cecfc05c82a198b9087534f16d2ea2a5552c2ac0fc2b"
dependencies = [
"approx",
"arrayvec",
"bitflags 1.3.2",
"bitflags",
"downcast-rs",
"either",
"log",
"nalgebra",
"num-derive",
"num-traits",
"ordered-float",
"rustc-hash",
"simba",
"slab",
"smallvec",
"spade",
"thiserror",
]
[[package]]
@ -376,30 +350,30 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "portable-atomic"
version = "1.6.0"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265"
[[package]]
name = "proc-macro2"
version = "1.0.85"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
dependencies = [
"unicode-ident",
]
[[package]]
name = "pyo3"
version = "0.21.2"
version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8"
checksum = "831e8e819a138c36e212f3af3fd9eeffed6bf1510a805af35b0edee5ffa59433"
dependencies = [
"cfg-if",
"indoc",
"libc",
"memoffset",
"parking_lot",
"once_cell",
"portable-atomic",
"pyo3-build-config",
"pyo3-ffi",
@ -409,9 +383,9 @@ dependencies = [
[[package]]
name = "pyo3-build-config"
version = "0.21.2"
version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50"
checksum = "1e8730e591b14492a8945cdff32f089250b05f5accecf74aeddf9e8272ce1fa8"
dependencies = [
"once_cell",
"target-lexicon",
@ -419,9 +393,9 @@ dependencies = [
[[package]]
name = "pyo3-ffi"
version = "0.21.2"
version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403"
checksum = "5e97e919d2df92eb88ca80a037969f44e5e70356559654962cbb3316d00300c6"
dependencies = [
"libc",
"pyo3-build-config",
@ -429,34 +403,34 @@ dependencies = [
[[package]]
name = "pyo3-macros"
version = "0.21.2"
version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c"
checksum = "eb57983022ad41f9e683a599f2fd13c3664d7063a3ac5714cae4b7bee7d3f206"
dependencies = [
"proc-macro2",
"pyo3-macros-backend",
"quote",
"syn 2.0.66",
"syn",
]
[[package]]
name = "pyo3-macros-backend"
version = "0.21.2"
version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c"
checksum = "ec480c0c51ddec81019531705acac51bcdbeae563557c982aa8263bb96880372"
dependencies = [
"heck",
"proc-macro2",
"pyo3-build-config",
"quote",
"syn 2.0.66",
"syn",
]
[[package]]
name = "quick-xml"
version = "0.32.0"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2"
checksum = "96a05e2e8efddfa51a84ca47cec303fac86c8541b686d37cac5efc0e094417bc"
dependencies = [
"memchr",
"serde",
@ -473,14 +447,14 @@ dependencies = [
[[package]]
name = "rapier2d-f64"
version = "0.20.0"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "569c367a5f266a20e4253d798d3b9115d07c7c085b7be3258de104af3557f38f"
checksum = "6f63d275f0eea82fd0cb5266c9353408b08240db0e752607c0a981f4f9637eaf"
dependencies = [
"approx",
"arrayvec",
"bit-vec",
"bitflags 1.3.2",
"bitflags",
"crossbeam",
"downcast-rs",
"log",
@ -501,15 +475,6 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
[[package]]
name = "redox_syscall"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd"
dependencies = [
"bitflags 2.5.0",
]
[[package]]
name = "robust"
version = "1.1.0"
@ -518,9 +483,9 @@ checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30"
[[package]]
name = "rustc-hash"
version = "1.1.0"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
[[package]]
name = "safe_arch"
@ -531,37 +496,31 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "serde"
version = "1.0.203"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.203"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.66",
"syn",
]
[[package]]
name = "simba"
version = "0.8.1"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa"
dependencies = [
"approx",
"num-complex",
@ -599,20 +558,9 @@ dependencies = [
[[package]]
name = "syn"
version = "1.0.109"
version = "2.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5"
checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af"
dependencies = [
"proc-macro2",
"quote",
@ -621,28 +569,28 @@ dependencies = [
[[package]]
name = "target-lexicon"
version = "0.12.14"
version = "0.12.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2"
[[package]]
name = "thiserror"
version = "1.0.61"
version = "1.0.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.61"
version = "1.0.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.66",
"syn",
]
[[package]]
@ -677,94 +625,30 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "wide"
version = "0.7.24"
version = "0.7.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a040b111774ab63a19ef46bbc149398ab372b4ccdcfd719e9814dbd7dfd76c8"
checksum = "901e8597c777fa042e9e245bd56c0dc4418c5db3f845b6ff94fbac732c6a0692"
dependencies = [
"bytemuck",
"safe_arch",
]
[[package]]
name = "windows-targets"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
[[package]]
name = "windows_i686_gnu"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
[[package]]
name = "windows_i686_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
[[package]]
name = "zerocopy"
version = "0.7.34"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.34"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.66",
"syn",
]

View File

@ -1,6 +1,6 @@
[package]
name = "difficult_rocket_rs"
version = "0.4.1"
version = "0.4.2"
edition = "2021"
license-file = '../../LICENSE'
authors = ["shenjackyuanjie <3695888@qq.com>"]
@ -24,10 +24,15 @@ opt-level = 2
[dependencies]
anyhow = "1.0"
quick-xml = { version = "0.32.0", features = ["serialize"] }
quick-xml = { version = "0.36.1", features = ["serialize"] }
serde = { version = "1.0", features = ["derive"] }
nalgebra = "0.32"
pyo3 = { version = "0.21.2", features = ["extension-module", "macros"] }
rapier2d-f64 = { version = "0.20.0", features = ["simd-stable"] }
nalgebra = "0.33"
pyo3 = { version = "0.22.2", features = [
"extension-module",
"macros",
"py-clone",
] }
rapier2d-f64 = { version = "0.22.0", features = ["simd-stable"] }
# 虽然但是, raiper在这里!

View File

@ -283,6 +283,7 @@ pub struct PySR1Ship {
impl PySR1Ship {
#[new]
#[pyo3(text_signature = "(file_path = './assets/builtin/dock1.xml', part_list = None, ship_name = 'NewShip')")]
#[pyo3(signature = (file_path, part_list=None, ship_name=None))]
fn new(file_path: String, part_list: Option<PySR1PartList>, ship_name: Option<String>) -> PyResult<Self> {
let ship = SR1Ship::from_file(file_path.clone(), Some(ship_name.unwrap_or("new ship".to_string())));
match ship {
@ -359,7 +360,9 @@ impl PySR1Ship {
fn get_mass(&self) -> f64 {
let mut mass = 0_f64;
for part_data in self.ship.parts.iter() {
self.part_list.get_part_type(&part_data.part_type_id).map(|part_type| mass += part_type.mass);
if let Some(part_type) = self.part_list.get_part_type(&part_data.part_type_id) {
mass += part_type.mass;
}
}
mass
}
@ -440,6 +443,7 @@ impl PySR1Ship {
.collect()
}
#[pyo3(signature = (file_path, save_status=None))]
fn save(&self, file_path: String, save_status: Option<PySaveStatus>) -> PyResult<()> {
println!("{:?}", save_status);
self.ship.save(file_path, &save_status.unwrap_or_default().status).unwrap();

View File

@ -553,6 +553,7 @@ impl SR1PartDataAttr {
}
self.guess_type()
}
#[allow(clippy::too_many_arguments)]
pub fn new(
fuel: Option<f64>,
name: Option<String>,

View File

@ -124,7 +124,7 @@ impl Connections {
impl DisconnectedParts {
pub fn as_sr1_vec(&self) -> Vec<(Vec<SR1PartData>, Vec<Connection>)> {
self.parts.iter().map(|x| x.into_sr_part()).collect()
self.parts.iter().map(|x| x.as_sr_part()).collect()
}
pub fn from_vec_sr1(parts_list: Vec<(Vec<SR1PartData>, Vec<Connection>)>) -> Self {
DisconnectedParts {
@ -192,7 +192,7 @@ pub struct DisconnectedPart {
}
impl DisconnectedPart {
pub fn into_sr_part(&self) -> (Vec<SR1PartData>, Vec<Connection>) {
pub fn as_sr_part(&self) -> (Vec<SR1PartData>, Vec<Connection>) {
(self.parts.as_sr1_vec(), self.connects.as_vec())
}
@ -270,17 +270,11 @@ impl Connection {
}
/// 是否为 Dock 类型
pub fn is_dock(&self) -> bool {
match self {
Connection::Dock { .. } => true,
_ => false,
}
matches!(self, Connection::Dock { .. })
}
/// 是否为 Normal 类型
pub fn is_normal(&self) -> bool {
match self {
Connection::Normal { .. } => true,
_ => false,
}
matches!(self, Connection::Normal { .. })
}
}
@ -395,20 +389,21 @@ pub fn py_assert_ship(path: String) -> bool {
if e.name().as_ref() == b"Ship" {
// 再验证一下 version, liftedOff, touchingGround
let mut founds = (false, false, false);
let _ = e.attributes().map(|attr| match attr {
Ok(attr) => match attr.value.as_ref() {
b"version" => {
founds.0 = true;
let _ = e.attributes().map(|attr| {
if let Ok(attr) = attr {
match attr.value.as_ref() {
b"version" => {
founds.0 = true;
}
b"liftedOff" => {
founds.1 = true;
}
b"touchingGround" => {
founds.2 = true;
}
_ => (),
}
b"liftedOff" => {
founds.1 = true;
}
b"touchingGround" => {
founds.2 = true;
}
_ => (),
},
_ => (),
}
});
if !(founds.0 && founds.1 && founds.2) {
println!(

View File

@ -16,7 +16,7 @@ from Difficult_Rocket.api.types import Options, Version
from lib_not_dr import loggers
DR_rust_version = Version("0.4.1") # DR_mod 的 Rust 编写部分的兼容版本
DR_rust_version = Version("0.4.2") # DR_mod 的 Rust 编写部分的兼容版本
logger = loggers.config.get_logger_from_old("client.dr_game", "client")

View File

@ -4,16 +4,11 @@
# All rights reserved
# -------------------------------
from typing import Optional, Tuple
from pyglet.graphics import Batch, Group
from Difficult_Rocket.client import ClientWindow
from Difficult_Rocket.api.screen import BaseScreen
# from Difficult_Rocket.main import Game
from Difficult_Rocket.gui.widget.button import (
PressTextButton,
MinecraftWikiButtonTheme,
)
from lib_not_dr import loggers
@ -21,6 +16,7 @@ from lib_not_dr import loggers
logger = loggers.config.get_logger_from_old("client.dr_game_layout", "client")
class GameLayout(BaseScreen):
"""
DR game 菜单

View File

@ -9,10 +9,14 @@ from pyglet.graphics import Batch, Group
from Difficult_Rocket.client import ClientWindow
from Difficult_Rocket.api.screen import BaseScreen
# from Difficult_Rocket.main import Game
from Difficult_Rocket.gui.widget.button import (
PressTextButton,
MinecraftWikiButtonTheme,
WikiButton,
WikiButtonShape,
WikiButtonStyles,
)
from lib_not_dr import loggers
@ -23,6 +27,7 @@ from lib_not_dr import loggers
logger = loggers.config.get_logger_from_old("client.dr_game_menu", "client")
class Menu(BaseScreen):
"""
DR game 菜单
@ -115,14 +120,48 @@ class Menu(BaseScreen):
batch=self.main_batch,
group=self.main_group,
draw_theme=MinecraftWikiButtonTheme,
dict_theme={"pop_out": True}
dict_theme={"pop_out": True},
)
self.tester = WikiButton(
x=100,
y=150,
width=150,
height=30,
batch=self.main_batch,
group=self.main_group,
)
self.wiki_shape1 = WikiButtonShape(
x=100,
y=200,
width=150,
height=70,
pad=5,
down_pad=7,
batch=self.main_batch,
group=self.main_group,
)
self.wiki_shape2 = WikiButtonShape(
x=300,
y=200,
width=150,
height=70,
pad=5,
down_pad=7,
colors=WikiButtonStyles.wiki_press.value,
batch=self.main_batch,
group=self.main_group,
)
def on_release(button: PressTextButton, x, y):
from .sr1_ship import SR1ShipEditor
main_window.remove_sub_screen("DR_game_menu")
main_window.add_sub_screen("SR1_ship", SR1ShipEditor)
logger.info("added SR1_ship screen", tag="dr_game")
self.wiki_shape1.highlight = not self.wiki_shape1.highlight
self.wiki_shape2.highlight = not self.wiki_shape2.highlight
# self.tester.clockwise = not self.tester.clockwise
# from .sr1_ship import SR1ShipEditor
# main_window.remove_sub_screen("DR_game_menu")
# main_window.add_sub_screen("SR1_ship", SR1ShipEditor)
# logger.info("added SR1_ship screen", tag="dr_game")
self.enter_ship_editor_button.set_handler("on_release", on_release)
# main_window.push_handlers(self.wiki_button1)
@ -132,5 +171,23 @@ class Menu(BaseScreen):
# main_window.push_handlers(self.button3)
main_window.push_handlers(self.enter_ship_editor_button)
def on_draw(self, dt: float, window: ClientWindow):
def on_mouse_press(
self, x: int, y: int, button: int, modifiers: int, window: ClientWindow
):
if (x, y) in self.wiki_shape1:
self.wiki_shape1.pop_out = not self.wiki_shape1.pop_out
if self.wiki_shape1.pop_out:
self.wiki_shape1.colors = WikiButtonStyles.game1_normal.value
else:
self.wiki_shape1.colors = WikiButtonStyles.game1_press.value
if (x, y) in self.wiki_shape2:
self.wiki_shape2.pop_out = not self.wiki_shape2.pop_out
def on_mouse_motion(self, x: int, y: int, dx: int, dy: int, window: ClientWindow):
self.wiki_shape1.highlight = (x, y) in self.wiki_shape1
self.wiki_shape2.highlight = (x, y) in self.wiki_shape2
# def on_draw(self, dt: float, window: ClientWindow): # TODO: wait for pyglet 2.1
def on_draw(self, window: ClientWindow):
self.main_batch.draw()

View File

@ -3,15 +3,12 @@
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
import os
import time
import random
import traceback
from pathlib import Path
from typing import List, Dict, Optional, Generator, Tuple
from tkinter import Tk
from tkinter import filedialog
from pyglet.gl import gl
from pyglet.math import Mat4
@ -23,7 +20,7 @@ from pyglet.shapes import Line, Box
# from pyglet.window import mouse
from . import DR_mod_runtime
from .types import SR1Textures, SR1Rotation
from .types import SR1Textures
# Difficult Rocket
from Difficult_Rocket import DR_status
@ -34,12 +31,6 @@ from Difficult_Rocket.command.line import CommandText
from Difficult_Rocket.client.screen import BaseScreen
from Difficult_Rocket.api.camera import CenterGroupCamera, GroupCamera
from Difficult_Rocket.gui.widget.button import (
PressTextButton,
MinecraftWikiButtonTheme,
ButtonThemeOptions,
BaseButtonTheme,
)
from lib_not_dr import loggers
@ -100,8 +91,6 @@ class SR1ShipSelecter(BaseScreen):
if not file.is_file:
continue
# 尝试加载一下
class SR1ShipEditor(BaseScreen):
@ -531,8 +520,8 @@ class SR1ShipEditor(BaseScreen):
gl.glScissor(0, 0, self.window_pointer.width, self.window_pointer.height)
gl.glDisable(gl.GL_SCISSOR_TEST)
def on_draw(self, dt: float, window): # TODO: wait for pyglet 2.1
# def on_draw(self, window: ClientWindow):
# def on_draw(self, dt: float, window): # TODO: wait for pyglet 2.1
def on_draw(self, window: ClientWindow):
if self.status.draw_call:
self.render_ship()

View File

@ -58,7 +58,7 @@ msvc = "latest"
mingw64 = false
standalone = true
output-dir = "build/nuitka"
output-dir = "build\\nuitka"
run = false
# auto run after build
@ -75,9 +75,9 @@ macos-app-version = false # require script
file-description = 'Difficult Rocket a rocket game'
copyright = 'Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com'
windows-icon-from-ico = 'assets/textures/icon.png'
macos-app-icon = 'assets/textures/icon.png'
linux-icon = 'assets/textures/icon.png'
windows-icon-from-ico = 'assets\textures\icon.png'
macos-app-icon = 'assets\textures\icon.png'
linux-icon = 'assets\textures\icon.png'
nofollow-import-to = [
'objprint',
@ -94,8 +94,8 @@ nofollow-import-to = [
]
include-data-dir = [
['./config', './config'],
['./assets', './assets']
['.\config', '.\config'],
['.\assets', '.\assets']
]
include-package = ['Difficult_Rocket.api']
# DR.api 没有直接 import, 所以需要手动添加