2022-11-07 00:26:16 +05:30
# ba_meta require api 7
from __future__ import annotations
from typing import TYPE_CHECKING , cast
if TYPE_CHECKING :
from typing import Any , Sequence , Callable , List , Dict , Tuple , Optional , Union
2022-11-08 01:27:06 +05:30
from os import listdir , mkdir , path , sep
from shutil import copy , copytree
2022-11-06 21:24:27 +00:00
2022-11-07 00:26:16 +05:30
import ba
import _ba
from bastd . ui . watch import WatchWindow as ww
from bastd . ui . popup import PopupWindow
2022-11-08 01:27:06 +05:30
#mod by ʟօʊքɢǟʀօʊ
#export replays to mods folder and share with your friends or have a backup
2022-11-06 21:24:27 +00:00
2022-11-08 01:27:06 +05:30
def Print ( * args , color = None , top = None ) :
out = " "
2022-11-07 00:26:16 +05:30
for arg in args :
2022-11-08 01:27:06 +05:30
a = str ( arg )
2022-11-07 00:26:16 +05:30
out + = a
2022-11-08 01:27:06 +05:30
ba . screenmessage ( out , color = color , top = top )
2022-11-07 00:26:16 +05:30
def cprint ( * args ) :
2022-11-08 01:27:06 +05:30
out = " "
2022-11-07 00:26:16 +05:30
for arg in args :
2022-11-08 01:27:06 +05:30
a = str ( arg )
2022-11-07 00:26:16 +05:30
out + = a
_ba . chatmessage ( out )
2022-11-06 21:24:27 +00:00
2022-11-08 01:27:06 +05:30
internal_dir = path . join ( " ba_data " , " .. " , " .. " , " .. " , " files " , " bombsquad_config " , " replays " + sep )
external_dir = path . join ( _ba . env ( ) [ " python_directory_user " ] , " replays " + sep )
2022-11-06 21:24:27 +00:00
2022-11-08 01:27:06 +05:30
#colors
pink = ( 1 , 0.2 , 0.8 )
green = ( 0.4 , 1 , 0.4 )
red = ( 1 , 0 , 0 )
2022-11-07 00:26:16 +05:30
2022-11-08 01:27:06 +05:30
if not path . exists ( external_dir ) :
2022-11-07 00:26:16 +05:30
mkdir ( external_dir )
2022-11-08 01:27:06 +05:30
Print ( " You are ready to share replays " , color = pink )
2022-11-07 00:26:16 +05:30
class Help ( PopupWindow ) :
def __init__ ( self ) :
uiscale = ba . app . ui . uiscale
self . width = 800
self . height = 300
2022-11-08 01:27:06 +05:30
2022-11-07 00:26:16 +05:30
PopupWindow . __init__ ( self ,
position = ( 0.0 , 0.0 ) ,
size = ( self . width , self . height ) ,
scale = 1.2 , )
2022-11-08 01:27:06 +05:30
ba . containerwidget ( edit = self . root_widget , on_outside_click_call = self . close )
ba . textwidget ( parent = self . root_widget , position = ( 0 , self . height * 0.6 ) , text = f " •Replays are exported to \n { external_dir } \n •Importing replay and other features comming in v1.2 " )
2022-11-07 00:26:16 +05:30
def close ( self ) :
ba . playsound ( ba . getsound ( ' swish ' ) )
ba . containerwidget ( edit = self . root_widget , transition = " out_right " , )
class SettingWindow ( ) :
def __init__ ( self ) :
self . draw_ui ( )
self . selected_widget = None
2022-11-08 01:27:06 +05:30
self . selected_name = None
def on_select_text ( self , widget , name ) :
if self . selected_widget is not None :
ba . textwidget ( edit = self . selected_widget , color = ( 1 , 1 , 1 ) )
ba . textwidget ( edit = widget , color = ( 1 , 1 , 0 ) )
2022-11-07 00:26:16 +05:30
self . selected_name = name
self . selected_widget = widget
2022-11-08 01:27:06 +05:30
2022-11-07 00:26:16 +05:30
def draw_ui ( self ) :
self . uiscale = ba . app . ui . uiscale
2022-11-08 01:27:06 +05:30
self . root = ba . Window ( ba . containerwidget ( size = ( 900 , 670 ) , on_outside_click_call = self . close , transition = " in_right " ) ) . get_root_widget ( )
2022-11-07 00:26:16 +05:30
ba . textwidget (
parent = self . root ,
size = ( 200 , 100 ) ,
position = ( 150 , 550 ) ,
scale = 2 ,
selectable = False ,
h_align = " center " ,
v_align = " center " ,
text = " ShareReplay " ,
color = green )
2022-11-08 01:27:06 +05:30
2022-11-07 00:26:16 +05:30
ba . buttonwidget (
parent = self . root ,
2022-11-08 01:27:06 +05:30
position = ( 400 , 580 ) ,
size = ( 35 , 35 ) ,
texture = ba . gettexture ( " achievementEmpty " ) ,
label = " " ,
2022-11-07 00:26:16 +05:30
on_activate_call = Help )
2022-11-08 01:27:06 +05:30
2022-11-07 00:26:16 +05:30
ba . buttonwidget (
parent = self . root ,
position = ( 770 , 460 ) ,
size = ( 90 , 70 ) ,
scale = 1.5 ,
label = " EXPORT " ,
on_activate_call = self . export )
2022-11-08 01:27:06 +05:30
2022-11-07 00:26:16 +05:30
self . close_button = ba . buttonwidget (
parent = self . root ,
position = ( 820 , 590 ) ,
size = ( 35 , 35 ) ,
2022-11-07 02:53:57 +05:30
texture = ba . gettexture ( " crossOut " ) ,
2022-11-08 01:27:06 +05:30
label = " " ,
2022-11-07 00:26:16 +05:30
scale = 2 ,
color = ( 1 , 0.2 , 0.2 ) ,
extra_touch_border_scale = 3 ,
on_activate_call = self . close )
2022-11-08 01:27:06 +05:30
scroll = ba . scrollwidget (
2022-11-07 00:26:16 +05:30
parent = self . root ,
2022-11-08 01:27:06 +05:30
size = ( 500 , 400 ) ,
position = ( 200 , 150 ) )
self . scroll = ba . columnwidget ( parent = scroll , size = ( 500 , 900 ) , selection_loops_to_parent = True , single_depth = True )
height = 900
2022-11-07 00:26:16 +05:30
for i in listdir ( internal_dir ) :
2022-11-08 01:27:06 +05:30
height - = 40
a = i
2022-11-07 00:26:16 +05:30
i = ba . textwidget (
2022-11-08 01:27:06 +05:30
parent = self . scroll ,
size = ( 500 , 50 ) ,
text = i . split ( " . " ) [ 0 ] ,
position = ( 10 , height ) ,
2022-11-07 00:26:16 +05:30
selectable = True ,
max_chars = 40 ,
click_activate = True , )
2022-11-08 01:27:06 +05:30
ba . textwidget ( edit = i , on_activate_call = ba . Call ( self . on_select_text , i , a ) )
2022-11-07 00:26:16 +05:30
def export ( self ) :
2022-11-08 01:27:06 +05:30
if self . selected_name is None :
Print ( " Select a replay " , color = red )
return
copy ( internal_dir + " / " + self . selected_name , external_dir + " / " + self . selected_name )
Print ( self . selected_name [ 0 : - 4 ] + " exported " , top = True , color = pink ) #image={"texture":ba.gettexture("bombColor"),"tint_texture":None,"tint_color":None,"tint2_color":None})
2022-11-07 00:26:16 +05:30
def close ( self ) :
ba . playsound ( ba . getsound ( ' swish ' ) )
2022-11-08 01:27:06 +05:30
ba . containerwidget ( edit = self . root , transition = " out_right " , )
2022-11-07 00:26:16 +05:30
# ++++++++++++++++for keyboard navigation++++++++++++++++
2022-11-08 01:27:06 +05:30
#ba.widget(edit=self.enable_button, up_widget=decrease_button, down_widget=self.lower_text,left_widget=save_button, right_widget=save_button)
2022-11-07 00:26:16 +05:30
# --------------------------------------------------------------------------------------------------
2022-11-08 01:27:06 +05:30
ww . __old_init__ = ww . __init__
2022-11-06 21:24:27 +00:00
2022-11-08 01:27:06 +05:30
def new_init ( self , transition = " in_right " , origin_widget = None ) :
self . __old_init__ ( transition , origin_widget )
2022-11-07 00:26:16 +05:30
self . _share_button = ba . buttonwidget (
parent = self . _root_widget ,
position = ( self . _width * 0.70 , self . _height * 0.80 ) ,
size = ( 220 , 60 ) ,
scale = 1.0 ,
color = green ,
icon = ba . gettexture ( ' usersButton ' ) ,
iconscale = 1.5 ,
label = " SHARE REPLAY " ,
on_activate_call = SettingWindow )
2022-11-08 01:27:06 +05:30
2022-11-07 00:26:16 +05:30
# ba_meta export plugin
2022-11-08 01:27:06 +05:30
class Loup ( ba . Plugin ) :
2022-11-07 00:26:16 +05:30
def on_app_running ( self ) :
2022-11-08 01:27:06 +05:30
ww . __init__ = new_init
2022-11-07 00:26:16 +05:30
def has_settings_ui ( self ) :
return True
2022-11-08 01:27:06 +05:30
def show_settings_ui ( self , button ) :
2022-11-07 00:26:16 +05:30
SettingWindow ( )
2022-11-08 01:27:06 +05:30