add group for sr1 render

This commit is contained in:
shenjack 2023-07-02 15:54:50 +08:00
parent 5958a14d47
commit 61b45fac7f
4 changed files with 23 additions and 32 deletions

View File

@ -223,8 +223,7 @@ class ClientWindow(Window):
self.SPF = Decimal('1') / self.FPS self.SPF = Decimal('1') / self.FPS
self.fps_log = FpsLogger(stable_fps=int(self.FPS)) self.fps_log = FpsLogger(stable_fps=int(self.FPS))
# batch # batch
self.part_batch = Batch() self.main_batch = Batch()
self.label_batch = Batch()
self.main_group = Group(0) self.main_group = Group(0)
# frame # frame
self.frame = pyglet.gui.Frame(self, order=20) self.frame = pyglet.gui.Frame(self, order=20)
@ -233,10 +232,8 @@ class ClientWindow(Window):
# setup # setup
self.setup() self.setup()
# 命令显示 # 命令显示
self.command_batch = Batch()
self.command_group = Group(1, parent=self.main_group)
self.input_box = TextEntry(x=50, y=30, width=300, self.input_box = TextEntry(x=50, y=30, width=300,
batch=self.command_batch, text='') # 实例化 batch=self.main_batch, text='', group=Group(1000, parent=self.main_group)) # 实例化
self.input_box.push_handlers(self) self.input_box.push_handlers(self)
self.input_box.set_handler('on_commit', self.on_input) self.input_box.set_handler('on_commit', self.on_input)
self.set_handlers(self.input_box) self.set_handlers(self.input_box)
@ -269,9 +266,9 @@ class ClientWindow(Window):
try: try:
pyglet.app.event_loop.run(1 / self.main_config['runtime']['fps']) pyglet.app.event_loop.run(1 / self.main_config['runtime']['fps'])
except KeyboardInterrupt: except KeyboardInterrupt:
self.logger.warn("==========client stop. KeyboardInterrupt info==========") self.logger.warning("==========client stop. KeyboardInterrupt info==========")
traceback.print_exc() traceback.print_exc()
self.logger.warn("==========client stop. KeyboardInterrupt info end==========") self.logger.warning("==========client stop. KeyboardInterrupt info end==========")
self.dispatch_event("on_close", 'input') self.dispatch_event("on_close", 'input')
sys.exit(0) sys.exit(0)
@ -305,10 +302,6 @@ class ClientWindow(Window):
now_FPS = pyglet.clock.get_frequency() now_FPS = pyglet.clock.get_frequency()
self.fps_log.update_tick(now_FPS, decimal_tick) self.fps_log.update_tick(now_FPS, decimal_tick)
def on_command_draw(self):
self.command_batch.draw()
@_call_back(on_command_draw)
@_call_screen_after @_call_screen_after
def on_draw(self, *dt): def on_draw(self, *dt):
while (command := self.game.console.get_command()) is not None: while (command := self.game.console.get_command()) is not None:
@ -337,10 +330,9 @@ class ClientWindow(Window):
# self.set_location(*self.get_location()) # self.set_location(*self.get_location())
print('on hide!') print('on hide!')
@_call_screen_after @_call_screen_before
def draw_batch(self): def draw_batch(self):
self.part_batch.draw() self.main_batch.draw()
self.label_batch.draw()
""" """
command line event command line event

View File

@ -7,8 +7,8 @@ fonts_folder = "libs/fonts"
[window] [window]
style = "None" style = "None"
width = 1032 width = 1268
height = 735 height = 1031
visible = true visible = true
gui_scale = 1 gui_scale = 1
caption = "Difficult Rocket v{DR_version}" caption = "Difficult Rocket v{DR_version}"

View File

@ -17,7 +17,7 @@ from Difficult_Rocket.api.mod import ModInfo
from Difficult_Rocket.client import ClientWindow from Difficult_Rocket.client import ClientWindow
from Difficult_Rocket.api.types import Options, Version from Difficult_Rocket.api.types import Options, Version
DR_rust_version = Version("0.2.15.") # DR_mod 的 Rust 编写部分的兼容版本 DR_rust_version = Version("0.2.15.1") # DR_mod 的 Rust 编写部分的兼容版本
logger = logging.getLogger('client.dr_game') logger = logging.getLogger('client.dr_game')

View File

@ -107,10 +107,8 @@ class SR1ShipRender(BaseScreen):
# self.xml_doc: ElementTree = parse('configs/dock1.xml') # self.xml_doc: ElementTree = parse('configs/dock1.xml')
# self.xml_root: ElementTree.Element = self.xml_doc.getroot() # self.xml_root: ElementTree.Element = self.xml_doc.getroot()
self.load_xml('configs/dock1.xml') self.load_xml('configs/dock1.xml')
self.part_box_batch = Batch() self.main_batch = Batch()
self.part_batch = Batch() self.part_group = Group(10, parent=main_window.main_group)
self.part_group = Group(2)
self.part_line_group = Group(1, parent=self.part_group)
self.debug_label = Label(x=20, y=main_window.height - 100, font_size=DR_status.std_font_size, self.debug_label = Label(x=20, y=main_window.height - 100, font_size=DR_status.std_font_size,
text='SR1 render!', font_name=Fonts.微软等宽无线, text='SR1 render!', font_name=Fonts.微软等宽无线,
width=main_window.width - 20, height=20, width=main_window.width - 20, height=20,
@ -163,7 +161,7 @@ class SR1ShipRender(BaseScreen):
# 你就这里改吧 # 你就这里改吧
cache_sprite = Sprite(img=self.textures.get_texture(part.textures), cache_sprite = Sprite(img=self.textures.get_texture(part.textures),
x=render_x, y=render_y, z=random.random(), x=render_x, y=render_y, z=random.random(),
batch=self.part_batch, group=self.part_group) batch=self.main_batch, group=self.part_group)
# 你得帮我换算一下 XML 里的 x y 和这里的屏幕像素的关系OK # 你得帮我换算一下 XML 里的 x y 和这里的屏幕像素的关系OK
# 旋转啥的不是大问题, 我找你要那个渲染代码就是要 x y 的换算逻辑 # 旋转啥的不是大问题, 我找你要那个渲染代码就是要 x y 的换算逻辑
cache_sprite.rotation = SR1Rotation.get_rotation(part.angle) cache_sprite.rotation = SR1Rotation.get_rotation(part.angle)
@ -176,6 +174,7 @@ class SR1ShipRender(BaseScreen):
self.parts_sprite[part.id] = cache_sprite self.parts_sprite[part.id] = cache_sprite
if DR_mod_runtime.use_DR_rust: if DR_mod_runtime.use_DR_rust:
line_box_group = Group(6, parent=self.part_group)
part_debug_box = self.rust_ship.get_part_box(part.id) part_debug_box = self.rust_ship.get_part_box(part.id)
if part_debug_box: if part_debug_box:
# 线框 # 线框
@ -184,16 +183,16 @@ class SR1ShipRender(BaseScreen):
color = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255), random.randrange(100, 200)) color = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255), random.randrange(100, 200))
part_line_box.append(Line(x=part_debug_box[0][0] * 30, y=part_debug_box[0][1] * 30, part_line_box.append(Line(x=part_debug_box[0][0] * 30, y=part_debug_box[0][1] * 30,
x2=part_debug_box[0][0] * 30, y2=part_debug_box[1][1] * 30, x2=part_debug_box[0][0] * 30, y2=part_debug_box[1][1] * 30,
batch=self.part_box_batch, width=width, color=color)) batch=self.main_batch, width=width, color=color, group=line_box_group))
part_line_box.append(Line(x=part_debug_box[0][0] * 30, y=part_debug_box[1][1] * 30, part_line_box.append(Line(x=part_debug_box[0][0] * 30, y=part_debug_box[1][1] * 30,
x2=part_debug_box[1][0] * 30, y2=part_debug_box[1][1] * 30, x2=part_debug_box[1][0] * 30, y2=part_debug_box[1][1] * 30,
batch=self.part_box_batch, width=width, color=color)) batch=self.main_batch, width=width, color=color, group=line_box_group))
part_line_box.append(Line(x=part_debug_box[1][0] * 30, y=part_debug_box[1][1] * 30, part_line_box.append(Line(x=part_debug_box[1][0] * 30, y=part_debug_box[1][1] * 30,
x2=part_debug_box[1][0] * 30, y2=part_debug_box[0][1] * 30, x2=part_debug_box[1][0] * 30, y2=part_debug_box[0][1] * 30,
batch=self.part_box_batch, width=width, color=color)) batch=self.main_batch, width=width, color=color, group=line_box_group))
part_line_box.append(Line(x=part_debug_box[1][0] * 30, y=part_debug_box[0][1] * 30, part_line_box.append(Line(x=part_debug_box[1][0] * 30, y=part_debug_box[0][1] * 30,
x2=part_debug_box[0][0] * 30, y2=part_debug_box[0][1] * 30, x2=part_debug_box[0][0] * 30, y2=part_debug_box[0][1] * 30,
batch=self.part_box_batch, width=width, color=color)) batch=self.main_batch, width=width, color=color, group=line_box_group))
self.part_line_box[part.id] = part_line_box self.part_line_box[part.id] = part_line_box
# if not part_render: # 如果不渲染(渲染有毛病) # if not part_render: # 如果不渲染(渲染有毛病)
# self.parts_sprite[part.id].visible = False # self.parts_sprite[part.id].visible = False
@ -202,6 +201,7 @@ class SR1ShipRender(BaseScreen):
count = 0 count = 0
yield each_count yield each_count
if DR_mod_runtime.use_DR_rust: if DR_mod_runtime.use_DR_rust:
connect_line_group = Group(5, parent=self.part_group)
for connect in self.rust_ship.connection: for connect in self.rust_ship.connection:
# 连接线 # 连接线
parent_part_data = self.part_data[connect[2]] parent_part_data = self.part_data[connect[2]]
@ -209,7 +209,7 @@ class SR1ShipRender(BaseScreen):
color = (random.randrange(100, 255), random.randrange(0, 255), random.randrange(0, 255), 255) color = (random.randrange(100, 255), random.randrange(0, 255), random.randrange(0, 255), 255)
self.part_line_list.append(Line(x=parent_part_data.x * 60, y=parent_part_data.y * 60, self.part_line_list.append(Line(x=parent_part_data.x * 60, y=parent_part_data.y * 60,
x2=child_part_data.x * 60, y2=child_part_data.y * 60, x2=child_part_data.x * 60, y2=child_part_data.y * 60,
batch=self.part_batch, group=self.part_line_group, batch=self.main_batch, group=connect_line_group,
width=1, color=color)) width=1, color=color))
count += 1 count += 1
if count >= each_count: if count >= each_count:
@ -262,6 +262,10 @@ class SR1ShipRender(BaseScreen):
self.window_pointer.height / 2) + 10, 0 self.window_pointer.height / 2) + 10, 0
self.need_update_parts = False self.need_update_parts = False
def draw_batch(self, window: "ClientWindow"):
with self.camera:
self.main_batch.draw()
def on_draw(self, window: "ClientWindow"): def on_draw(self, window: "ClientWindow"):
if self.need_draw: if self.need_draw:
self.render_ship() self.render_ship()
@ -277,11 +281,6 @@ class SR1ShipRender(BaseScreen):
self.update_parts() self.update_parts()
self.need_update_parts = False self.need_update_parts = False
with self.camera:
self.part_box_batch.draw()
self.part_batch.draw()
self.part_box_batch.draw()
self.debug_label.draw() self.debug_label.draw()
if SR1ShipRender_Option.debug_mouse_d_pos: if SR1ShipRender_Option.debug_mouse_d_pos: