mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-25 16:33:20 +08:00
more tidying
This commit is contained in:
parent
b645c883c2
commit
2d0364c8e6
@ -222,7 +222,6 @@ class ClassicSubsystem(AppSubsystem):
|
||||
# Run a test in a few seconds to see if we should pop up an existing
|
||||
# pending special offer.
|
||||
def check_special_offer() -> None:
|
||||
plus = bui.app.plus
|
||||
assert plus is not None
|
||||
|
||||
from bauiv1lib.specialoffer import show_offer
|
||||
|
||||
@ -4,16 +4,10 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import weakref
|
||||
import logging
|
||||
from typing import TYPE_CHECKING, Generic, TypeVar
|
||||
|
||||
import _babase
|
||||
from babase._error import (
|
||||
print_exception,
|
||||
SessionTeamNotFoundError,
|
||||
SessionPlayerNotFoundError,
|
||||
NodeNotFoundError,
|
||||
)
|
||||
from babase._general import Call, verify_object_death
|
||||
import babase
|
||||
import _bascenev1
|
||||
from bascenev1._dependency import DependencyComponent
|
||||
from bascenev1._team import Team
|
||||
@ -179,7 +173,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
# is dying.
|
||||
self._actor_refs: list[bascenev1.Actor] = []
|
||||
self._actor_weak_refs: list[weakref.ref[bascenev1.Actor]] = []
|
||||
self._last_prune_dead_actors_time = _babase.apptime()
|
||||
self._last_prune_dead_actors_time = babase.apptime()
|
||||
self._prune_dead_actors_timer: bascenev1.Timer | None = None
|
||||
|
||||
self.teams = []
|
||||
@ -193,15 +187,15 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
# If the activity has been run then we should have already cleaned
|
||||
# it up, but we still need to run expire calls for un-run activities.
|
||||
if not self._expired:
|
||||
with _babase.ContextRef.empty():
|
||||
with babase.ContextRef.empty():
|
||||
self._expire()
|
||||
|
||||
# Inform our owner that we officially kicked the bucket.
|
||||
if self._transitioning_out:
|
||||
session = self._session()
|
||||
if session is not None:
|
||||
_babase.pushcall(
|
||||
Call(
|
||||
babase.pushcall(
|
||||
babase.Call(
|
||||
session.transitioning_out_activity_was_freed,
|
||||
self.can_show_ad_on_death,
|
||||
)
|
||||
@ -219,7 +213,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
"""
|
||||
node = self._globalsnode
|
||||
if not node:
|
||||
raise NodeNotFoundError()
|
||||
raise babase.NodeNotFoundError()
|
||||
return node
|
||||
|
||||
@property
|
||||
@ -290,10 +284,12 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
# and reports any lingering references keeping it alive.
|
||||
# We store the timer on the activity so as soon as the activity dies
|
||||
# it gets cleaned up.
|
||||
with _babase.ContextRef.empty():
|
||||
with babase.ContextRef.empty():
|
||||
ref = weakref.ref(self)
|
||||
self._activity_death_check_timer = _babase.AppTimer(
|
||||
5.0, Call(self._check_activity_death, ref, [0]), repeat=True
|
||||
self._activity_death_check_timer = babase.AppTimer(
|
||||
5.0,
|
||||
babase.Call(self._check_activity_death, ref, [0]),
|
||||
repeat=True,
|
||||
)
|
||||
|
||||
# Run _expire in an empty context; nothing should be happening in
|
||||
@ -302,7 +298,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
# and we can't properly provide context in that situation anyway; might
|
||||
# as well be consistent).
|
||||
if not self._expired:
|
||||
with _babase.ContextRef.empty():
|
||||
with babase.ContextRef.empty():
|
||||
self._expire()
|
||||
else:
|
||||
raise RuntimeError(
|
||||
@ -460,7 +456,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self.on_transition_in()
|
||||
except Exception:
|
||||
print_exception(f'Error in on_transition_in for {self}.')
|
||||
logging.exception('Error in on_transition_in for %s.', self)
|
||||
|
||||
# Tell the C++ layer that this activity is the main one, so it uses
|
||||
# settings from our globals, directs various events to us, etc.
|
||||
@ -474,7 +470,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self.on_transition_out()
|
||||
except Exception:
|
||||
print_exception(f'Error in on_transition_out for {self}.')
|
||||
logging.exception('Error in on_transition_out for %s.', self)
|
||||
|
||||
def begin(self, session: bascenev1.Session) -> None:
|
||||
"""Begin the activity.
|
||||
@ -570,7 +566,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self.on_player_join(player)
|
||||
except Exception:
|
||||
print_exception(f'Error in on_player_join for {self}.')
|
||||
logging.exception('Error in on_player_join for %s.', self)
|
||||
|
||||
def remove_player(self, sessionplayer: bascenev1.SessionPlayer) -> None:
|
||||
"""Remove a player from the Activity while it is running.
|
||||
@ -600,11 +596,11 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self.on_player_leave(player)
|
||||
except Exception:
|
||||
print_exception(f'Error in on_player_leave for {self}.')
|
||||
logging.exception('Error in on_player_leave for %s.', self)
|
||||
try:
|
||||
player.leave()
|
||||
except Exception:
|
||||
print_exception(f'Error on leave for {player} in {self}.')
|
||||
logging.exception('Error on leave for %s in %s.', player, self)
|
||||
|
||||
self._reset_session_player_for_no_activity(sessionplayer)
|
||||
|
||||
@ -629,7 +625,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self.on_team_join(team)
|
||||
except Exception:
|
||||
print_exception(f'Error in on_team_join for {self}.')
|
||||
logging.exception('Error in on_team_join for %s.', self)
|
||||
|
||||
def remove_team(self, sessionteam: bascenev1.SessionTeam) -> None:
|
||||
"""Remove a team from a Running Activity
|
||||
@ -651,11 +647,11 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self.on_team_leave(team)
|
||||
except Exception:
|
||||
print_exception(f'Error in on_team_leave for {self}.')
|
||||
logging.exception('Error in on_team_leave for %s.', self)
|
||||
try:
|
||||
team.leave()
|
||||
except Exception:
|
||||
print_exception(f'Error on leave for {team} in {self}.')
|
||||
logging.exception('Error on leave for %s in %s.', team, self)
|
||||
|
||||
sessionteam.activityteam = None
|
||||
|
||||
@ -675,16 +671,18 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
sessionplayer.setnode(None)
|
||||
except Exception:
|
||||
print_exception(
|
||||
f'Error resetting SessionPlayer node on {sessionplayer}'
|
||||
f' for {self}.'
|
||||
logging.exception(
|
||||
'Error resetting SessionPlayer node on %s for %s.',
|
||||
sessionplayer,
|
||||
self,
|
||||
)
|
||||
try:
|
||||
sessionplayer.resetinput()
|
||||
except Exception:
|
||||
print_exception(
|
||||
f'Error resetting SessionPlayer input on {sessionplayer}'
|
||||
f' for {self}.'
|
||||
logging.exception(
|
||||
'Error resetting SessionPlayer input on %s for %s.',
|
||||
sessionplayer,
|
||||
self,
|
||||
)
|
||||
|
||||
# These should never fail I think...
|
||||
@ -749,10 +747,10 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
counter[0] += 1
|
||||
if counter[0] == 4:
|
||||
print('Killing app due to stuck activity... :-(')
|
||||
_babase.quit()
|
||||
babase.quit()
|
||||
|
||||
except Exception:
|
||||
print_exception('Error on _check_activity_death/')
|
||||
logging.exception('Error on _check_activity_death.')
|
||||
|
||||
def _expire(self) -> None:
|
||||
"""Put the activity in a state where it can be garbage-collected.
|
||||
@ -766,12 +764,12 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self.on_expire()
|
||||
except Exception:
|
||||
print_exception(f'Error in Activity on_expire() for {self}.')
|
||||
logging.exception('Error in Activity on_expire() for %s.', self)
|
||||
|
||||
try:
|
||||
self._customdata = None
|
||||
except Exception:
|
||||
print_exception(f'Error clearing customdata for {self}.')
|
||||
logging.exception('Error clearing customdata for %s.', self)
|
||||
|
||||
# Don't want to be holding any delay-delete refs at this point.
|
||||
self._prune_delay_deletes()
|
||||
@ -786,19 +784,19 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
try:
|
||||
self._activity_data.expire()
|
||||
except Exception:
|
||||
print_exception(f'Error expiring _activity_data for {self}.')
|
||||
logging.exception('Error expiring _activity_data for %s.', self)
|
||||
|
||||
def _expire_actors(self) -> None:
|
||||
# Expire all Actors.
|
||||
for actor_ref in self._actor_weak_refs:
|
||||
actor = actor_ref()
|
||||
if actor is not None:
|
||||
verify_object_death(actor)
|
||||
babase.verify_object_death(actor)
|
||||
try:
|
||||
actor.on_expire()
|
||||
except Exception:
|
||||
print_exception(
|
||||
f'Error in Actor.on_expire()' f' for {actor_ref()}.'
|
||||
logging.exception(
|
||||
'Error in Actor.on_expire() for %s.', actor_ref()
|
||||
)
|
||||
|
||||
def _expire_players(self) -> None:
|
||||
@ -806,57 +804,57 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
# get freed soon.
|
||||
for ex_player in (p() for p in self._players_that_left):
|
||||
if ex_player is not None:
|
||||
verify_object_death(ex_player)
|
||||
babase.verify_object_death(ex_player)
|
||||
|
||||
for player in self.players:
|
||||
# This should allow our bascenev1.Player instance to be freed.
|
||||
# Complain if that doesn't happen.
|
||||
verify_object_death(player)
|
||||
babase.verify_object_death(player)
|
||||
|
||||
try:
|
||||
player.expire()
|
||||
except Exception:
|
||||
print_exception(f'Error expiring {player}')
|
||||
logging.exception('Error expiring %s.', player)
|
||||
|
||||
# Reset the SessionPlayer to a not-in-an-activity state.
|
||||
try:
|
||||
sessionplayer = player.sessionplayer
|
||||
self._reset_session_player_for_no_activity(sessionplayer)
|
||||
except SessionPlayerNotFoundError:
|
||||
except babase.SessionPlayerNotFoundError:
|
||||
# Conceivably, someone could have held on to a Player object
|
||||
# until now whos underlying SessionPlayer left long ago...
|
||||
pass
|
||||
except Exception:
|
||||
print_exception(f'Error expiring {player}.')
|
||||
logging.exception('Error expiring %s.', player)
|
||||
|
||||
def _expire_teams(self) -> None:
|
||||
# Issue warnings for any teams that left the game but don't
|
||||
# get freed soon.
|
||||
for ex_team in (p() for p in self._teams_that_left):
|
||||
if ex_team is not None:
|
||||
verify_object_death(ex_team)
|
||||
babase.verify_object_death(ex_team)
|
||||
|
||||
for team in self.teams:
|
||||
# This should allow our bascenev1.Team instance to die.
|
||||
# Complain if that doesn't happen.
|
||||
verify_object_death(team)
|
||||
babase.verify_object_death(team)
|
||||
|
||||
try:
|
||||
team.expire()
|
||||
except Exception:
|
||||
print_exception(f'Error expiring {team}')
|
||||
logging.exception('Error expiring %s.', team)
|
||||
|
||||
try:
|
||||
sessionteam = team.sessionteam
|
||||
sessionteam.activityteam = None
|
||||
except SessionTeamNotFoundError:
|
||||
except babase.SessionTeamNotFoundError:
|
||||
# It is expected that Team objects may last longer than
|
||||
# the SessionTeam they came from (game objects may hold
|
||||
# team references past the point at which the underlying
|
||||
# player/team has left the game)
|
||||
pass
|
||||
except Exception:
|
||||
print_exception(f'Error expiring Team {team}.')
|
||||
logging.exception('Error expiring Team %s.', team)
|
||||
|
||||
def _prune_delay_deletes(self) -> None:
|
||||
self._delay_delete_players.clear()
|
||||
@ -871,7 +869,7 @@ class Activity(DependencyComponent, Generic[PlayerT, TeamT]):
|
||||
]
|
||||
|
||||
def _prune_dead_actors(self) -> None:
|
||||
self._last_prune_dead_actors_time = _babase.apptime()
|
||||
self._last_prune_dead_actors_time = babase.apptime()
|
||||
|
||||
# Prune our strong refs when the Actor's exists() call gives False
|
||||
self._actor_refs = [a for a in self._actor_refs if a.exists()]
|
||||
|
||||
@ -6,12 +6,10 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import random
|
||||
import logging
|
||||
from typing import TYPE_CHECKING, TypeVar
|
||||
|
||||
import _babase
|
||||
from babase._language import Lstr
|
||||
from babase._error import MapNotFoundError, print_error, print_exception
|
||||
from babase._general import WeakCall
|
||||
import babase
|
||||
import _bascenev1
|
||||
from bascenev1._activity import Activity
|
||||
from bascenev1._player import PlayerInfo
|
||||
@ -25,7 +23,6 @@ if TYPE_CHECKING:
|
||||
|
||||
from bascenev1lib.actor.playerspaz import PlayerSpaz
|
||||
from bascenev1lib.actor.bomb import TNTSpawner
|
||||
import babase
|
||||
import bascenev1
|
||||
|
||||
PlayerT = TypeVar('PlayerT', bound='bascenev1.Player')
|
||||
@ -89,8 +86,8 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
bascenev1.GameActivity.get_supported_maps() they can just rely on
|
||||
the default implementation here which calls those methods.
|
||||
"""
|
||||
assert _babase.app.classic is not None
|
||||
delegate = _babase.app.classic.delegate
|
||||
assert babase.app.classic is not None
|
||||
delegate = babase.app.classic.delegate
|
||||
assert delegate is not None
|
||||
delegate.create_default_game_settings_ui(
|
||||
cls, sessiontype, settings, completion_call
|
||||
@ -115,18 +112,18 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
|
||||
Subclasses should override getname(); not this.
|
||||
"""
|
||||
name = Lstr(translate=('gameNames', cls.getname()))
|
||||
name = babase.Lstr(translate=('gameNames', cls.getname()))
|
||||
|
||||
# A few substitutions for 'Epic', 'Solo' etc. modes.
|
||||
# FIXME: Should provide a way for game types to define filters of
|
||||
# their own and should not rely on hard-coded settings names.
|
||||
if settings is not None:
|
||||
if 'Solo Mode' in settings and settings['Solo Mode']:
|
||||
name = Lstr(
|
||||
name = babase.Lstr(
|
||||
resource='soloNameFilterText', subs=[('${NAME}', name)]
|
||||
)
|
||||
if 'Epic Mode' in settings and settings['Epic Mode']:
|
||||
name = Lstr(
|
||||
name = babase.Lstr(
|
||||
resource='epicNameFilterText', subs=[('${NAME}', name)]
|
||||
)
|
||||
|
||||
@ -135,7 +132,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
@classmethod
|
||||
def get_team_display_string(cls, name: str) -> babase.Lstr:
|
||||
"""Given a team name, returns a localized version of it."""
|
||||
return Lstr(translate=('teamNames', name))
|
||||
return babase.Lstr(translate=('teamNames', name))
|
||||
|
||||
@classmethod
|
||||
def get_description(cls, sessiontype: type[bascenev1.Session]) -> str:
|
||||
@ -157,7 +154,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
Sub-classes should override get_description(); not this.
|
||||
"""
|
||||
description = cls.get_description(sessiontype)
|
||||
return Lstr(translate=('gameDescriptions', description))
|
||||
return babase.Lstr(translate=('gameDescriptions', description))
|
||||
|
||||
@classmethod
|
||||
def get_available_settings(
|
||||
@ -179,8 +176,8 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
for this game-type for the given bascenev1.Session type.
|
||||
"""
|
||||
del sessiontype # Unused arg.
|
||||
assert _babase.app.classic is not None
|
||||
return _babase.app.classic.getmaps('melee')
|
||||
assert babase.app.classic is not None
|
||||
return babase.app.classic.getmaps('melee')
|
||||
|
||||
@classmethod
|
||||
def get_settings_display_string(cls, config: dict[str, Any]) -> babase.Lstr:
|
||||
@ -194,7 +191,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# In newer configs, map is in settings; it used to be in the
|
||||
# config root.
|
||||
if 'map' in config['settings']:
|
||||
sval = Lstr(
|
||||
sval = babase.Lstr(
|
||||
value='${NAME} @ ${MAP}',
|
||||
subs=[
|
||||
('${NAME}', name),
|
||||
@ -209,7 +206,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
],
|
||||
)
|
||||
elif 'map' in config:
|
||||
sval = Lstr(
|
||||
sval = babase.Lstr(
|
||||
value='${NAME} @ ${MAP}',
|
||||
subs=[
|
||||
('${NAME}', name),
|
||||
@ -223,7 +220,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
)
|
||||
else:
|
||||
print('invalid game config - expected map entry under settings')
|
||||
sval = Lstr(value='???')
|
||||
sval = babase.Lstr(value='???')
|
||||
return sval
|
||||
|
||||
@classmethod
|
||||
@ -240,7 +237,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
"""Instantiate the Activity."""
|
||||
super().__init__(settings)
|
||||
|
||||
plus = _babase.app.plus
|
||||
plus = babase.app.plus
|
||||
|
||||
# Holds some flattened info about the player set at the point
|
||||
# when on_begin() is called.
|
||||
@ -297,7 +294,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
exist.
|
||||
"""
|
||||
if self._map is None:
|
||||
raise MapNotFoundError
|
||||
raise babase.MapNotFoundError
|
||||
return self._map
|
||||
|
||||
def get_instance_display_string(self) -> babase.Lstr:
|
||||
@ -323,7 +320,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
self.session.campaign_level_name
|
||||
).displayname
|
||||
except Exception:
|
||||
print_error('error getting campaign level name')
|
||||
logging.exception('Error getting campaign level name.')
|
||||
return self.get_instance_display_string()
|
||||
|
||||
def get_instance_description(self) -> str | Sequence:
|
||||
@ -401,7 +398,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
"""
|
||||
|
||||
def _continue_choice(self, do_continue: bool) -> None:
|
||||
plus = _babase.app.plus
|
||||
plus = babase.app.plus
|
||||
assert plus is not None
|
||||
self._is_waiting_for_continue = False
|
||||
if self.has_ended():
|
||||
@ -436,11 +433,11 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# pylint: disable=cyclic-import
|
||||
from bascenev1._coopsession import CoopSession
|
||||
|
||||
classic = _babase.app.classic
|
||||
classic = babase.app.classic
|
||||
assert classic is not None
|
||||
continues_window = classic.continues_window
|
||||
|
||||
plus = _babase.app.plus
|
||||
plus = babase.app.plus
|
||||
try:
|
||||
if plus is not None and plus.get_v1_account_misc_read_val(
|
||||
'enableContinues', False
|
||||
@ -459,20 +456,20 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
|
||||
# Only attempt this if we're not currently paused
|
||||
# and there appears to be no UI.
|
||||
assert _babase.app.classic is not None
|
||||
hmmw = _babase.app.ui_v1.has_main_menu_window()
|
||||
assert babase.app.classic is not None
|
||||
hmmw = babase.app.ui_v1.has_main_menu_window()
|
||||
if not gnode.paused and not hmmw:
|
||||
self._is_waiting_for_continue = True
|
||||
with _babase.ContextRef.empty():
|
||||
_babase.apptimer(
|
||||
with babase.ContextRef.empty():
|
||||
babase.apptimer(
|
||||
0.5,
|
||||
lambda: continues_window(
|
||||
self,
|
||||
self._continue_cost,
|
||||
continue_call=WeakCall(
|
||||
continue_call=babase.WeakCall(
|
||||
self._continue_choice, True
|
||||
),
|
||||
cancel_call=WeakCall(
|
||||
cancel_call=babase.WeakCall(
|
||||
self._continue_choice, False
|
||||
),
|
||||
),
|
||||
@ -480,15 +477,15 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
return
|
||||
|
||||
except Exception:
|
||||
print_exception('Error handling continues.')
|
||||
logging.exception('Error handling continues.')
|
||||
|
||||
self.end_game()
|
||||
|
||||
def on_begin(self) -> None:
|
||||
super().on_begin()
|
||||
|
||||
if _babase.app.classic is not None:
|
||||
_babase.app.classic.game_begin_analytics()
|
||||
if babase.app.classic is not None:
|
||||
babase.app.classic.game_begin_analytics()
|
||||
|
||||
# We don't do this in on_transition_in because it may depend on
|
||||
# players/teams which aren't available until now.
|
||||
@ -510,13 +507,13 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# time is left.
|
||||
tournament_id = self.session.tournament_id
|
||||
if tournament_id is not None:
|
||||
assert _babase.app.plus is not None
|
||||
_babase.app.plus.tournament_query(
|
||||
assert babase.app.plus is not None
|
||||
babase.app.plus.tournament_query(
|
||||
args={
|
||||
'tournamentIDs': [tournament_id],
|
||||
'source': 'in-game time remaining query',
|
||||
},
|
||||
callback=WeakCall(self._on_tournament_query_response),
|
||||
callback=babase.WeakCall(self._on_tournament_query_response),
|
||||
)
|
||||
|
||||
def _on_tournament_query_response(
|
||||
@ -526,8 +523,8 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
data_t = data['t'] # This used to be the whole payload.
|
||||
|
||||
# Keep our cached tourney info up to date
|
||||
assert _babase.app.classic is not None
|
||||
_babase.app.classic.accounts.cache_tournament_info(data_t)
|
||||
assert babase.app.classic is not None
|
||||
babase.app.classic.accounts.cache_tournament_info(data_t)
|
||||
self._setup_tournament_time_limit(
|
||||
max(5, data_t[0]['timeRemaining'])
|
||||
)
|
||||
@ -598,11 +595,11 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
subs = []
|
||||
for i in range(len(sb_desc_l) - 1):
|
||||
subs.append(('${ARG' + str(i + 1) + '}', str(sb_desc_l[i + 1])))
|
||||
translation = Lstr(
|
||||
translation = babase.Lstr(
|
||||
translate=('gameDescriptions', sb_desc_l[0]), subs=subs
|
||||
)
|
||||
sb_desc = translation
|
||||
vrmode = _babase.app.vr_mode
|
||||
vrmode = babase.app.vr_mode
|
||||
yval = -34 if is_empty else -20
|
||||
yval -= 16
|
||||
sbpos = (
|
||||
@ -698,15 +695,17 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
subs = []
|
||||
for i in range(len(desc_l) - 1):
|
||||
subs.append(('${ARG' + str(i + 1) + '}', str(desc_l[i + 1])))
|
||||
translation = Lstr(translate=('gameDescriptions', desc_l[0]), subs=subs)
|
||||
translation = babase.Lstr(
|
||||
translate=('gameDescriptions', desc_l[0]), subs=subs
|
||||
)
|
||||
|
||||
# Do some standard filters (epic mode, etc).
|
||||
if self.settings_raw.get('Epic Mode', False):
|
||||
translation = Lstr(
|
||||
translation = babase.Lstr(
|
||||
resource='epicDescriptionFilterText',
|
||||
subs=[('${DESCRIPTION}', translation)],
|
||||
)
|
||||
vrmode = _babase.app.vr_mode
|
||||
vrmode = babase.app.vr_mode
|
||||
dnode = _bascenev1.newnode(
|
||||
'text',
|
||||
attrs={
|
||||
@ -741,8 +740,8 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# If there's any tips left on the list, display one.
|
||||
if self.tips:
|
||||
tip = self.tips.pop(random.randrange(len(self.tips)))
|
||||
tip_title = Lstr(
|
||||
value='${A}:', subs=[('${A}', Lstr(resource='tipText'))]
|
||||
tip_title = babase.Lstr(
|
||||
value='${A}:', subs=[('${A}', babase.Lstr(resource='tipText'))]
|
||||
)
|
||||
icon: bascenev1.Texture | None = None
|
||||
sound: bascenev1.Sound | None = None
|
||||
@ -753,14 +752,14 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
assert isinstance(tip, str)
|
||||
|
||||
# Do a few substitutions.
|
||||
tip_lstr = Lstr(
|
||||
tip_lstr = babase.Lstr(
|
||||
translate=('tips', tip),
|
||||
subs=[('${PICKUP}', _babase.charstr(SpecialChar.TOP_BUTTON))],
|
||||
subs=[('${PICKUP}', babase.charstr(SpecialChar.TOP_BUTTON))],
|
||||
)
|
||||
base_position = (75, 50)
|
||||
tip_scale = 0.8
|
||||
tip_title_scale = 1.2
|
||||
vrmode = _babase.app.vr_mode
|
||||
vrmode = babase.app.vr_mode
|
||||
|
||||
t_offs = -350.0
|
||||
tnode = _bascenev1.newnode(
|
||||
@ -909,7 +908,8 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
from bascenev1lib.actor.respawnicon import RespawnIcon
|
||||
|
||||
player.customdata['respawn_timer'] = _bascenev1.Timer(
|
||||
respawn_time, WeakCall(self.spawn_player_if_exists, player)
|
||||
respawn_time,
|
||||
babase.WeakCall(self.spawn_player_if_exists, player),
|
||||
)
|
||||
player.customdata['respawn_icon'] = RespawnIcon(
|
||||
player, respawn_time
|
||||
@ -958,7 +958,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
playerspaztype = PlayerSpaz
|
||||
|
||||
light_color = _math.normalized_color(color)
|
||||
display_color = _babase.safecolor(color, target_intensity=0.75)
|
||||
display_color = babase.safecolor(color, target_intensity=0.75)
|
||||
spaz = playerspaztype(
|
||||
color=color,
|
||||
highlight=highlight,
|
||||
@ -1006,7 +1006,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
|
||||
self._powerup_drop_timer = _bascenev1.Timer(
|
||||
DEFAULT_POWERUP_INTERVAL,
|
||||
WeakCall(self._standard_drop_powerups),
|
||||
babase.WeakCall(self._standard_drop_powerups),
|
||||
repeat=True,
|
||||
)
|
||||
self._standard_drop_powerups()
|
||||
@ -1030,7 +1030,9 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# Drop one powerup per point.
|
||||
points = self.map.powerup_spawn_points
|
||||
for i in range(len(points)):
|
||||
_bascenev1.timer(i * 0.4, WeakCall(self._standard_drop_powerup, i))
|
||||
_bascenev1.timer(
|
||||
i * 0.4, babase.WeakCall(self._standard_drop_powerup, i)
|
||||
)
|
||||
|
||||
def _setup_standard_tnt_drops(self) -> None:
|
||||
"""Standard tnt drop."""
|
||||
@ -1055,7 +1057,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
return
|
||||
self._standard_time_limit_time = int(duration)
|
||||
self._standard_time_limit_timer = _bascenev1.Timer(
|
||||
1.0, WeakCall(self._standard_time_limit_tick), repeat=True
|
||||
1.0, babase.WeakCall(self._standard_time_limit_tick), repeat=True
|
||||
)
|
||||
self._standard_time_limit_text = NodeActor(
|
||||
_bascenev1.newnode(
|
||||
@ -1121,7 +1123,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
'color': (1, 0.7, 0, 1),
|
||||
'position': (0, -90),
|
||||
'scale': 1.2,
|
||||
'text': Lstr(resource='timeExpiredText'),
|
||||
'text': babase.Lstr(resource='timeExpiredText'),
|
||||
},
|
||||
)
|
||||
_bascenev1.getsound('refWhistle').play()
|
||||
@ -1145,7 +1147,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# then we have to mess with contexts and whatnot since its currently
|
||||
# not available in activity contexts. :-/
|
||||
self._tournament_time_limit_timer = _bascenev1.BaseTimer(
|
||||
1.0, WeakCall(self._tournament_time_limit_tick), repeat=True
|
||||
1.0, babase.WeakCall(self._tournament_time_limit_tick), repeat=True
|
||||
)
|
||||
self._tournament_time_limit_title_text = NodeActor(
|
||||
_bascenev1.newnode(
|
||||
@ -1161,7 +1163,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
'position': (60, 50),
|
||||
'flatness': 1.0,
|
||||
'scale': 0.5,
|
||||
'text': Lstr(resource='tournamentText'),
|
||||
'text': babase.Lstr(resource='tournamentText'),
|
||||
},
|
||||
)
|
||||
)
|
||||
@ -1233,7 +1235,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
if self._tournament_time_limit <= 0:
|
||||
self._tournament_time_limit_timer = None
|
||||
self.end_game()
|
||||
tval = Lstr(
|
||||
tval = babase.Lstr(
|
||||
resource='tournamentTimeExpiredText',
|
||||
fallback_resource='timeExpiredText',
|
||||
)
|
||||
@ -1275,7 +1277,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# Reserve a spot on the screen (in case we get multiple of these so
|
||||
# they don't overlap).
|
||||
i = 0
|
||||
cur_time = _babase.apptime()
|
||||
cur_time = babase.apptime()
|
||||
while True:
|
||||
if (
|
||||
i not in self._zoom_message_times
|
||||
@ -1303,8 +1305,8 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
# If settings doesn't specify a map, pick a random one from the
|
||||
# list of supported ones.
|
||||
unowned_maps: list[str] = (
|
||||
_babase.app.classic.store.get_unowned_maps()
|
||||
if _babase.app.classic is not None
|
||||
babase.app.classic.store.get_unowned_maps()
|
||||
if babase.app.classic is not None
|
||||
else []
|
||||
)
|
||||
valid_maps: list[str] = [
|
||||
@ -1313,7 +1315,9 @@ class GameActivity(Activity[PlayerT, TeamT]):
|
||||
if m not in unowned_maps
|
||||
]
|
||||
if not valid_maps:
|
||||
_babase.screenmessage(Lstr(resource='noValidMapsErrorText'))
|
||||
babase.screenmessage(
|
||||
babase.Lstr(resource='noValidMapsErrorText')
|
||||
)
|
||||
raise RuntimeError('No valid maps')
|
||||
map_name = valid_maps[random.randrange(len(valid_maps))]
|
||||
return map_name
|
||||
|
||||
@ -5,17 +5,16 @@ from __future__ import annotations
|
||||
|
||||
import copy
|
||||
import random
|
||||
import logging
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import _babase
|
||||
import babase
|
||||
import _bascenev1
|
||||
from babase._error import NotFoundError, print_error
|
||||
from bascenev1._session import Session
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Sequence
|
||||
|
||||
import babase
|
||||
import bascenev1
|
||||
|
||||
DEFAULT_TEAM_COLORS = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2))
|
||||
@ -43,7 +42,7 @@ class MultiTeamSession(Session):
|
||||
from bascenev1 import _playlist
|
||||
from bascenev1lib.activity.multiteamjoin import MultiTeamJoinActivity
|
||||
|
||||
app = _babase.app
|
||||
app = babase.app
|
||||
classic = app.classic
|
||||
assert classic is not None
|
||||
cfg = app.config
|
||||
@ -163,8 +162,8 @@ class MultiTeamSession(Session):
|
||||
def get_max_players(self) -> int:
|
||||
"""Return max number of Players allowed to join the game at once."""
|
||||
if self.use_teams:
|
||||
return _babase.app.config.get('Team Game Max Players', 8)
|
||||
return _babase.app.config.get('Free-for-All Max Players', 8)
|
||||
return babase.app.config.get('Team Game Max Players', 8)
|
||||
return babase.app.config.get('Free-for-All Max Players', 8)
|
||||
|
||||
def _instantiate_next_game(self) -> None:
|
||||
self._next_game_instance = _bascenev1.newactivity(
|
||||
@ -229,7 +228,7 @@ class MultiTeamSession(Session):
|
||||
# (ie: no longer sitting in the lobby).
|
||||
try:
|
||||
has_team = player.sessionteam is not None
|
||||
except NotFoundError:
|
||||
except babase.NotFoundError:
|
||||
has_team = False
|
||||
if has_team:
|
||||
self.stats.register_sessionplayer(player)
|
||||
@ -245,7 +244,7 @@ class MultiTeamSession(Session):
|
||||
def _switch_to_score_screen(self, results: Any) -> None:
|
||||
"""Switch to a score screen after leaving a round."""
|
||||
del results # Unused arg.
|
||||
print_error('this should be overridden')
|
||||
logging.error('This should be overridden.', stack_info=True)
|
||||
|
||||
def announce_game_results(
|
||||
self,
|
||||
@ -262,8 +261,6 @@ class MultiTeamSession(Session):
|
||||
announcement of the same.
|
||||
"""
|
||||
# pylint: disable=cyclic-import
|
||||
from babase._math import normalized_color
|
||||
from babase._language import Lstr
|
||||
from bascenev1._gameutils import cameraflash
|
||||
from bascenev1._freeforallsession import FreeForAllSession
|
||||
from bascenev1._messages import CelebrateMessage
|
||||
@ -286,14 +283,14 @@ class MultiTeamSession(Session):
|
||||
wins_resource = 'winsPlayerText'
|
||||
else:
|
||||
wins_resource = 'winsTeamText'
|
||||
wins_text = Lstr(
|
||||
wins_text = babase.Lstr(
|
||||
resource=wins_resource,
|
||||
subs=[('${NAME}', winning_sessionteam.name)],
|
||||
)
|
||||
activity.show_zoom_message(
|
||||
wins_text,
|
||||
scale=0.85,
|
||||
color=normalized_color(winning_sessionteam.color),
|
||||
color=babase.normalized_color(winning_sessionteam.color),
|
||||
)
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user