mirror of
https://github.com/hypervortex/VH-Bombsquad-Modded-Server-Files
synced 2025-11-07 17:36:08 +00:00
112 lines
3.9 KiB
Python
112 lines
3.9 KiB
Python
# Released under the MIT License. See LICENSE for details.
|
|
#
|
|
"""Functionality related to the co-op join screen."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import ba
|
|
from ba.internal import JoinActivity
|
|
|
|
if TYPE_CHECKING:
|
|
pass
|
|
|
|
|
|
class CoopJoinActivity(JoinActivity):
|
|
"""Join-screen for co-op mode."""
|
|
|
|
# We can assume our session is a CoopSession.
|
|
session: ba.CoopSession
|
|
|
|
def __init__(self, settings: dict):
|
|
super().__init__(settings)
|
|
session = self.session
|
|
assert isinstance(session, ba.CoopSession)
|
|
|
|
def on_transition_in(self) -> None:
|
|
from bastd.actor.controlsguide import ControlsGuide
|
|
from bastd.actor.text import Text
|
|
|
|
super().on_transition_in()
|
|
assert isinstance(self.session, ba.CoopSession)
|
|
assert self.session.campaign
|
|
Text(
|
|
self.session.campaign.getlevel(
|
|
self.session.campaign_level_name
|
|
).displayname,
|
|
scale=1.3,
|
|
h_attach=Text.HAttach.CENTER,
|
|
h_align=Text.HAlign.CENTER,
|
|
v_attach=Text.VAttach.TOP,
|
|
transition=Text.Transition.FADE_IN,
|
|
transition_delay=4.0,
|
|
color=(1, 1, 1, 0.6),
|
|
position=(0, -95),
|
|
).autoretain()
|
|
ControlsGuide(delay=1.0).autoretain()
|
|
|
|
ba.pushcall(self._show_remaining_achievements)
|
|
|
|
def _show_remaining_achievements(self) -> None:
|
|
from bastd.actor.text import Text
|
|
|
|
# We only show achievements and challenges for CoopGameActivities.
|
|
session = self.session
|
|
assert isinstance(session, ba.CoopSession)
|
|
gameinstance = session.get_current_game_instance()
|
|
if not isinstance(gameinstance, ba.CoopGameActivity):
|
|
return
|
|
|
|
delay = 1.0
|
|
vpos = -140.0
|
|
|
|
# Now list our remaining achievements for this level.
|
|
assert self.session.campaign is not None
|
|
assert isinstance(self.session, ba.CoopSession)
|
|
levelname = (
|
|
self.session.campaign.name + ':' + self.session.campaign_level_name
|
|
)
|
|
ts_h_offs = 60
|
|
|
|
if not (ba.app.demo_mode or ba.app.arcade_mode):
|
|
achievements = [
|
|
a
|
|
for a in ba.app.ach.achievements_for_coop_level(levelname)
|
|
if not a.complete
|
|
]
|
|
have_achievements = bool(achievements)
|
|
achievements = [a for a in achievements if not a.complete]
|
|
vrmode = ba.app.vr_mode
|
|
if have_achievements:
|
|
Text(
|
|
ba.Lstr(resource='achievementsRemainingText'),
|
|
host_only=True,
|
|
position=(ts_h_offs - 10, vpos),
|
|
transition=Text.Transition.FADE_IN,
|
|
scale=1.1 * 0.76,
|
|
h_attach=Text.HAttach.LEFT,
|
|
v_attach=Text.VAttach.TOP,
|
|
color=(1, 1, 1.2, 1) if vrmode else (0.8, 0.8, 1, 1),
|
|
shadow=1.0,
|
|
flatness=1.0 if vrmode else 0.6,
|
|
transition_delay=delay,
|
|
).autoretain()
|
|
hval = ts_h_offs + 50
|
|
vpos -= 35
|
|
for ach in achievements:
|
|
delay += 0.05
|
|
ach.create_display(hval, vpos, delay, style='in_game')
|
|
vpos -= 55
|
|
if not achievements:
|
|
Text(
|
|
ba.Lstr(resource='noAchievementsRemainingText'),
|
|
host_only=True,
|
|
position=(ts_h_offs + 15, vpos + 10),
|
|
transition=Text.Transition.FADE_IN,
|
|
scale=0.7,
|
|
h_attach=Text.HAttach.LEFT,
|
|
v_attach=Text.VAttach.TOP,
|
|
color=(1, 1, 1, 0.5),
|
|
transition_delay=delay + 0.5,
|
|
).autoretain()
|