bombsquad-plugin-manager/plugins/utilities/mood_light.py

326 lines
11 KiB
Python
Raw Normal View History

2022-09-21 18:09:19 +05:30
# ba_meta require api 7
from __future__ import annotations
from typing import TYPE_CHECKING, cast
2022-10-04 22:41:05 +05:30
if TYPE_CHECKING:
from typing import Any, Sequence, Callable, List, Dict, Tuple, Optional, Union
2022-09-21 18:09:19 +05:30
import random
2022-10-06 05:40:50 +00:00
import ba
import _ba
2022-09-21 18:09:19 +05:30
from ba._map import Map
from bastd import mainmenu
2022-09-22 13:28:25 +05:30
from bastd.ui.party import PartyWindow
2022-09-21 18:09:19 +05:30
from bastd.gameutils import SharedObjects
2022-09-30 15:48:48 +00:00
2022-10-04 22:41:05 +05:30
"""mood light plugin by ʟօʊքɢǟʀօʊ
type ml in chat or use plugin manager to open settings"""
2022-10-06 05:40:50 +00:00
2022-10-04 22:41:05 +05:30
def Print(*args):
2022-11-05 16:40:42 +05:30
out=""
for arg in args:
a=str(arg)
out += a
2022-10-04 22:41:05 +05:30
ba.screenmessage(out)
2022-10-06 05:40:50 +00:00
2022-10-04 22:41:05 +05:30
def cprint(*args):
2022-11-05 16:40:42 +05:30
out=""
for arg in args:
a=str(arg)
out += a
2022-10-04 22:41:05 +05:30
_ba.chatmessage(out)
2022-09-30 15:50:42 +00:00
2022-10-06 06:02:49 +00:00
try:
2022-10-06 05:40:50 +00:00
Ldefault, Udefault = ba.app.config.get("moodlightingSettings")
except:
2022-10-06 05:40:50 +00:00
ba.app.config["moodlightingSettings"] = (15, 20)
Ldefault, Udefault = ba.app.config.get("moodlightingSettings")
Print("settings up moodlight")
Print("Type ml in chat or use plugin manager to access settings")
2022-10-04 13:47:59 +05:30
try:
2022-10-06 05:40:50 +00:00
loop = ba.app.config.get("moodlightEnabled")
2022-10-04 13:47:59 +05:30
except:
2022-10-06 05:40:50 +00:00
ba.app.config["moodlightEnabled"] = True
2022-10-04 13:47:59 +05:30
ba.app.config.commit()
2022-10-06 05:40:50 +00:00
loop = True
2022-09-30 12:30:48 +00:00
2022-09-30 15:50:42 +00:00
2022-09-22 04:12:19 +05:30
class SettingWindow(ba.Window):
2022-09-30 12:30:48 +00:00
def __init__(self):
self.draw_ui()
def increase_limit(self):
global Ldefault, Udefault
try:
if Udefault >= 29 and self.selected == "upper":
ba.textwidget(edit=self.warn_text,
text="Careful!You risk get blind beyond this point")
elif self.selected == "lower" and Ldefault >= -20 or self.selected == "upper" and Udefault <= 30:
ba.textwidget(edit=self.warn_text, text="")
if self.selected == "lower":
Ldefault += 1
ba.textwidget(edit=self.lower_text, text=str(Ldefault))
elif self.selected == "upper":
Udefault += 1
ba.textwidget(edit=self.upper_text, text=str(Udefault))
except AttributeError:
ba.textwidget(edit=self.warn_text, text="Click on number to select it")
def decrease_limit(self):
global Ldefault, Udefault
try:
if Ldefault <= -19 and self.selected == "lower":
ba.textwidget(edit=self.warn_text,
text="DON'T BE AFRAID OF DARK,IT'S A PLACE WHERE YOU CAN HIDE")
elif (self.selected == "upper" and Udefault <= 30) or (self.selected == "lower" and Ldefault >= -20):
ba.textwidget(edit=self.warn_text, text="")
if self.selected == "lower":
Ldefault -= 1
ba.textwidget(edit=self.lower_text, text=str(Ldefault))
elif self.selected == "upper":
Udefault -= 1
ba.textwidget(edit=self.upper_text, text=str(Udefault))
except AttributeError:
ba.textwidget(edit=self.warn_text, text="Click on number to select it")
def on_text_click(self, selected):
self.selected = selected
if selected == "upper":
ba.textwidget(edit=self.upper_text, color=(0, 0, 1))
ba.textwidget(edit=self.lower_text, color=(1, 1, 1))
elif selected == "lower":
ba.textwidget(edit=self.lower_text, color=(0, 0, 1))
ba.textwidget(edit=self.upper_text, color=(1, 1, 1))
else:
Print("this should't happen from on_text_click")
def draw_ui(self):
self.uiscale = ba.app.ui.uiscale
super().__init__(
root_widget=ba.containerwidget(
size=(670, 670),
on_outside_click_call=self.close,
transition="in_right",))
moodlight_label = ba.textwidget(
parent=self._root_widget,
size=(200, 100),
position=(150, 550),
scale=2,
2022-10-04 22:41:05 +05:30
selectable=False,
2022-09-30 12:30:48 +00:00
h_align="center",
v_align="center",
text="Mood light settings",
color=(0, 1, 0))
2022-10-06 05:40:50 +00:00
self.enable_button = ba.buttonwidget(
2022-10-04 13:47:59 +05:30
parent=self._root_widget,
position=(100, 470),
size=(90, 70),
scale=1.5,
2022-10-06 05:40:50 +00:00
color=(1, 0, 0) if loop else (0, 1, 0),
2022-10-04 13:47:59 +05:30
label="DISABLE" if loop else "ENABLE",
on_activate_call=self.on_enableButton_press)
2022-10-06 05:40:50 +00:00
2022-10-04 22:41:05 +05:30
save_button = ba.buttonwidget(
2022-09-30 12:30:48 +00:00
parent=self._root_widget,
2022-10-04 22:41:05 +05:30
position=(520, 470),
size=(90, 70),
scale=1.5,
label="SAVE",
2022-10-06 05:40:50 +00:00
on_activate_call=self.save_settings)
2022-10-04 22:41:05 +05:30
self.close_button = ba.buttonwidget(
2022-09-30 12:30:48 +00:00
parent=self._root_widget,
2022-10-04 22:41:05 +05:30
position=(550, 590),
size=(35, 35),
icon=ba.gettexture("crossOut"),
icon_color=(1, 0.2, 0.2),
scale=2,
color=(1, 0.2, 0.2),
extra_touch_border_scale=5,
on_activate_call=self.close)
2022-09-30 12:30:48 +00:00
self.lower_text = ba.textwidget(
parent=self._root_widget,
size=(200, 100),
scale=2,
position=(100, 200),
h_align="center",
v_align="center",
maxwidth=400.0,
text=str(Ldefault),
click_activate=True,
selectable=True)
lower_text_label = ba.textwidget(
parent=self._root_widget,
size=(200, 100),
position=(100, 150),
h_align="center",
v_align="center",
text="Limit darkness")
self.upper_text = ba.textwidget(
parent=self._root_widget,
size=(200, 100),
scale=2,
position=(400, 200),
h_align="center",
v_align="center",
maxwidth=400.0,
text=str(Udefault),
click_activate=True,
selectable=True)
upper_text_label = ba.textwidget(
parent=self._root_widget,
size=(200, 100),
position=(400, 150),
h_align="center",
v_align="center",
text="Limit brightness")
2022-10-06 05:40:50 +00:00
2022-10-04 22:41:05 +05:30
decrease_button = ba.buttonwidget(
parent=self._root_widget,
position=(100, 100),
size=(5, 1),
scale=3.5,
extra_touch_border_scale=2.5,
icon=ba.gettexture("downButton"),
2022-10-06 05:40:50 +00:00
on_activate_call=self.decrease_limit)
2022-10-04 22:41:05 +05:30
increase_button = ba.buttonwidget(
parent=self._root_widget,
position=(600, 100),
size=(5, 1),
scale=3.5,
extra_touch_border_scale=2.5,
icon=ba.gettexture("upButton"),
on_activate_call=self.increase_limit)
2022-09-30 12:30:48 +00:00
self.warn_text = ba.textwidget(
parent=self._root_widget,
text="",
size=(400, 200),
position=(150, 300),
h_align="center",
v_align="center",
2022-10-06 05:40:50 +00:00
maxwidth=600)
# ++++++++++++++++for keyboard navigation++++++++++++++++
ba.widget(edit=self.enable_button, up_widget=decrease_button,
down_widget=self.lower_text, left_widget=save_button, right_widget=save_button)
ba.widget(edit=save_button, up_widget=self.close_button, down_widget=self.upper_text,
left_widget=self.enable_button, right_widget=self.enable_button)
ba.widget(edit=self.close_button, up_widget=increase_button, down_widget=save_button,
left_widget=self.enable_button, right_widget=save_button)
ba.widget(edit=self.lower_text, up_widget=self.enable_button, down_widget=decrease_button,
left_widget=self.upper_text, right_widget=self.upper_text)
ba.widget(edit=self.upper_text, up_widget=save_button, down_widget=increase_button,
left_widget=self.lower_text, right_widget=self.lower_text)
ba.widget(edit=decrease_button, up_widget=self.lower_text, down_widget=self.enable_button,
left_widget=increase_button, right_widget=increase_button)
ba.widget(edit=increase_button, up_widget=self.upper_text, down_widget=self.close_button,
left_widget=decrease_button, right_widget=decrease_button)
# --------------------------------------------------------------------------------------------------
2022-09-30 12:30:48 +00:00
ba.textwidget(edit=self.upper_text, on_activate_call=ba.Call(self.on_text_click, "upper"))
ba.textwidget(edit=self.lower_text, on_activate_call=ba.Call(self.on_text_click, "lower"))
2022-10-06 05:40:50 +00:00
2022-10-04 13:47:59 +05:30
def on_enableButton_press(self):
global loop
2022-10-06 05:40:50 +00:00
loop = ba.app.config.get("moodlightEnabled")
2022-10-04 13:47:59 +05:30
if loop:
2022-10-06 05:40:50 +00:00
loop = False
label = "ENABLE"
color = (0, 1, 0)
2022-10-04 13:47:59 +05:30
elif not loop:
2022-10-06 05:40:50 +00:00
loop = True
label = "DISABLE"
color = (1, 0, 0)
in_game = not isinstance(_ba.get_foreground_host_session(), mainmenu.MainMenuSession)
if in_game:
Print("Restart level to apply")
2022-10-06 05:40:50 +00:00
ba.app.config["moodlightEnabled"] = loop
2022-10-04 13:47:59 +05:30
ba.app.config.commit()
2022-10-06 05:40:50 +00:00
ba.buttonwidget(edit=self.enable_button, label=label, color=color)
2022-09-30 12:30:48 +00:00
def save_settings(self):
2022-10-06 05:40:50 +00:00
ba.app.config["moodlightingSettings"] = (Ldefault, Udefault)
2022-10-04 07:12:12 +05:30
ba.app.config.commit()
2022-09-30 12:30:48 +00:00
Print("settings saved")
self.close()
def close(self):
ba.containerwidget(edit=self._root_widget, transition="out_right",)
2022-10-06 05:40:50 +00:00
def new_chat_message(msg: Union[str, ba.Lstr], clients: Sequence[int] = None, sender_override: str = None):
old_fcm(msg, clients, sender_override)
if msg == 'ml':
try:
2022-10-28 12:51:45 +00:00
global Ldefault, Udefault
2022-10-06 05:40:50 +00:00
Ldefault, Udefault = ba.app.config.get("moodlightingSettings")
SettingWindow()
cprint("Mood light settings opened")
except Exception as err:
2022-10-28 12:51:45 +00:00
Print(err, "-from new_chat_message")
2022-10-06 05:40:50 +00:00
old_fcm = _ba.chatmessage
_ba.chatmessage = new_chat_message
2022-10-04 22:41:05 +05:30
_ba.set_party_icon_always_visible(True)
2022-10-06 05:40:50 +00:00
Map._old_init = Map.__init__
2022-09-22 04:12:19 +05:30
# ba_meta export plugin
2022-09-30 15:50:42 +00:00
2022-10-06 05:40:50 +00:00
2022-09-22 04:12:19 +05:30
class moodlight(ba.Plugin):
2022-09-22 13:28:25 +05:30
def __init__(self):
2022-10-02 01:23:43 +05:30
pass
2022-10-06 05:40:50 +00:00
2022-09-22 04:12:19 +05:30
def on_app_running(self):
2022-10-06 05:40:50 +00:00
_ba.show_progress_bar()
2022-11-03 17:36:35 +00:00
2022-11-03 23:06:11 +05:30
def on_plugin_manager_prompt(self):
SettingWindow()
2022-10-28 12:51:45 +00:00
def has_settings_ui(self):
return True
2022-10-28 12:51:45 +00:00
def show_settings_ui(self, button):
2022-10-06 05:40:50 +00:00
SettingWindow()
2022-10-04 13:47:59 +05:30
2022-09-21 18:09:19 +05:30
def _new_init(self, vr_overlay_offset: Optional[Sequence[float]] = None) -> None:
2022-09-30 12:30:48 +00:00
self._old_init(vr_overlay_offset)
2022-10-06 05:40:50 +00:00
in_game = not isinstance(_ba.get_foreground_host_session(), mainmenu.MainMenuSession)
2022-09-30 12:30:48 +00:00
if not in_game:
return
2022-10-06 05:40:50 +00:00
2022-09-21 18:09:19 +05:30
gnode = _ba.getactivity().globalsnode
2022-10-06 05:40:50 +00:00
default_tint = (1.100000023841858, 1.0, 0.8999999761581421)
transition_duration = 1.0 # for future improvements
def changetint():
if loop:
Range = (random.randrange(Ldefault, Udefault)/10, random.randrange(Ldefault,
Udefault)/10, random.randrange(Ldefault, Udefault)/10)
ba.animate_array(gnode, 'tint', 3, {
0.0: gnode.tint,
transition_duration: Range
})
else:
global timer
timer = None
ba.animate_array(gnode, "tint", 3, {0.0: gnode.tint, 0.4: default_tint})
2022-10-04 13:47:59 +05:30
global timer
2022-10-06 05:40:50 +00:00
timer = ba.Timer(0.3, changetint, repeat=True)
2022-10-04 13:47:59 +05:30
2022-10-06 05:40:50 +00:00
Map.__init__ = _new_init