[ci] auto-format

This commit is contained in:
BroBordd 2025-11-06 14:40:23 +00:00 committed by github-actions[bot]
parent d25a14bd2e
commit fd4bcc1f72

View file

@ -33,6 +33,7 @@ from random import uniform
from threading import Thread
from struct import unpack
class Replay:
VER = '3.0'
COL1 = (0.18, 0.18, 0.18)
@ -56,7 +57,8 @@ class Replay:
p=get_overlay_stack(),
size=(400, 500),
oac=lambda: (
bui.containerwidget(self.parent, transition='out_scale' if source and source.exists() else 'out_left'),
bui.containerwidget(
self.parent, transition='out_scale' if source and source.exists() else 'out_left'),
self.play_sound('laser'),
self.transition_sound.stop()
)
@ -228,10 +230,12 @@ class Replay:
def finish_calculation(self, duration):
bui.textwidget(self.status_text, text='Starting...' if duration else 'Wait what?')
bui.textwidget(self.progress_text2, text=f'result was {duration} milleseconds') if duration else duration
bui.textwidget(self.progress_text2,
text=f'result was {duration} milleseconds') if duration else duration
if not duration:
self.error = True
bui.textwidget(self.progress_text, text='pybrp returned zero duration, error?\nclosing this window in 5 seconds')
bui.textwidget(
self.progress_text, text='pybrp returned zero duration, error?\nclosing this window in 5 seconds')
bui.textwidget(self.progress_text2, text='')
bui.apptimer(1 if duration else 5, CallPartial(self.start_player, duration))
@ -290,6 +294,7 @@ class Replay:
**kwargs
)
class Player:
TICK = 0.01
COL0 = (0.5, 0, 0)
@ -325,7 +330,8 @@ class Player:
self.camera_look = None
self.replay_time = self.start_time = self.progress_val = 0
self.camera_zoom = 1
[setattr(self, attr, []) for attr in ['ui_widgets', 'camera_widgets', 'hide_widgets', 'cinema_widgets', 'cinema_ui_widgets']]
[setattr(self, attr, []) for attr in ['ui_widgets', 'camera_widgets',
'hide_widgets', 'cinema_widgets', 'cinema_ui_widgets']]
# Start replay immediately
bs.new_replay_session(path)
@ -881,7 +887,8 @@ class Player:
self.camera_look = None
bui.textwidget(self.look_text, text='players')
self.camera_zoom = new_zoom
bui.textwidget(self.zoom_text, text=f'x{round(0.5 ** (new_zoom - 1), 2)}' if new_zoom != 1 else 'x1.0' if self.manual_zoom else 'auto')
bui.textwidget(
self.zoom_text, text=f'x{round(0.5 ** (new_zoom - 1), 2)}' if new_zoom != 1 else 'x1.0' if self.manual_zoom else 'auto')
self.apply_zoom()
def look(self):
@ -1034,7 +1041,8 @@ class Player:
crosshair = 20
[widgets(bui.imagewidget(
parent=self.parent,
position=(width / 2, height / 2 - crosshair / 2 + crosshair * 0.1) if i else (width / 2 - crosshair / 2, height / 2 + crosshair * 0.1),
position=(width / 2, height / 2 - crosshair / 2 + crosshair *
0.1) if i else (width / 2 - crosshair / 2, height / 2 + crosshair * 0.1),
size=(3, crosshair * 1.15) if i else (crosshair * 1.15, 3),
color=self.COL1,
texture=bui.gettexture('white')
@ -1055,7 +1063,8 @@ class Player:
parent=self.parent,
texture=bui.gettexture('white'),
color=self.COL1,
position=(width / 2 + offset, height / 2 + [offset - crosshair, -offset + crosshair * 0.3][j]),
position=(width / 2 + offset, height / 2 +
[offset - crosshair, -offset + crosshair * 0.3][j]),
size=(3, crosshair * +1.1)
))
@ -1064,7 +1073,8 @@ class Player:
parent=self.parent,
texture=bui.gettexture('white'),
color=self.COL1,
position=(width / 2 + [-offset, offset - crosshair][j], height / 2 - crosshair / 2 - offset + crosshair * 0.8),
position=(width / 2 + [-offset, offset - crosshair][j],
height / 2 - crosshair / 2 - offset + crosshair * 0.8),
size=(crosshair * 1.1, 3)
))
@ -1073,7 +1083,8 @@ class Player:
parent=self.parent,
texture=bui.gettexture('white'),
color=self.COL1,
position=(width / 2 - offset, height / 2 + [offset - crosshair, -offset + crosshair * 0.3][j]),
position=(width / 2 - offset, height / 2 +
[offset - crosshair, -offset + crosshair * 0.3][j]),
size=(3, crosshair * 1.1)
))
@ -1211,7 +1222,8 @@ class Player:
self.ui_hidden = hidden = not self.ui_hidden
bui.textwidget(self.hide_text, text=self.hide_icons[hidden])
if hidden:
bui.apptimer(0.2, lambda: bui.buttonwidget(self.hide_button, texture=bui.gettexture('empty')))
bui.apptimer(0.2, lambda: bui.buttonwidget(
self.hide_button, texture=bui.gettexture('empty')))
self.fade_hide_button(0.4, -0.05)
self.destroy_ui()
else:
@ -1258,7 +1270,8 @@ class Player:
bui.textwidget(self.pause_text, text=icon)
if not dry:
if not silent:
self.show_message(['Resume', 'Pause'][self.paused], os.path.basename(self.path) + f' of {os.path.getsize(self.path)} bytes', self.COL6, self.COL7)
self.show_message(['Resume', 'Pause'][self.paused], os.path.basename(
self.path) + f' of {os.path.getsize(self.path)} bytes', self.COL6, self.COL7)
if self.paused:
self.stop()
bs.pause_replay()
@ -1335,7 +1348,8 @@ class Player:
self.real_time = time()
self.fix_pause()
amount = abs(round(amount, 2))
self.show_message('Seek', label + f" {amount} second{['s', ''][amount == 1]}", self.COL4, self.COL5)
self.show_message(
'Seek', label + f" {amount} second{['s', ''][amount == 1]}", self.COL4, self.COL5)
def jump(self, percent):
"""Jump with WYSIWYG behavior - percent is based on ESTIMATED duration, checked against CONFIRMED"""
@ -1404,7 +1418,8 @@ class Player:
progress = self.progress_width
elif not self.duration_sec:
# Fallback if scan failed
progress = min(elapsed / max(elapsed, 1) * self.progress_width * 0.1, self.progress_width * 0.1)
progress = min(elapsed / max(elapsed, 1) * self.progress_width *
0.1, self.progress_width * 0.1)
else:
# Normal progress calculation, cap at 100%
progress = min((elapsed / self.duration_sec) * self.progress_width, self.progress_width)
@ -1434,73 +1449,104 @@ class Player:
)
# Tools
def get_ui_scale(small, medium, large=None):
scale = bui.app.ui_v1.uiscale
return small if scale is bui.UIScale.SMALL else medium if scale is bui.UIScale.MEDIUM else (large or medium)
return_to_menu = lambda: bui.app.classic.return_to_main_menu_session_gracefully(reset_ui=False)
show_warning = lambda text: (bui.getsound('block').play() or 1) and bui.screenmessage(text, color=(1, 1, 0))
format_time = lambda seconds: strftime('%H:%M:%S', gmtime(seconds))
get_overlay_stack = lambda: bui.get_special_widget('overlay_stack')
round_tuple = lambda tup: type(tup)([round(val, 1) for val in tup])
def return_to_menu(): return bui.app.classic.return_to_main_menu_session_gracefully(reset_ui=False)
def show_warning(text): return (bui.getsound('block').play()
or 1) and bui.screenmessage(text, color=(1, 1, 0))
def format_time(seconds): return strftime('%H:%M:%S', gmtime(seconds))
def get_overlay_stack(): return bui.get_special_widget('overlay_stack')
def round_tuple(tup): return type(tup)([round(val, 1) for val in tup])
# pybrp
Z = lambda _:[0]*_
G_FREQS = lambda: [
101342,9667,3497,1072,0,3793,*Z(2),2815,5235,*Z(3),3570,*Z(3),
1383,*Z(3),2970,*Z(2),2857,*Z(8),1199,*Z(30),
1494,1974,*Z(12),1351,*Z(122),1475,*Z(65)
def Z(_): return [0]*_
def G_FREQS(): return [
101342, 9667, 3497, 1072, 0, 3793, *Z(2), 2815, 5235, *Z(3), 3570, *Z(3),
1383, *Z(3), 2970, *Z(2), 2857, *Z(8), 1199, *Z(30),
1494, 1974, *Z(12), 1351, *Z(122), 1475, *Z(65)
]
class _Huffman:
class _N:
def __init__(self):
self.l,self.r,self.p,self.f=-1,-1,0,0
self.l, self.r, self.p, self.f = -1, -1, 0, 0
def __init__(self):
self.nodes=[self._N()for _ in range(511)]
self.nodes = [self._N()for _ in range(511)]
gf = G_FREQS()
for i in range(256):self.nodes[i].f=gf[i]
nc=256
while nc<511:
s1,s2=-1,-1
i=0
while self.nodes[i].p!=0:i+=1
s1=i;i+=1
while self.nodes[i].p!=0:i+=1
s2=i;i+=1
while i<nc:
if self.nodes[i].p==0:
if self.nodes[s1].f>self.nodes[s2].f:
if self.nodes[i].f<self.nodes[s1].f:s1=i
elif self.nodes[i].f<self.nodes[s2].f:s2=i
i+=1
self.nodes[nc].f=self.nodes[s1].f+self.nodes[s2].f
self.nodes[s1].p=self.nodes[s2].p=nc-255
self.nodes[nc].r,self.nodes[nc].l=s1,s2
nc+=1
def decompress(self,src):
if not src:return b''
rem,comp=src[0]&15,src[0]>>7
if not comp:return src
out,ptr,l=bytearray(),src[1:],len(src)
bl=((l-1)*8)-rem;bit=0
while bit<bl:
m_bit=(ptr[bit>>3]>>(bit&7))&1;bit+=1
for i in range(256):
self.nodes[i].f = gf[i]
nc = 256
while nc < 511:
s1, s2 = -1, -1
i = 0
while self.nodes[i].p != 0:
i += 1
s1 = i
i += 1
while self.nodes[i].p != 0:
i += 1
s2 = i
i += 1
while i < nc:
if self.nodes[i].p == 0:
if self.nodes[s1].f > self.nodes[s2].f:
if self.nodes[i].f < self.nodes[s1].f:
s1 = i
elif self.nodes[i].f < self.nodes[s2].f:
s2 = i
i += 1
self.nodes[nc].f = self.nodes[s1].f+self.nodes[s2].f
self.nodes[s1].p = self.nodes[s2].p = nc-255
self.nodes[nc].r, self.nodes[nc].l = s1, s2
nc += 1
def decompress(self, src):
if not src:
return b''
rem, comp = src[0] & 15, src[0] >> 7
if not comp:
return src
out, ptr, l = bytearray(), src[1:], len(src)
bl = ((l-1)*8)-rem
bit = 0
while bit < bl:
m_bit = (ptr[bit >> 3] >> (bit & 7)) & 1
bit += 1
if m_bit:
n=510
while n>=256:
if bit>=bl:raise ValueError("Incomplete Huffman code")
p_bit=(ptr[bit>>3]>>(bit&7))&1;bit+=1
n=self.nodes[n].l if p_bit==0 else self.nodes[n].r
n = 510
while n >= 256:
if bit >= bl:
raise ValueError("Incomplete Huffman code")
p_bit = (ptr[bit >> 3] >> (bit & 7)) & 1
bit += 1
n = self.nodes[n].l if p_bit == 0 else self.nodes[n].r
out.append(n)
else:
if bit+8>bl:break
bi,b_in_b=bit>>3,bit&7
val=ptr[bi]if b_in_b==0 else(ptr[bi]>>b_in_b)|(ptr[bi+1]<<(8-b_in_b))
out.append(val&255);bit+=8
if bit+8 > bl:
break
bi, b_in_b = bit >> 3, bit & 7
val = ptr[bi]if b_in_b == 0 else (ptr[bi] >> b_in_b) | (ptr[bi+1] << (8-b_in_b))
out.append(val & 255)
bit += 8
return bytes(out)
def get_replay_duration(_h, brp_path, progress):
total_ms = 0
with open(brp_path, 'rb') as f:
f.seek(0,2)
f.seek(0, 2)
progress[1] = f.tell()
f.seek(6)
while True:
@ -1539,16 +1585,21 @@ def get_replay_duration(_h, brp_path, progress):
# brobord collide grass
# ba_meta require api 9
# ba_meta export babase.Plugin
class byBordd(Plugin):
has_settings_ui = lambda c=0: True
show_settings_ui = lambda c=0, w=None: Replay(source=w)
def has_settings_ui(c=0): return True
def show_settings_ui(c=0, w=None): return Replay(source=w)
def __init__(self):
from bauiv1lib.ingamemenu import InGameMenuWindow as ingame
orig_refresh = getattr(ingame, '_refresh_in_game')
setattr(ingame, '_refresh_in_game', lambda window, *args, **kwargs: (self.add_button(window), orig_refresh(window, *args, **kwargs))[1])
setattr(ingame, '_refresh_in_game', lambda window, *args, **
kwargs: (self.add_button(window), orig_refresh(window, *args, **kwargs))[1])
from bauiv1lib.watch import WatchWindow as watch
orig_init = getattr(watch, '__init__')
setattr(watch, '__init__', lambda window, *args, **kwargs: (orig_init(window, *args, **kwargs), self.add_button(window, 1))[0])
setattr(watch, '__init__', lambda window, *args, **
kwargs: (orig_init(window, *args, **kwargs), self.add_button(window, 1))[0])
def add_button(self, window, watch_mode=0):
if watch_mode: