mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-30 11:13:17 +08:00
Tidying and language updates
This commit is contained in:
parent
9a48d6581a
commit
58766a8f6e
@ -423,7 +423,7 @@
|
||||
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/98/6d/e6de20b119fd6a5914982cd468b6",
|
||||
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/b8/ed/e18bec56ff1d094aae86517a7854",
|
||||
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/49/5f/b29bb65369040892fe6601801637",
|
||||
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/15/1b/3e0690b975c7cafbfa65e3aafad3",
|
||||
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/80/b2/b24a9a8395580ef2dea714abf478",
|
||||
"assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/aa/91/2411c0728bae33619c21237a2689",
|
||||
"assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/bb/9c/360fc084e6254a087096993af219",
|
||||
"assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/f2/90/62968ad28a2499a8d182a5740a85",
|
||||
@ -444,14 +444,14 @@
|
||||
"assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/db/eb/324f86a4b714240ae50ffeeed2f8",
|
||||
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/a9/bc/ea61ebd23066c685fb779e23d10f",
|
||||
"assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/f6/d0/335b952306d211d56172b5c72d8c",
|
||||
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/78/5e/d24967ddaa15e0a574bd274544db",
|
||||
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/56/f4/b76f1e862b29db5f642a67da67f3",
|
||||
"assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/e7/d8/ace32888249fc8b8cca0e2edb48b",
|
||||
"assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/b7/0a/fab820b96e7aa587ee56427ecdc2",
|
||||
"assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/90/d9/0f8f5b03bbe2dfebfb544cee6bd6",
|
||||
"assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0",
|
||||
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/b6/c9/999c95ff8d917126352a306d89a3",
|
||||
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/30/70/ba6f57b2d865d0027a50c6e1dba5",
|
||||
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/e0/f7/f6daa488dc29e303dea69aae864b",
|
||||
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/53/fe/b06f46dfeb31fb29d47a9546c01a",
|
||||
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/5f/a8/7d563fe99b8d1d1eb9bea49dc5df",
|
||||
"assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed",
|
||||
"assets/build/ba_data/data/maps/bridgit.json": "https://files.ballistica.net/cache/ba1/03/4b/57ee9b42854b26f23f81bd8c58ef",
|
||||
"assets/build/ba_data/data/maps/courtyard.json": "https://files.ballistica.net/cache/ba1/03/38/344dd05bfef7bbdf464035ec5aa2",
|
||||
@ -4132,16 +4132,16 @@
|
||||
"assets/build/windows/x64/python.exe": "https://files.ballistica.net/cache/ba1/25/a7/dc87c1be41605eb6fefd0145144c",
|
||||
"assets/build/windows/x64/python37.dll": "https://files.ballistica.net/cache/ba1/b9/e4/d912f56e42e9991bcbb4c804cfcb",
|
||||
"assets/build/windows/x64/pythonw.exe": "https://files.ballistica.net/cache/ba1/6c/bb/b6f52c306aa4e88061510e96cefe",
|
||||
"build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4c/7f/785a205dbe19ee4099f427dd9ca2",
|
||||
"build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b3/10/7ab16ca078a401bbbe2310660b85",
|
||||
"build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ef/f5/be729c0261c6326c3ef92330b764",
|
||||
"build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/98/9d/98bc183187af679fbc6531e3ac04",
|
||||
"build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/17/07/aed82d9bc9c5b4dd3457fcea9a8a",
|
||||
"build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/71/5e/a837ebb98b829cd3bebf081e02b0",
|
||||
"build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/a0/3204f264abfd13f40f7f4f72aa65",
|
||||
"build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/68/ab/de21be17db5b93a7191c353dbce8",
|
||||
"build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/54/5a/e32b46e614ed37c7ebe42c73b03c",
|
||||
"build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/15/09/2245bdaf317da30c7d63d8559c82",
|
||||
"build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f6/45/6972dd74de4fc822a28e995a4a0d",
|
||||
"build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/34/74/e8ff832e808ceaa07a4015fb2a5f"
|
||||
"build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/92/ca/9fa8a48f38554ef676a900136ce9",
|
||||
"build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/2c/f3e52a261f8dabced7a41d925053",
|
||||
"build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/df/82/1c63fa091da3fb52bcecf87f8ea6",
|
||||
"build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/83/18/a60e9e2f6e37e2f36ca8c8f4f42c",
|
||||
"build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/96/6a/cc35319fd83bca6ff578e4c8dad6",
|
||||
"build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5a/a2/b04d489862ae208c6b2b31697519",
|
||||
"build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a8/ca/89e007ea20b4f2a3dee09e1361c3",
|
||||
"build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/6e/cd/f8ad50715cb46d5cae7bd87bb498",
|
||||
"build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/36/d1/67a51def178a07f99acc3cc2b11c",
|
||||
"build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/52/4a/a7a5b56eda157fde6e58a90ab98a",
|
||||
"build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/cc/ec/d82c9ba9d587598f8183bc360326",
|
||||
"build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/8e/2a/f24b48e15ef4fd5794c5e426081b"
|
||||
}
|
||||
@ -291,9 +291,9 @@ class Achievement:
|
||||
name: Union[ba.Lstr, str]
|
||||
try:
|
||||
if self._level_name != '':
|
||||
from ba._campaign import get_campaign
|
||||
from ba._campaign import getcampaign
|
||||
campaignname, campaign_level = self._level_name.split(':')
|
||||
name = get_campaign(campaignname).get_level(
|
||||
name = getcampaign(campaignname).getlevel(
|
||||
campaign_level).displayname
|
||||
else:
|
||||
name = ''
|
||||
|
||||
@ -326,14 +326,9 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
returns False for the Actor. The ba.Actor.autoretain() method
|
||||
is a convenient way to access this same functionality.
|
||||
"""
|
||||
from ba import _actor as bsactor
|
||||
if not isinstance(actor, bsactor.Actor):
|
||||
raise TypeError('non-actor passed to retain_actor')
|
||||
|
||||
# Make sure our pruning is happening...
|
||||
assert (not self.has_transitioned_in()
|
||||
or _ba.time() - self._last_prune_dead_actors_time < 10.0)
|
||||
|
||||
if __debug__:
|
||||
from ba._actor import Actor
|
||||
assert isinstance(actor, Actor)
|
||||
self._actor_refs.append(actor)
|
||||
|
||||
def add_actor_weak_ref(self, actor: ba.Actor) -> None:
|
||||
@ -341,14 +336,9 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
|
||||
(called by the ba.Actor base class)
|
||||
"""
|
||||
from ba import _actor as bsactor
|
||||
if not isinstance(actor, bsactor.Actor):
|
||||
raise TypeError('non-actor passed to add_actor_weak_ref')
|
||||
|
||||
# Make sure our pruning is happening...
|
||||
assert (not self.has_transitioned_in()
|
||||
or _ba.time() - self._last_prune_dead_actors_time < 10.0)
|
||||
|
||||
if __debug__:
|
||||
from ba._actor import Actor
|
||||
assert isinstance(actor, Actor)
|
||||
self._actor_weak_refs.append(weakref.ref(actor))
|
||||
|
||||
@property
|
||||
@ -476,7 +466,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
try:
|
||||
self.on_transition_in()
|
||||
except Exception:
|
||||
print_exception(f'Error in on_transition_in for {self}')
|
||||
print_exception(f'Error in on_transition_in for {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.
|
||||
@ -490,7 +480,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
try:
|
||||
self.on_transition_out()
|
||||
except Exception:
|
||||
print_exception('Error in on_transition_out for', self)
|
||||
print_exception(f'Error in on_transition_out for {self}.')
|
||||
|
||||
def begin(self, session: ba.Session) -> None:
|
||||
"""Begin the activity.
|
||||
@ -586,7 +576,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
try:
|
||||
self.on_player_join(player)
|
||||
except Exception:
|
||||
print_exception('Error in on_player_join for', self)
|
||||
print_exception(f'Error in on_player_join for {self}.')
|
||||
|
||||
def remove_player(self, sessionplayer: ba.SessionPlayer) -> None:
|
||||
"""Remove a player from the Activity while it is running.
|
||||
@ -616,11 +606,11 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
try:
|
||||
self.on_player_leave(player)
|
||||
except Exception:
|
||||
print_exception(f'Error in on_player_leave for {self}')
|
||||
print_exception(f'Error in on_player_leave for {self}.')
|
||||
try:
|
||||
player.leave()
|
||||
except Exception:
|
||||
print_exception(f'Error on leave for {player} in {self}')
|
||||
print_exception(f'Error on leave for {player} in {self}.')
|
||||
|
||||
self._reset_session_player_for_no_activity(sessionplayer)
|
||||
|
||||
@ -645,7 +635,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
try:
|
||||
self.on_team_join(team)
|
||||
except Exception:
|
||||
print_exception(f'Error in on_team_join for {self}')
|
||||
print_exception(f'Error in on_team_join for {self}.')
|
||||
|
||||
def remove_team(self, sessionteam: ba.SessionTeam) -> None:
|
||||
"""Remove a team from a Running Activity
|
||||
@ -667,11 +657,11 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
try:
|
||||
self.on_team_leave(team)
|
||||
except Exception:
|
||||
print_exception(f'Error in on_team_leave for {self}')
|
||||
print_exception(f'Error in on_team_leave for {self}.')
|
||||
try:
|
||||
team.leave()
|
||||
except Exception:
|
||||
print_exception(f'Error on leave for {team} in {self}')
|
||||
print_exception(f'Error on leave for {team} in {self}.')
|
||||
|
||||
sessionteam.gameteam = None
|
||||
|
||||
@ -693,13 +683,13 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
except Exception:
|
||||
print_exception(
|
||||
f'Error resetting SessionPlayer node on {sessionplayer}'
|
||||
f' for {self}')
|
||||
f' for {self}.')
|
||||
try:
|
||||
sessionplayer.resetinput()
|
||||
except Exception:
|
||||
print_exception(
|
||||
f'Error resetting SessionPlayer input on {sessionplayer}'
|
||||
f' for {self}')
|
||||
f' for {self}.')
|
||||
|
||||
# These should never fail I think...
|
||||
sessionplayer.setactivity(None)
|
||||
@ -767,7 +757,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
_ba.quit()
|
||||
|
||||
except Exception:
|
||||
print_exception('exception on _check_activity_death:')
|
||||
print_exception('Error on _check_activity_death/')
|
||||
|
||||
def _expire(self) -> None:
|
||||
"""Put the activity in a state where it can be garbage-collected.
|
||||
@ -801,8 +791,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
try:
|
||||
self._activity_data.expire()
|
||||
except Exception:
|
||||
print_exception(
|
||||
'Error during ba.Activity._expire() destroying data:')
|
||||
print_exception(f'Error expiring _activity_data for {self}.')
|
||||
|
||||
def _expire_actors(self) -> None:
|
||||
# Expire all Actors.
|
||||
@ -843,7 +832,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
# until now whos underlying SessionPlayer left long ago...
|
||||
pass
|
||||
except Exception:
|
||||
print_exception(f'Error expiring {player}')
|
||||
print_exception(f'Error expiring {player}.')
|
||||
|
||||
def _expire_teams(self) -> None:
|
||||
|
||||
@ -873,7 +862,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
# player/team has left the game)
|
||||
pass
|
||||
except Exception:
|
||||
print_exception(f'Error expiring Team {team}')
|
||||
print_exception(f'Error expiring Team {team}.')
|
||||
|
||||
def _prune_delay_deletes(self) -> None:
|
||||
self._delay_delete_players.clear()
|
||||
|
||||
@ -103,21 +103,21 @@ class JoinActivity(Activity[EmptyPlayer, EmptyTeam]):
|
||||
|
||||
|
||||
class TransitionActivity(Activity[EmptyPlayer, EmptyTeam]):
|
||||
"""A simple overlay fade out/in.
|
||||
"""A simple overlay to fade out/in.
|
||||
|
||||
Useful as a bare minimum transition between two level based activities.
|
||||
"""
|
||||
|
||||
# Keep prev activity alive while we fade in.
|
||||
transition_time = 0.5
|
||||
inherits_slow_motion = True # Don't change.
|
||||
inherits_tint = True # Don't change.
|
||||
inherits_vr_camera_offset = True # Don't change.
|
||||
inherits_vr_overlay_center = True
|
||||
use_fixed_vr_overlay = True
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
super().__init__(settings)
|
||||
|
||||
# Keep prev activity alive while we fade in.
|
||||
self.transition_time = 0.5
|
||||
self.inherits_slow_motion = True # Don't change.
|
||||
self.inherits_tint = True # Don't change.
|
||||
self.inherits_vr_camera_offset = True # Don't change.
|
||||
self.inherits_vr_overlay_center = True
|
||||
self.use_fixed_vr_overlay = True
|
||||
self._background: Optional[ba.Actor] = None
|
||||
|
||||
def on_transition_in(self) -> None:
|
||||
@ -141,13 +141,15 @@ class ScoreScreenActivity(Activity[EmptyPlayer, EmptyTeam]):
|
||||
After a specified delay, player input is assigned to end the activity.
|
||||
"""
|
||||
|
||||
transition_time = 0.5
|
||||
inherits_tint = True
|
||||
inherits_vr_camera_offset = True
|
||||
use_fixed_vr_overlay = True
|
||||
|
||||
default_music: Optional[MusicType] = MusicType.SCORES
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
super().__init__(settings)
|
||||
self.transition_time = 0.5
|
||||
self.inherits_tint = True
|
||||
self.inherits_vr_camera_offset = True
|
||||
self.use_fixed_vr_overlay = True
|
||||
self.default_music: Optional[MusicType] = MusicType.SCORES
|
||||
self._birth_time = _ba.time()
|
||||
self._min_view_time = 5.0
|
||||
self._allow_server_transition = False
|
||||
@ -160,15 +162,14 @@ class ScoreScreenActivity(Activity[EmptyPlayer, EmptyTeam]):
|
||||
self._server_transitioning: Optional[bool] = None
|
||||
|
||||
def on_player_join(self, player: EmptyPlayer) -> None:
|
||||
from ba import _general
|
||||
from ba._general import WeakCall
|
||||
super().on_player_join(player)
|
||||
time_till_assign = max(
|
||||
0, self._birth_time + self._min_view_time - _ba.time())
|
||||
|
||||
# If we're still kicking at the end of our assign-delay, assign this
|
||||
# guy's input to trigger us.
|
||||
_ba.timer(time_till_assign, _general.WeakCall(self._safe_assign,
|
||||
player))
|
||||
_ba.timer(time_till_assign, WeakCall(self._safe_assign, player))
|
||||
|
||||
def on_transition_in(self) -> None:
|
||||
from bastd.actor.tipstext import TipsText
|
||||
@ -228,7 +229,7 @@ class ScoreScreenActivity(Activity[EmptyPlayer, EmptyTeam]):
|
||||
def _safe_assign(self, player: EmptyPlayer) -> None:
|
||||
|
||||
# Just to be extra careful, don't assign if we're transitioning out.
|
||||
# (though theoretically that would be ok).
|
||||
# (though theoretically that should be ok).
|
||||
if not self.is_transitioning_out() and player:
|
||||
player.assigninput((InputType.JUMP_PRESS, InputType.PUNCH_PRESS,
|
||||
InputType.BOMB_PRESS, InputType.PICK_UP_PRESS),
|
||||
|
||||
@ -50,7 +50,7 @@ def game_begin_analytics() -> None:
|
||||
assert campaign is not None
|
||||
_ba.set_analytics_screen(
|
||||
'Coop Game: ' + campaign.name + ' ' +
|
||||
campaign.get_level(_ba.app.coop_session_args['level']).name)
|
||||
campaign.getlevel(_ba.app.coop_session_args['level']).name)
|
||||
_ba.increment_analytics_count('Co-op round start')
|
||||
if len(activity.players) == 1:
|
||||
_ba.increment_analytics_count('Co-op round start 1 human player')
|
||||
|
||||
@ -724,26 +724,25 @@ class App:
|
||||
args: Dict = None) -> bool:
|
||||
"""High level way to launch a local co-op session."""
|
||||
# pylint: disable=cyclic-import
|
||||
from ba._campaign import get_campaign
|
||||
from ba._campaign import getcampaign
|
||||
from bastd.ui.coop.level import CoopLevelLockedWindow
|
||||
if args is None:
|
||||
args = {}
|
||||
if game == '':
|
||||
raise ValueError('empty game name')
|
||||
campaignname, levelname = game.split(':')
|
||||
campaign = get_campaign(campaignname)
|
||||
levels = campaign.get_levels()
|
||||
campaign = getcampaign(campaignname)
|
||||
|
||||
# If this campaign is sequential, make sure we've completed the
|
||||
# one before this.
|
||||
if campaign.sequential and not force:
|
||||
for level in levels:
|
||||
for level in campaign.levels:
|
||||
if level.name == levelname:
|
||||
break
|
||||
if not level.complete:
|
||||
CoopLevelLockedWindow(
|
||||
campaign.get_level(levelname).displayname,
|
||||
campaign.get_level(level.name).displayname)
|
||||
campaign.getlevel(levelname).displayname,
|
||||
campaign.getlevel(level.name).displayname)
|
||||
return False
|
||||
|
||||
# Ok, we're good to go.
|
||||
|
||||
@ -35,7 +35,7 @@ def register_campaign(campaign: ba.Campaign) -> None:
|
||||
_ba.app.campaigns[campaign.name] = campaign
|
||||
|
||||
|
||||
def get_campaign(name: str) -> ba.Campaign:
|
||||
def getcampaign(name: str) -> ba.Campaign:
|
||||
"""Return a campaign by name."""
|
||||
return _ba.app.campaigns[name]
|
||||
|
||||
@ -61,18 +61,19 @@ class Campaign:
|
||||
"""Whether this Campaign's levels must be played in sequence."""
|
||||
return self._sequential
|
||||
|
||||
def add_level(self, level: ba.Level) -> None:
|
||||
def addlevel(self, level: ba.Level) -> None:
|
||||
"""Adds a ba.Level to the Campaign."""
|
||||
if level.get_campaign() is not None:
|
||||
raise RuntimeError('level already belongs to a campaign')
|
||||
if level.campaign is not None:
|
||||
raise RuntimeError('Level already belongs to a campaign.')
|
||||
level.set_campaign(self, len(self._levels))
|
||||
self._levels.append(level)
|
||||
|
||||
def get_levels(self) -> List[ba.Level]:
|
||||
"""Return the set of ba.Levels in the Campaign."""
|
||||
@property
|
||||
def levels(self) -> List[ba.Level]:
|
||||
"""The list of ba.Levels in the Campaign."""
|
||||
return self._levels
|
||||
|
||||
def get_level(self, name: str) -> ba.Level:
|
||||
def getlevel(self, name: str) -> ba.Level:
|
||||
"""Return a contained ba.Level by name."""
|
||||
from ba import _error
|
||||
for level in self._levels:
|
||||
@ -89,14 +90,15 @@ class Campaign:
|
||||
# FIXME should these give/take ba.Level instances instead of level names?..
|
||||
def set_selected_level(self, levelname: str) -> None:
|
||||
"""Set the Level currently selected in the UI (by name)."""
|
||||
self.get_config_dict()['Selection'] = levelname
|
||||
self.configdict['Selection'] = levelname
|
||||
_ba.app.config.commit()
|
||||
|
||||
def get_selected_level(self) -> str:
|
||||
"""Return the name of the Level currently selected in the UI."""
|
||||
return self.get_config_dict().get('Selection', self._levels[0].name)
|
||||
return self.configdict.get('Selection', self._levels[0].name)
|
||||
|
||||
def get_config_dict(self) -> Dict[str, Any]:
|
||||
@property
|
||||
def configdict(self) -> Dict[str, Any]:
|
||||
"""Return the live config dict for this campaign."""
|
||||
val: Dict[str, Any] = (_ba.app.config.setdefault('Campaigns',
|
||||
{}).setdefault(
|
||||
@ -123,47 +125,47 @@ def init_campaigns() -> None:
|
||||
# FIXME: Once translations catch up, we can convert these to use the
|
||||
# generic display-name '${GAME} Training' type stuff.
|
||||
campaign = Campaign('Easy')
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Onslaught Training',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'training_easy'},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Rookie Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'rookie_easy'},
|
||||
preview_texture_name='courtyardPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Rookie Football',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'rookie_easy'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'pro_easy'},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Football',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'pro_easy'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Runaround',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'pro_easy'},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Uber Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'uber_easy'},
|
||||
preview_texture_name='courtyardPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Uber Football',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'uber_easy'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Uber Runaround',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'uber_easy'},
|
||||
@ -172,52 +174,52 @@ def init_campaigns() -> None:
|
||||
|
||||
# "hard" mode
|
||||
campaign = Campaign('Default')
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Onslaught Training',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'training'},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Rookie Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'rookie'},
|
||||
preview_texture_name='courtyardPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Rookie Football',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'rookie'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'pro'},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Football',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'pro'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Runaround',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'pro'},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Uber Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'uber'},
|
||||
preview_texture_name='courtyardPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Uber Football',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'uber'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Uber Runaround',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'uber'},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('The Last Stand',
|
||||
gametype=TheLastStandGame,
|
||||
settings={},
|
||||
@ -226,17 +228,17 @@ def init_campaigns() -> None:
|
||||
|
||||
# challenges: our 'official' random extra co-op levels
|
||||
campaign = Campaign('Challenges', sequential=False)
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Infinite Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'endless'},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Infinite Runaround',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'endless'},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Race',
|
||||
displayname='${GAME}',
|
||||
gametype=RaceGame,
|
||||
@ -246,7 +248,7 @@ def init_campaigns() -> None:
|
||||
'Bomb Spawning': 0
|
||||
},
|
||||
preview_texture_name='bigGPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Race',
|
||||
displayname='Pro ${GAME}',
|
||||
gametype=RaceGame,
|
||||
@ -256,7 +258,7 @@ def init_campaigns() -> None:
|
||||
'Bomb Spawning': 1000
|
||||
},
|
||||
preview_texture_name='bigGPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Lake Frigid Race',
|
||||
displayname='${GAME}',
|
||||
gametype=RaceGame,
|
||||
@ -267,55 +269,55 @@ def init_campaigns() -> None:
|
||||
'Bomb Spawning': 0
|
||||
},
|
||||
preview_texture_name='lakeFrigidPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Football',
|
||||
displayname='${GAME}',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'tournament'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Football',
|
||||
displayname='Pro ${GAME}',
|
||||
gametype=FootballCoopGame,
|
||||
settings={'preset': 'tournament_pro'},
|
||||
preview_texture_name='footballStadiumPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Runaround',
|
||||
displayname='${GAME}',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'tournament'},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Uber Runaround',
|
||||
displayname='Uber ${GAME}',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'tournament_uber'},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('The Last Stand',
|
||||
displayname='${GAME}',
|
||||
gametype=TheLastStandGame,
|
||||
settings={'preset': 'tournament'},
|
||||
preview_texture_name='rampagePreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Tournament Infinite Onslaught',
|
||||
displayname='Infinite Onslaught',
|
||||
gametype=OnslaughtGame,
|
||||
settings={'preset': 'endless_tournament'},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Tournament Infinite Runaround',
|
||||
displayname='Infinite Runaround',
|
||||
gametype=RunaroundGame,
|
||||
settings={'preset': 'endless_tournament'},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Target Practice',
|
||||
displayname='Pro ${GAME}',
|
||||
gametype=TargetPracticeGame,
|
||||
settings={},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Target Practice B',
|
||||
displayname='${GAME}',
|
||||
gametype=TargetPracticeGame,
|
||||
@ -325,38 +327,38 @@ def init_campaigns() -> None:
|
||||
'Enable Triple Bombs': False
|
||||
},
|
||||
preview_texture_name='doomShroomPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Meteor Shower',
|
||||
displayname='${GAME}',
|
||||
gametype=MeteorShowerGame,
|
||||
settings={},
|
||||
preview_texture_name='rampagePreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Epic Meteor Shower',
|
||||
displayname='${GAME}',
|
||||
gametype=MeteorShowerGame,
|
||||
settings={'Epic Mode': True},
|
||||
preview_texture_name='rampagePreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Easter Egg Hunt',
|
||||
displayname='${GAME}',
|
||||
gametype=EasterEggHuntGame,
|
||||
settings={},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level('Pro Easter Egg Hunt',
|
||||
displayname='Pro ${GAME}',
|
||||
gametype=EasterEggHuntGame,
|
||||
settings={'Pro Mode': True},
|
||||
preview_texture_name='towerDPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level(
|
||||
name='Ninja Fight', # (unique id not seen by player)
|
||||
displayname='${GAME}', # (readable name seen by player)
|
||||
gametype=NinjaFightGame,
|
||||
settings={'preset': 'regular'},
|
||||
preview_texture_name='courtyardPreview'))
|
||||
campaign.add_level(
|
||||
campaign.addlevel(
|
||||
_level.Level(name='Pro Ninja Fight',
|
||||
displayname='Pro ${GAME}',
|
||||
gametype=NinjaFightGame,
|
||||
|
||||
@ -74,7 +74,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
|
||||
levelname = self._get_coop_level_name()
|
||||
campaign = self.session.campaign
|
||||
assert campaign is not None
|
||||
config_str = (str(len(self.players)) + 'p' + campaign.get_level(
|
||||
config_str = (str(len(self.players)) + 'p' + campaign.getlevel(
|
||||
self.settings_raw['name']).get_score_version_string().replace(
|
||||
' ', '_'))
|
||||
_ba.get_scores_to_beat(levelname, config_str,
|
||||
|
||||
@ -60,7 +60,7 @@ class CoopSession(Session):
|
||||
def __init__(self) -> None:
|
||||
"""Instantiate a co-op mode session."""
|
||||
# pylint: disable=cyclic-import
|
||||
from ba._campaign import get_campaign
|
||||
from ba._campaign import getcampaign
|
||||
from bastd.activity.coopjoin import CoopJoinActivity
|
||||
|
||||
_ba.increment_analytics_count('Co-op session start')
|
||||
@ -90,7 +90,7 @@ class CoopSession(Session):
|
||||
self.tournament_id: Optional[str] = (
|
||||
app.coop_session_args.get('tournament_id'))
|
||||
|
||||
self.campaign = get_campaign(app.coop_session_args['campaign'])
|
||||
self.campaign = getcampaign(app.coop_session_args['campaign'])
|
||||
self.campaign_level_name: str = app.coop_session_args['level']
|
||||
|
||||
self._ran_tutorial_activity = False
|
||||
@ -116,7 +116,7 @@ class CoopSession(Session):
|
||||
|
||||
# Build an instance for the current level.
|
||||
assert self.campaign is not None
|
||||
level = self.campaign.get_level(self.campaign_level_name)
|
||||
level = self.campaign.getlevel(self.campaign_level_name)
|
||||
gametype = level.gametype
|
||||
settings = level.get_settings()
|
||||
|
||||
@ -131,8 +131,8 @@ class CoopSession(Session):
|
||||
self._current_game_instance: GameActivity = newactivity
|
||||
|
||||
# Find the next level and build an instance for it too.
|
||||
levels = self.campaign.get_levels()
|
||||
level = self.campaign.get_level(self.campaign_level_name)
|
||||
levels = self.campaign.levels
|
||||
level = self.campaign.getlevel(self.campaign_level_name)
|
||||
|
||||
nextlevel: Optional[ba.Level]
|
||||
if level.index < len(levels) - 1:
|
||||
|
||||
@ -290,7 +290,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
if isinstance(self.session, CoopSession):
|
||||
campaign = self.session.campaign
|
||||
assert campaign is not None
|
||||
return campaign.get_level(
|
||||
return campaign.getlevel(
|
||||
self.session.campaign_level_name).displayname
|
||||
except Exception:
|
||||
print_error('error getting campaign level name')
|
||||
|
||||
@ -45,7 +45,6 @@ class Level:
|
||||
settings: dict,
|
||||
preview_texture_name: str,
|
||||
displayname: str = None):
|
||||
"""Initializes a Level object with the provided values."""
|
||||
self._name = name
|
||||
self._gametype = gametype
|
||||
self._settings = settings
|
||||
@ -93,8 +92,9 @@ class Level:
|
||||
"""The type of game used for this Level."""
|
||||
return self._gametype
|
||||
|
||||
def get_campaign(self) -> Optional[ba.Campaign]:
|
||||
"""Return the ba.Campaign this Level is associated with, or None."""
|
||||
@property
|
||||
def campaign(self) -> Optional[ba.Campaign]:
|
||||
"""The ba.Campaign this Level is associated with, or None."""
|
||||
return None if self._campaign is None else self._campaign()
|
||||
|
||||
@property
|
||||
@ -123,7 +123,7 @@ class Level:
|
||||
config = self._get_config_dict()
|
||||
config['Complete'] = val
|
||||
|
||||
def get_high_scores(self) -> Dict:
|
||||
def get_high_scores(self) -> dict:
|
||||
"""Return the current high scores for this Level."""
|
||||
config = self._get_config_dict()
|
||||
high_scores_key = 'High Scores' + self.get_score_version_string()
|
||||
@ -167,15 +167,14 @@ class Level:
|
||||
|
||||
The referenced dict exists under the game's config dict and
|
||||
can be modified in place."""
|
||||
campaign = self.get_campaign()
|
||||
campaign = self.campaign
|
||||
if campaign is None:
|
||||
raise TypeError('level is not in a campaign')
|
||||
campaign_config = campaign.get_config_dict()
|
||||
val: Dict[str,
|
||||
Any] = campaign_config.setdefault(self._name, {
|
||||
'Rating': 0.0,
|
||||
'Complete': False
|
||||
})
|
||||
raise RuntimeError('Level is not in a campaign.')
|
||||
configdict = campaign.configdict
|
||||
val: Dict[str, Any] = configdict.setdefault(self._name, {
|
||||
'Rating': 0.0,
|
||||
'Complete': False
|
||||
})
|
||||
assert isinstance(val, dict)
|
||||
return val
|
||||
|
||||
|
||||
@ -48,7 +48,7 @@ from ba._apputils import (is_browser_likely_available, get_remote_app_name,
|
||||
should_submit_debug_info, show_ad, show_ad_2)
|
||||
from ba._benchmark import (run_gpu_benchmark, run_cpu_benchmark,
|
||||
run_media_reload_benchmark, run_stress_test)
|
||||
from ba._campaign import get_campaign
|
||||
from ba._campaign import getcampaign
|
||||
from ba._messages import PlayerProfilesChangedMessage
|
||||
from ba._meta import get_game_types
|
||||
from ba._modutils import show_user_scripts
|
||||
|
||||
@ -47,7 +47,7 @@ class CoopJoinActivity(JoinActivity):
|
||||
assert session.campaign is not None
|
||||
level_name_full = (session.campaign.name + ':' +
|
||||
session.campaign_level_name)
|
||||
config_str = ('1p' + session.campaign.get_level(
|
||||
config_str = ('1p' + session.campaign.getlevel(
|
||||
session.campaign_level_name).get_score_version_string().replace(
|
||||
' ', '_'))
|
||||
_ba.get_scores_to_beat(level_name_full, config_str,
|
||||
@ -59,7 +59,7 @@ class CoopJoinActivity(JoinActivity):
|
||||
super().on_transition_in()
|
||||
assert isinstance(self.session, ba.CoopSession)
|
||||
assert self.session.campaign
|
||||
Text(self.session.campaign.get_level(
|
||||
Text(self.session.campaign.getlevel(
|
||||
self.session.campaign_level_name).displayname,
|
||||
scale=1.3,
|
||||
h_attach=Text.HAttach.CENTER,
|
||||
|
||||
@ -174,7 +174,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
|
||||
self._game_name_str = self._campaign.name + ':' + self._level_name
|
||||
self._game_config_str = str(len(
|
||||
self._playerinfos)) + 'p' + self._campaign.get_level(
|
||||
self._playerinfos)) + 'p' + self._campaign.getlevel(
|
||||
self._level_name).get_score_version_string().replace(' ', '_')
|
||||
|
||||
# If game-center/etc scores are available we show our friends'
|
||||
@ -183,7 +183,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
self._game_name_str, self._game_config_str)
|
||||
|
||||
try:
|
||||
self._old_best_rank = self._campaign.get_level(
|
||||
self._old_best_rank = self._campaign.getlevel(
|
||||
self._level_name).rating
|
||||
except Exception:
|
||||
self._old_best_rank = 0.0
|
||||
@ -522,8 +522,8 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
self._begin_time = ba.time()
|
||||
|
||||
# Calc whether the level is complete and other stuff.
|
||||
levels = self._campaign.get_levels()
|
||||
level = self._campaign.get_level(self._level_name)
|
||||
levels = self._campaign.levels
|
||||
level = self._campaign.getlevel(self._level_name)
|
||||
self._was_complete = level.complete
|
||||
self._is_complete = (self._was_complete or self._victory)
|
||||
self._newly_complete = (self._is_complete and not self._was_complete)
|
||||
@ -591,7 +591,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
pstr = ba.Lstr(value='- ${A} -',
|
||||
subs=[('${A}',
|
||||
ba.Lstr(resource='singlePlayerCountText'))])
|
||||
ZoomText(self._campaign.get_level(self._level_name).displayname,
|
||||
ZoomText(self._campaign.getlevel(self._level_name).displayname,
|
||||
maxwidth=800,
|
||||
flash=False,
|
||||
trail=False,
|
||||
@ -659,7 +659,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
ba.timer(0.4, ba.WeakCall(self._play_drumroll))
|
||||
|
||||
# Add us to high scores, filter, and store.
|
||||
our_high_scores_all = self._campaign.get_level(
|
||||
our_high_scores_all = self._campaign.getlevel(
|
||||
self._level_name).get_high_scores()
|
||||
try:
|
||||
our_high_scores = our_high_scores_all[str(len(self._playerinfos)) +
|
||||
@ -691,7 +691,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
del our_high_scores[10:]
|
||||
|
||||
if self._score is not None:
|
||||
sver = (self._campaign.get_level(
|
||||
sver = (self._campaign.getlevel(
|
||||
self._level_name).get_score_version_string())
|
||||
_ba.add_transaction({
|
||||
'type': 'SET_LEVEL_LOCAL_HIGH_SCORES',
|
||||
@ -1391,7 +1391,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
dostar(2, 10 - 30, -112, '7.5')
|
||||
dostar(3, 77 - 30, -112, '9.5')
|
||||
try:
|
||||
best_rank = self._campaign.get_level(self._level_name).rating
|
||||
best_rank = self._campaign.getlevel(self._level_name).rating
|
||||
except Exception:
|
||||
best_rank = 0.0
|
||||
|
||||
|
||||
@ -34,18 +34,16 @@ if TYPE_CHECKING:
|
||||
class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
"""Final score screen for a team series."""
|
||||
|
||||
# Dont' play music by default; (we do manually after a delay).
|
||||
default_music = None
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
super().__init__(settings=settings)
|
||||
self._min_view_time = 15.0
|
||||
self._is_ffa = isinstance(self.session, ba.FreeForAllSession)
|
||||
self._allow_server_transition = True
|
||||
self._tips_text = None
|
||||
|
||||
def on_transition_in(self) -> None:
|
||||
# We don't yet want music and whatnot...
|
||||
self.default_music = None
|
||||
self._default_show_tips = False
|
||||
super().on_transition_in()
|
||||
|
||||
def on_begin(self) -> None:
|
||||
# pylint: disable=too-many-branches
|
||||
|
||||
@ -56,6 +56,7 @@ class NinjaFightGame(ba.TeamGameActivity[Player, Team]):
|
||||
scoreconfig = ba.ScoreConfig(label='Time',
|
||||
scoretype=ba.ScoreType.MILLISECONDS,
|
||||
lower_is_better=True)
|
||||
default_music = ba.MusicType.TO_THE_DEATH
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
@ -79,12 +80,6 @@ class NinjaFightGame(ba.TeamGameActivity[Player, Team]):
|
||||
self._bots = SpazBotSet()
|
||||
self._preset = str(settings['preset'])
|
||||
|
||||
# Called when our game is transitioning in but not ready to begin;
|
||||
# we can go ahead and start creating stuff, playing music, etc.
|
||||
def on_transition_in(self) -> None:
|
||||
self.default_music = ba.MusicType.TO_THE_DEATH
|
||||
super().on_transition_in()
|
||||
|
||||
# Called when our game actually begins.
|
||||
def on_begin(self) -> None:
|
||||
super().on_begin()
|
||||
|
||||
@ -968,13 +968,13 @@ class AccountSettingsWindow(ba.Window):
|
||||
('${A}', accounts_str)]))
|
||||
|
||||
def _refresh_campaign_progress_text(self) -> None:
|
||||
from ba.internal import get_campaign
|
||||
from ba.internal import getcampaign
|
||||
if self._campaign_progress_text is None:
|
||||
return
|
||||
p_str: Union[str, ba.Lstr]
|
||||
try:
|
||||
campaign = get_campaign('Default')
|
||||
levels = campaign.get_levels()
|
||||
campaign = getcampaign('Default')
|
||||
levels = campaign.levels
|
||||
levels_complete = sum((1 if l.complete else 0) for l in levels)
|
||||
|
||||
# Last level cant be completed; hence the -1;
|
||||
@ -1071,14 +1071,14 @@ class AccountSettingsWindow(ba.Window):
|
||||
|
||||
def _reset_progress(self) -> None:
|
||||
try:
|
||||
from ba.internal import get_campaign
|
||||
from ba.internal import getcampaign
|
||||
# FIXME: This would need to happen server-side these days.
|
||||
if self._can_reset_achievements:
|
||||
ba.app.config['Achievements'] = {}
|
||||
_ba.reset_achievements()
|
||||
campaign = get_campaign('Default')
|
||||
campaign = getcampaign('Default')
|
||||
campaign.reset() # also writes the config..
|
||||
campaign = get_campaign('Challenges')
|
||||
campaign = getcampaign('Challenges')
|
||||
campaign.reset() # also writes the config..
|
||||
except Exception:
|
||||
ba.print_exception('exception resetting co-op campaign progress')
|
||||
|
||||
@ -343,7 +343,7 @@ class CoopBrowserWindow(ba.Window):
|
||||
# pylint: disable=too-many-statements
|
||||
# pylint: disable=too-many-locals
|
||||
# pylint: disable=too-many-branches
|
||||
from ba.internal import get_campaign, get_tournament_prize_strings
|
||||
from ba.internal import getcampaign, get_tournament_prize_strings
|
||||
|
||||
# If the number of tournaments or challenges in the data differs from
|
||||
# our current arrangement, refresh with the new number.
|
||||
@ -466,20 +466,20 @@ class CoopBrowserWindow(ba.Window):
|
||||
opacity=0.2)
|
||||
else:
|
||||
campaignname, levelname = game.split(':')
|
||||
campaign = get_campaign(campaignname)
|
||||
campaign = getcampaign(campaignname)
|
||||
max_players = ba.app.tournament_info[
|
||||
tbtn['tournament_id']]['maxPlayers']
|
||||
txt = ba.Lstr(
|
||||
value='${A} ${B}',
|
||||
subs=[('${A}', campaign.get_level(levelname).displayname),
|
||||
subs=[('${A}', campaign.getlevel(levelname).displayname),
|
||||
('${B}',
|
||||
ba.Lstr(resource='playerCountAbbreviatedText',
|
||||
subs=[('${COUNT}', str(max_players))]))])
|
||||
ba.textwidget(edit=tbtn['button_text'], text=txt)
|
||||
ba.imagewidget(edit=tbtn['image'],
|
||||
texture=campaign.get_level(
|
||||
levelname).get_preview_texture(),
|
||||
opacity=1.0 if enabled else 0.5)
|
||||
ba.imagewidget(
|
||||
edit=tbtn['image'],
|
||||
texture=campaign.getlevel(levelname).get_preview_texture(),
|
||||
opacity=1.0 if enabled else 0.5)
|
||||
|
||||
fee = entry['fee']
|
||||
|
||||
@ -615,7 +615,7 @@ class CoopBrowserWindow(ba.Window):
|
||||
def _refresh_campaign_row(self) -> None:
|
||||
# pylint: disable=too-many-locals
|
||||
# pylint: disable=cyclic-import
|
||||
from ba.internal import get_campaign
|
||||
from ba.internal import getcampaign
|
||||
from bastd.ui.coop.gamebutton import GameButton
|
||||
parent_widget = self._campaign_sub_container
|
||||
|
||||
@ -716,8 +716,8 @@ class CoopBrowserWindow(ba.Window):
|
||||
down_widget=next_widget_down)
|
||||
|
||||
# Update our existing percent-complete text.
|
||||
campaign = get_campaign(campaignname)
|
||||
levels = campaign.get_levels()
|
||||
campaign = getcampaign(campaignname)
|
||||
levels = campaign.levels
|
||||
levels_complete = sum((1 if l.complete else 0) for l in levels)
|
||||
|
||||
# Last level cant be completed; hence the -1.
|
||||
@ -936,7 +936,7 @@ class CoopBrowserWindow(ba.Window):
|
||||
# add all custom user levels here..
|
||||
# items += [
|
||||
# 'User:' + l.getname()
|
||||
# for l in get_campaign('User').get_levels()
|
||||
# for l in getcampaign('User').getlevels()
|
||||
# ]
|
||||
|
||||
self._custom_h_scroll = custom_h_scroll = h_scroll = ba.hscrollwidget(
|
||||
|
||||
@ -40,7 +40,7 @@ class GameButton:
|
||||
x: float, y: float, select: bool, row: str):
|
||||
# pylint: disable=too-many-statements
|
||||
# pylint: disable=too-many-locals
|
||||
from ba.internal import (get_achievements_for_coop_level, get_campaign)
|
||||
from ba.internal import (get_achievements_for_coop_level, getcampaign)
|
||||
self._game = game
|
||||
sclx = 195.0
|
||||
scly = 195.0
|
||||
@ -54,8 +54,8 @@ class GameButton:
|
||||
campaignname = 'Default'
|
||||
|
||||
rating: Optional[float]
|
||||
campaign = get_campaign(campaignname)
|
||||
rating = campaign.get_level(levelname).rating
|
||||
campaign = getcampaign(campaignname)
|
||||
rating = campaign.getlevel(levelname).rating
|
||||
|
||||
if game == 'Easy:The Last Stand':
|
||||
rating = None
|
||||
@ -95,10 +95,10 @@ class GameButton:
|
||||
size=(image_width, image_width * 0.5),
|
||||
model_transparent=window.lsbt,
|
||||
model_opaque=window.lsbo,
|
||||
texture=campaign.get_level(levelname).get_preview_texture(),
|
||||
texture=campaign.getlevel(levelname).get_preview_texture(),
|
||||
mask_texture=ba.gettexture('mapPreviewMask'))
|
||||
|
||||
translated = campaign.get_level(levelname).displayname
|
||||
translated = campaign.getlevel(levelname).displayname
|
||||
self._achievements = (get_achievements_for_coop_level(game))
|
||||
|
||||
self._name_widget = ba.textwidget(parent=parent,
|
||||
@ -182,7 +182,7 @@ class GameButton:
|
||||
|
||||
def _update(self) -> None:
|
||||
# pylint: disable=too-many-boolean-expressions
|
||||
from ba.internal import have_pro, get_campaign
|
||||
from ba.internal import have_pro, getcampaign
|
||||
game = self._game
|
||||
campaignname, levelname = game.split(':')
|
||||
|
||||
@ -192,15 +192,13 @@ class GameButton:
|
||||
if game == 'Easy:The Last Stand':
|
||||
campaignname = 'Default'
|
||||
|
||||
campaign = get_campaign(campaignname)
|
||||
|
||||
levels = campaign.get_levels()
|
||||
campaign = getcampaign(campaignname)
|
||||
|
||||
# If this campaign is sequential, make sure we've unlocked
|
||||
# everything up to here.
|
||||
unlocked = True
|
||||
if campaign.sequential:
|
||||
for level in levels:
|
||||
for level in campaign.levels:
|
||||
if level.name == levelname:
|
||||
break
|
||||
if not level.complete:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
|
||||
<h4><em>last updated on 2020-06-03 for Ballistica version 1.5.0 build 20044</em></h4>
|
||||
<h4><em>last updated on 2020-06-03 for Ballistica version 1.5.0 build 20045</em></h4>
|
||||
<p>This page documents the Python classes and functions in the 'ba' module,
|
||||
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p>
|
||||
<hr>
|
||||
@ -1236,8 +1236,18 @@ mycall()</pre>
|
||||
</p>
|
||||
|
||||
<h3>Attributes:</h3>
|
||||
<h5><a href="#attr_ba_Campaign__name">name</a>, <a href="#attr_ba_Campaign__sequential">sequential</a></h5>
|
||||
<h5><a href="#attr_ba_Campaign__configdict">configdict</a>, <a href="#attr_ba_Campaign__levels">levels</a>, <a href="#attr_ba_Campaign__name">name</a>, <a href="#attr_ba_Campaign__sequential">sequential</a></h5>
|
||||
<dl>
|
||||
<dt><h4><a name="attr_ba_Campaign__configdict">configdict</a></h4></dt><dd>
|
||||
<p><span>Dict[str, Any]</span></p>
|
||||
<p>Return the live config dict for this campaign.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="attr_ba_Campaign__levels">levels</a></h4></dt><dd>
|
||||
<p><span>List[<a href="#class_ba_Level">ba.Level</a>]</span></p>
|
||||
<p>The list of <a href="#class_ba_Level">ba.Levels</a> in the Campaign.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="attr_ba_Campaign__name">name</a></h4></dt><dd>
|
||||
<p><span>str</span></p>
|
||||
<p>The name of the Campaign.</p>
|
||||
@ -1250,41 +1260,29 @@ mycall()</pre>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Methods:</h3>
|
||||
<h5><a href="#method_ba_Campaign____init__"><constructor></a>, <a href="#method_ba_Campaign__add_level">add_level()</a>, <a href="#method_ba_Campaign__get_config_dict">get_config_dict()</a>, <a href="#method_ba_Campaign__get_level">get_level()</a>, <a href="#method_ba_Campaign__get_levels">get_levels()</a>, <a href="#method_ba_Campaign__get_selected_level">get_selected_level()</a>, <a href="#method_ba_Campaign__reset">reset()</a>, <a href="#method_ba_Campaign__set_selected_level">set_selected_level()</a></h5>
|
||||
<h5><a href="#method_ba_Campaign____init__"><constructor></a>, <a href="#method_ba_Campaign__addlevel">addlevel()</a>, <a href="#method_ba_Campaign__get_selected_level">get_selected_level()</a>, <a href="#method_ba_Campaign__getlevel">getlevel()</a>, <a href="#method_ba_Campaign__reset">reset()</a>, <a href="#method_ba_Campaign__set_selected_level">set_selected_level()</a></h5>
|
||||
<dl>
|
||||
<dt><h4><a name="method_ba_Campaign____init__"><constructor></a></dt></h4><dd>
|
||||
<p><span>ba.Campaign(name: str, sequential: bool = True)</span></p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Campaign__add_level">add_level()</a></dt></h4><dd>
|
||||
<p><span>add_level(self, level: <a href="#class_ba_Level">ba.Level</a>) -> None</span></p>
|
||||
<dt><h4><a name="method_ba_Campaign__addlevel">addlevel()</a></dt></h4><dd>
|
||||
<p><span>addlevel(self, level: <a href="#class_ba_Level">ba.Level</a>) -> None</span></p>
|
||||
|
||||
<p>Adds a <a href="#class_ba_Level">ba.Level</a> to the Campaign.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Campaign__get_config_dict">get_config_dict()</a></dt></h4><dd>
|
||||
<p><span>get_config_dict(self) -> Dict[str, Any]</span></p>
|
||||
|
||||
<p>Return the live config dict for this campaign.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Campaign__get_level">get_level()</a></dt></h4><dd>
|
||||
<p><span>get_level(self, name: str) -> <a href="#class_ba_Level">ba.Level</a></span></p>
|
||||
|
||||
<p>Return a contained <a href="#class_ba_Level">ba.Level</a> by name.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Campaign__get_levels">get_levels()</a></dt></h4><dd>
|
||||
<p><span>get_levels(self) -> List[<a href="#class_ba_Level">ba.Level</a>]</span></p>
|
||||
|
||||
<p>Return the set of <a href="#class_ba_Level">ba.Levels</a> in the Campaign.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Campaign__get_selected_level">get_selected_level()</a></dt></h4><dd>
|
||||
<p><span>get_selected_level(self) -> str</span></p>
|
||||
|
||||
<p>Return the name of the Level currently selected in the UI.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Campaign__getlevel">getlevel()</a></dt></h4><dd>
|
||||
<p><span>getlevel(self, name: str) -> <a href="#class_ba_Level">ba.Level</a></span></p>
|
||||
|
||||
<p>Return a contained <a href="#class_ba_Level">ba.Level</a> by name.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Campaign__reset">reset()</a></dt></h4><dd>
|
||||
<p><span>reset(self) -> None</span></p>
|
||||
@ -3051,8 +3049,13 @@ prefs, etc.</p>
|
||||
</p>
|
||||
|
||||
<h3>Attributes:</h3>
|
||||
<h5><a href="#attr_ba_Level__complete">complete</a>, <a href="#attr_ba_Level__displayname">displayname</a>, <a href="#attr_ba_Level__gametype">gametype</a>, <a href="#attr_ba_Level__index">index</a>, <a href="#attr_ba_Level__name">name</a>, <a href="#attr_ba_Level__preview_texture_name">preview_texture_name</a>, <a href="#attr_ba_Level__rating">rating</a></h5>
|
||||
<h5><a href="#attr_ba_Level__campaign">campaign</a>, <a href="#attr_ba_Level__complete">complete</a>, <a href="#attr_ba_Level__displayname">displayname</a>, <a href="#attr_ba_Level__gametype">gametype</a>, <a href="#attr_ba_Level__index">index</a>, <a href="#attr_ba_Level__name">name</a>, <a href="#attr_ba_Level__preview_texture_name">preview_texture_name</a>, <a href="#attr_ba_Level__rating">rating</a></h5>
|
||||
<dl>
|
||||
<dt><h4><a name="attr_ba_Level__campaign">campaign</a></h4></dt><dd>
|
||||
<p><span>Optional[<a href="#class_ba_Campaign">ba.Campaign</a>]</span></p>
|
||||
<p>The <a href="#class_ba_Campaign">ba.Campaign</a> this Level is associated with, or None.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="attr_ba_Level__complete">complete</a></h4></dt><dd>
|
||||
<p><span>bool</span></p>
|
||||
<p>Whether this Level has been completed.</p>
|
||||
@ -3093,22 +3096,14 @@ prefs, etc.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Methods:</h3>
|
||||
<h5><a href="#method_ba_Level____init__"><constructor></a>, <a href="#method_ba_Level__get_campaign">get_campaign()</a>, <a href="#method_ba_Level__get_high_scores">get_high_scores()</a>, <a href="#method_ba_Level__get_preview_texture">get_preview_texture()</a>, <a href="#method_ba_Level__get_score_version_string">get_score_version_string()</a>, <a href="#method_ba_Level__get_settings">get_settings()</a>, <a href="#method_ba_Level__set_complete">set_complete()</a>, <a href="#method_ba_Level__set_high_scores">set_high_scores()</a>, <a href="#method_ba_Level__set_rating">set_rating()</a></h5>
|
||||
<h5><a href="#method_ba_Level____init__"><constructor></a>, <a href="#method_ba_Level__get_high_scores">get_high_scores()</a>, <a href="#method_ba_Level__get_preview_texture">get_preview_texture()</a>, <a href="#method_ba_Level__get_score_version_string">get_score_version_string()</a>, <a href="#method_ba_Level__get_settings">get_settings()</a>, <a href="#method_ba_Level__set_complete">set_complete()</a>, <a href="#method_ba_Level__set_high_scores">set_high_scores()</a>, <a href="#method_ba_Level__set_rating">set_rating()</a></h5>
|
||||
<dl>
|
||||
<dt><h4><a name="method_ba_Level____init__"><constructor></a></dt></h4><dd>
|
||||
<p><span>ba.Level(name: str, gametype: Type[<a href="#class_ba_GameActivity">ba.GameActivity</a>], settings: dict, preview_texture_name: str, displayname: str = None)</span></p>
|
||||
|
||||
<p>Initializes a Level object with the provided values.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Level__get_campaign">get_campaign()</a></dt></h4><dd>
|
||||
<p><span>get_campaign(self) -> Optional[<a href="#class_ba_Campaign">ba.Campaign</a>]</span></p>
|
||||
|
||||
<p>Return the <a href="#class_ba_Campaign">ba.Campaign</a> this Level is associated with, or None.</p>
|
||||
|
||||
</dd>
|
||||
<dt><h4><a name="method_ba_Level__get_high_scores">get_high_scores()</a></dt></h4><dd>
|
||||
<p><span>get_high_scores(self) -> Dict</span></p>
|
||||
<p><span>get_high_scores(self) -> dict</span></p>
|
||||
|
||||
<p>Return the current high scores for this Level.</p>
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ class PipRequirement:
|
||||
|
||||
PIP_REQUIREMENTS = [
|
||||
PipRequirement(modulename='pylint', minversion=[2, 5, 2]),
|
||||
PipRequirement(modulename='mypy', minversion=[0, 770]),
|
||||
PipRequirement(modulename='mypy', minversion=[0, 780]),
|
||||
PipRequirement(modulename='yapf', minversion=[0, 30, 0]),
|
||||
PipRequirement(modulename='cpplint', minversion=[1, 5, 0]),
|
||||
PipRequirement(modulename='typing_extensions'),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user