more scene_v1 untangling

This commit is contained in:
Eric 2023-06-06 19:26:42 -07:00
parent 1211c6787a
commit e1dd1d1d26
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
22 changed files with 235 additions and 131 deletions

View File

@ -66,13 +66,9 @@
"ba_data/python/baclassic/__pycache__/_analytics.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_appdelegate.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_benchmark.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_campaign.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_input.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_level.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_lobby.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_music.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_net.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_profile.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_servermode.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_store.cpython-311.opt-1.pyc",
"ba_data/python/baclassic/__pycache__/_subsystem.cpython-311.opt-1.pyc",
@ -87,13 +83,9 @@
"ba_data/python/baclassic/_analytics.py",
"ba_data/python/baclassic/_appdelegate.py",
"ba_data/python/baclassic/_benchmark.py",
"ba_data/python/baclassic/_campaign.py",
"ba_data/python/baclassic/_input.py",
"ba_data/python/baclassic/_level.py",
"ba_data/python/baclassic/_lobby.py",
"ba_data/python/baclassic/_music.py",
"ba_data/python/baclassic/_net.py",
"ba_data/python/baclassic/_profile.py",
"ba_data/python/baclassic/_servermode.py",
"ba_data/python/baclassic/_store.py",
"ba_data/python/baclassic/_subsystem.py",
@ -133,6 +125,7 @@
"ba_data/python/bascenev1/__pycache__/_activitytypes.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_actor.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_appmode.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_campaign.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_collision.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_coopgame.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_coopsession.cpython-311.opt-1.pyc",
@ -145,6 +138,8 @@
"ba_data/python/bascenev1/__pycache__/_gameresults.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_gameutils.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_hooks.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_level.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_lobby.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_map.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_messages.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_multiteamsession.cpython-311.opt-1.pyc",
@ -153,6 +148,7 @@
"ba_data/python/bascenev1/__pycache__/_player.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_playlist.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_powerup.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_profile.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_score.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_session.cpython-311.opt-1.pyc",
"ba_data/python/bascenev1/__pycache__/_settings.cpython-311.opt-1.pyc",
@ -164,6 +160,7 @@
"ba_data/python/bascenev1/_activitytypes.py",
"ba_data/python/bascenev1/_actor.py",
"ba_data/python/bascenev1/_appmode.py",
"ba_data/python/bascenev1/_campaign.py",
"ba_data/python/bascenev1/_collision.py",
"ba_data/python/bascenev1/_coopgame.py",
"ba_data/python/bascenev1/_coopsession.py",
@ -176,6 +173,8 @@
"ba_data/python/bascenev1/_gameresults.py",
"ba_data/python/bascenev1/_gameutils.py",
"ba_data/python/bascenev1/_hooks.py",
"ba_data/python/bascenev1/_level.py",
"ba_data/python/bascenev1/_lobby.py",
"ba_data/python/bascenev1/_map.py",
"ba_data/python/bascenev1/_messages.py",
"ba_data/python/bascenev1/_multiteamsession.py",
@ -184,6 +183,7 @@
"ba_data/python/bascenev1/_player.py",
"ba_data/python/bascenev1/_playlist.py",
"ba_data/python/bascenev1/_powerup.py",
"ba_data/python/bascenev1/_profile.py",
"ba_data/python/bascenev1/_score.py",
"ba_data/python/bascenev1/_session.py",
"ba_data/python/bascenev1/_settings.py",

View File

@ -181,13 +181,9 @@ SCRIPT_TARGETS_PY_PUBLIC = \
$(BUILD_DIR)/ba_data/python/baclassic/_analytics.py \
$(BUILD_DIR)/ba_data/python/baclassic/_appdelegate.py \
$(BUILD_DIR)/ba_data/python/baclassic/_benchmark.py \
$(BUILD_DIR)/ba_data/python/baclassic/_campaign.py \
$(BUILD_DIR)/ba_data/python/baclassic/_input.py \
$(BUILD_DIR)/ba_data/python/baclassic/_level.py \
$(BUILD_DIR)/ba_data/python/baclassic/_lobby.py \
$(BUILD_DIR)/ba_data/python/baclassic/_music.py \
$(BUILD_DIR)/ba_data/python/baclassic/_net.py \
$(BUILD_DIR)/ba_data/python/baclassic/_profile.py \
$(BUILD_DIR)/ba_data/python/baclassic/_servermode.py \
$(BUILD_DIR)/ba_data/python/baclassic/_store.py \
$(BUILD_DIR)/ba_data/python/baclassic/_subsystem.py \
@ -205,6 +201,7 @@ SCRIPT_TARGETS_PY_PUBLIC = \
$(BUILD_DIR)/ba_data/python/bascenev1/_activitytypes.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_actor.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_appmode.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_campaign.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_collision.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_coopgame.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_coopsession.py \
@ -217,6 +214,8 @@ SCRIPT_TARGETS_PY_PUBLIC = \
$(BUILD_DIR)/ba_data/python/bascenev1/_gameresults.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_gameutils.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_hooks.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_level.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_lobby.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_map.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_messages.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_multiteamsession.py \
@ -225,6 +224,7 @@ SCRIPT_TARGETS_PY_PUBLIC = \
$(BUILD_DIR)/ba_data/python/bascenev1/_player.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_playlist.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_powerup.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_profile.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_score.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_session.py \
$(BUILD_DIR)/ba_data/python/bascenev1/_settings.py \
@ -453,13 +453,9 @@ SCRIPT_TARGETS_PYC_PUBLIC = \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_analytics.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_appdelegate.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_benchmark.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_campaign.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_input.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_level.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_lobby.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_music.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_net.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_profile.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_servermode.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_store.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/baclassic/__pycache__/_subsystem.cpython-311.opt-1.pyc \
@ -477,6 +473,7 @@ SCRIPT_TARGETS_PYC_PUBLIC = \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_activitytypes.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_actor.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_appmode.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_campaign.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_collision.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_coopgame.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_coopsession.cpython-311.opt-1.pyc \
@ -489,6 +486,8 @@ SCRIPT_TARGETS_PYC_PUBLIC = \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_gameresults.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_gameutils.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_hooks.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_level.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_lobby.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_map.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_messages.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_multiteamsession.cpython-311.opt-1.pyc \
@ -497,6 +496,7 @@ SCRIPT_TARGETS_PYC_PUBLIC = \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_player.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_playlist.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_powerup.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_profile.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_score.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_session.cpython-311.opt-1.pyc \
$(BUILD_DIR)/ba_data/python/bascenev1/__pycache__/_settings.cpython-311.opt-1.pyc \

View File

@ -31,17 +31,10 @@ directly, it will most likely not work without classic present.
import logging
from baclassic._subsystem import ClassicSubsystem
from baclassic._campaign import Campaign
from baclassic._level import Level
from baclassic._lobby import Lobby, Chooser
from baclassic._achievement import Achievement, AchievementSubsystem
__all__ = [
'ClassicSubsystem',
'Campaign',
'Level',
'Lobby',
'Chooser',
'Achievement',
'AchievementSubsystem',
]

View File

@ -16,6 +16,7 @@ import bascenev1
from babase._general import Call
from babase._appsubsystem import AppSubsystem
from babase._general import AppTime
from bascenev1 import _profile
import _baclassic
from baclassic._music import MusicSubsystem
from baclassic._accountv1 import AccountV1Subsystem
@ -26,12 +27,12 @@ from baclassic._tips import get_all_tips
from baclassic._store import StoreSubsystem
from baclassic._ui import UISubsystem
from baclassic import _input
from baclassic import _profile
if TYPE_CHECKING:
from typing import Callable, Any, Sequence
import babase
import bauiv1
import baclassic
from bastd.actor import spazappearance
from baclassic._appdelegate import AppDelegate
@ -54,9 +55,9 @@ class ClassicSubsystem(AppSubsystem):
# baclassic/__init__.py. This way this version can be used for
# runtime via babase.app.classic which enforces handling of the
# package-not-present case.
from baclassic._level import Level
from baclassic._campaign import Campaign
from baclassic._lobby import Lobby, Chooser
from bascenev1._level import Level
from bascenev1._campaign import Campaign
from bascenev1._lobby import Lobby, Chooser
from baclassic._music import MusicPlayMode # FIXME move 2 subsys
def __init__(self) -> None:
@ -71,7 +72,7 @@ class ClassicSubsystem(AppSubsystem):
self.ui = UISubsystem()
# Co-op Campaigns.
self.campaigns: dict[str, baclassic.Campaign] = {}
self.campaigns: dict[str, bascenev1.Campaign] = {}
self.custom_coop_practice_games: list[str] = []
# Lobby.
@ -169,7 +170,7 @@ class ClassicSubsystem(AppSubsystem):
def on_app_launching(self) -> None:
"""Called when the app is first entering the launching state."""
# pylint: disable=too-many-locals
from baclassic import _campaign
from bascenev1 import _campaign
from bascenev1 import _map
from bastd.actor import spazappearance
from bastd import maps as stdmaps
@ -325,7 +326,7 @@ class ClassicSubsystem(AppSubsystem):
# FIXME: This should not be an actor attr.
activity.paused_text = None
def add_coop_practice_level(self, level: baclassic.Level) -> None:
def add_coop_practice_level(self, level: bascenev1.Level) -> None:
"""Adds an individual level to the 'practice' section in Co-op."""
# Assign this level to our catch-all campaign.
@ -523,7 +524,7 @@ class ClassicSubsystem(AppSubsystem):
return _tournament.get_tournament_prize_strings(entry)
def getcampaign(self, name: str) -> baclassic.Campaign:
def getcampaign(self, name: str) -> bascenev1.Campaign:
"""Return a campaign by name."""
return self.campaigns[name]
@ -751,6 +752,14 @@ class ClassicSubsystem(AppSubsystem):
return TeamSeriesVictoryScoreScreenActivity
def get_team_victory_score_screen_activity(
self,
) -> type[bascenev1.Activity]:
"""(internal)"""
from bastd.activity.dualteamscore import TeamVictoryScoreScreenActivity
return TeamVictoryScoreScreenActivity
def get_free_for_all_victory_score_screen_activity(
self,
) -> type[bascenev1.Activity]:
@ -760,3 +769,82 @@ class ClassicSubsystem(AppSubsystem):
)
return FreeForAllVictoryScoreScreenActivity
def get_coop_join_activity(self) -> type[bascenev1.Activity]:
"""(internal)"""
from bastd.activity.coopjoin import CoopJoinActivity
return CoopJoinActivity
def get_coop_score_screen(self) -> type[bascenev1.Activity]:
"""(internal)"""
from bastd.activity.coopscore import CoopScoreScreen
return CoopScoreScreen
def get_multi_team_join_activity(self) -> type[bascenev1.Activity]:
"""(internal)"""
from bastd.activity.multiteamjoin import MultiTeamJoinActivity
return MultiTeamJoinActivity
def get_tutorial_activity(self) -> type[bascenev1.Activity]:
"""(internal)"""
from bastd.tutorial import TutorialActivity
return TutorialActivity
def tournament_entry_window(
self,
tournament_id: str,
tournament_activity: bascenev1.Activity | None = None,
position: tuple[float, float] = (0.0, 0.0),
delegate: Any = None,
scale: float | None = None,
offset: tuple[float, float] = (0.0, 0.0),
on_close_call: Callable[[], Any] | None = None,
) -> None:
"""(internal)"""
from bastd.ui.tournamententry import TournamentEntryWindow
TournamentEntryWindow(
tournament_id,
tournament_activity,
position,
delegate,
scale,
offset,
on_close_call,
)
def get_main_menu_session(self) -> type[bascenev1.Session]:
"""(internal)"""
from bastd.mainmenu import MainMenuSession
return MainMenuSession
def continues_window(
self,
activity: bascenev1.Activity,
cost: int,
continue_call: Callable[[], Any],
cancel_call: Callable[[], Any],
) -> None:
"""(internal)"""
from bastd.ui.continues import ContinuesWindow
ContinuesWindow(activity, cost, continue_call, cancel_call)
def profile_browser_window(
self,
transition: str = 'in_right',
in_main_menu: bool = True,
selected_profile: str | None = None,
origin_widget: bauiv1.Widget | None = None,
) -> None:
"""(internal)"""
from bastd.ui.profile.browser import ProfileBrowserWindow
ProfileBrowserWindow(
transition, in_main_menu, selected_profile, origin_widget
)

View File

@ -147,6 +147,9 @@ from bascenev1._freeforallsession import FreeForAllSession
from bascenev1._gameactivity import GameActivity
from bascenev1._score import ScoreType, ScoreConfig
from bascenev1._dualteamsession import DualTeamSession
from bascenev1._lobby import Lobby, Chooser
from bascenev1._campaign import Campaign
from bascenev1._level import Level
from bascenev1._messages import (
UNHANDLED,
OutOfBoundsMessage,
@ -385,6 +388,10 @@ __all__ = [
'AppIntentExec',
'AppMode',
'SceneV1AppMode',
'Lobby',
'Chooser',
'Campaign',
'Level',
]
# Sanity check: we want to keep ballistica's dependencies and

View File

@ -22,7 +22,6 @@ from bascenev1._player import Player
if TYPE_CHECKING:
from typing import Any
import baclassic
import bascenev1
PlayerT = TypeVar('PlayerT', bound=Player)

View File

@ -18,7 +18,7 @@ from bascenev1._music import MusicType, setmusic
if TYPE_CHECKING:
import babase
import bascenev1
from baclassic._lobby import JoinInfo
from bascenev1._lobby import JoinInfo
class EndSessionActivity(Activity[EmptyPlayer, EmptyTeam]):
@ -41,14 +41,17 @@ class EndSessionActivity(Activity[EmptyPlayer, EmptyTeam]):
def on_begin(self) -> None:
# pylint: disable=cyclic-import
from bastd.mainmenu import MainMenuSession
assert _babase.app.classic is not None
from babase._general import Call
main_menu_session = _babase.app.classic.get_main_menu_session()
super().on_begin()
_babase.unlock_all_input()
assert _babase.app.classic is not None
_babase.app.classic.ads.call_after_ad(
Call(_bascenev1.new_host_session, MainMenuSession)
Call(_bascenev1.new_host_session, main_menu_session)
)
@ -110,10 +113,10 @@ class TransitionActivity(Activity[EmptyPlayer, EmptyTeam]):
def on_transition_in(self) -> None:
# pylint: disable=cyclic-import
from bastd.actor import background # FIXME: Don't use bastd from here.
from bastd.actor.background import Background
super().on_transition_in()
self._background = background.Background(
self._background = Background(
fade_time=0.5, start_faded=False, show_logo=False
)

View File

@ -10,10 +10,10 @@ import _babase
if TYPE_CHECKING:
from typing import Any
import babase
import baclassic
import bascenev1
def register_campaign(campaign: baclassic.Campaign) -> None:
def register_campaign(campaign: bascenev1.Campaign) -> None:
"""Register a new campaign."""
assert _babase.app.classic is not None
_babase.app.classic.campaigns[campaign.name] = campaign
@ -29,11 +29,11 @@ class Campaign:
self,
name: str,
sequential: bool = True,
levels: list[baclassic.Level] | None = None,
levels: list[bascenev1.Level] | None = None,
):
self._name = name
self._sequential = sequential
self._levels: list[baclassic.Level] = []
self._levels: list[bascenev1.Level] = []
if levels is not None:
for level in levels:
self.addlevel(level)
@ -49,7 +49,7 @@ class Campaign:
return self._sequential
def addlevel(
self, level: baclassic.Level, index: int | None = None
self, level: bascenev1.Level, index: int | None = None
) -> None:
"""Adds a baclassic.Level to the Campaign."""
if level.campaign is not None:
@ -61,11 +61,11 @@ class Campaign:
self._levels.insert(index, level)
@property
def levels(self) -> list[baclassic.Level]:
def levels(self) -> list[bascenev1.Level]:
"""The list of baclassic.Level-s in the Campaign."""
return self._levels
def getlevel(self, name: str) -> baclassic.Level:
def getlevel(self, name: str) -> bascenev1.Level:
"""Return a contained baclassic.Level by name."""
from babase import _error
@ -104,7 +104,7 @@ class Campaign:
def init_campaigns() -> None:
"""Fill out initial default Campaigns."""
# pylint: disable=cyclic-import
from baclassic._level import Level
from bascenev1._level import Level
from bastd.game.onslaught import OnslaughtGame
from bastd.game.football import FootballCoopGame
from bastd.game.runaround import RunaroundGame

View File

@ -15,7 +15,6 @@ if TYPE_CHECKING:
from typing import Sequence
from bastd.actor.playerspaz import PlayerSpaz
import babase
import baclassic
import bascenev1
PlayerT = TypeVar('PlayerT', bound='bascenev1.Player')

View File

@ -12,7 +12,6 @@ from bascenev1._session import Session
if TYPE_CHECKING:
from typing import Any, Callable, Sequence
import babase
import baclassic
import bascenev1
TEAM_COLORS = [(0.2, 0.4, 1.6)]
@ -36,27 +35,29 @@ class CoopSession(Session):
# Note: even though these are instance vars, we annotate them at the
# class level so that docs generation can access their types.
campaign: baclassic.Campaign | None
campaign: bascenev1.Campaign | None
"""The baclassic.Campaign instance this Session represents, or None if
there is no associated Campaign."""
def __init__(self) -> None:
"""Instantiate a co-op mode session."""
# pylint: disable=cyclic-import
from bastd.activity.coopjoin import CoopJoinActivity
_babase.increment_analytics_count('Co-op session start')
app = _babase.app
assert app.classic is not None
classic = app.classic
assert classic is not None
coop_join_activity = classic.get_coop_join_activity()
# If they passed in explicit min/max, honor that.
# Otherwise defer to user overrides or defaults.
if 'min_players' in app.classic.coop_session_args:
min_players = app.classic.coop_session_args['min_players']
if 'min_players' in classic.coop_session_args:
min_players = classic.coop_session_args['min_players']
else:
min_players = 1
if 'max_players' in app.classic.coop_session_args:
max_players = app.classic.coop_session_args['max_players']
if 'max_players' in classic.coop_session_args:
max_players = classic.coop_session_args['max_players']
else:
max_players = app.config.get('Coop Game Max Players', 4)
@ -72,21 +73,21 @@ class CoopSession(Session):
)
# Tournament-ID if we correspond to a co-op tournament (otherwise None)
self.tournament_id: str | None = app.classic.coop_session_args.get(
self.tournament_id: str | None = classic.coop_session_args.get(
'tournament_id'
)
self.campaign = app.classic.getcampaign(
app.classic.coop_session_args['campaign']
self.campaign = classic.getcampaign(
classic.coop_session_args['campaign']
)
self.campaign_level_name: str = app.classic.coop_session_args['level']
self.campaign_level_name: str = classic.coop_session_args['level']
self._ran_tutorial_activity = False
self._tutorial_activity: bascenev1.Activity | None = None
self._custom_menu_ui: list[dict[str, Any]] = []
# Start our joining screen.
self.setactivity(_bascenev1.newactivity(CoopJoinActivity))
self.setactivity(_bascenev1.newactivity(coop_join_activity))
self._next_game_instance: bascenev1.GameActivity | None = None
self._next_game_level_name: str | None = None
@ -112,6 +113,9 @@ class CoopSession(Session):
# pylint: disable=cyclic-import
from bascenev1._gameactivity import GameActivity
classic = _babase.app.classic
assert classic is not None
# Instantiate levels we may be running soon to let them load in the bg.
# Build an instance for the current level.
@ -134,7 +138,7 @@ class CoopSession(Session):
levels = self.campaign.levels
level = self.campaign.getlevel(self.campaign_level_name)
nextlevel: baclassic.Level | None
nextlevel: bascenev1.Level | None
if level.index < len(levels) - 1:
nextlevel = levels[level.index + 1]
else:
@ -166,9 +170,8 @@ class CoopSession(Session):
and self._tutorial_activity is None
and not self._ran_tutorial_activity
):
from bastd.tutorial import TutorialActivity
self._tutorial_activity = _bascenev1.newactivity(TutorialActivity)
tutorial_activity = classic.get_tutorial_activity()
self._tutorial_activity = _bascenev1.newactivity(tutorial_activity)
def get_custom_menu_entries(self) -> list[dict[str, Any]]:
return self._custom_menu_ui
@ -220,14 +223,14 @@ class CoopSession(Session):
self, resume_callback: Callable[[], Any]
) -> None:
# pylint: disable=cyclic-import
from bastd.ui.tournamententry import TournamentEntryWindow
from bascenev1._gameactivity import GameActivity
assert _babase.app.classic is not None
activity = self.getactivity()
if activity is not None and not activity.expired:
assert self.tournament_id is not None
assert isinstance(activity, GameActivity)
TournamentEntryWindow(
_babase.app.classic.tournament_entry_window(
tournament_id=self.tournament_id,
tournament_activity=activity,
on_close_call=resume_callback,
@ -267,8 +270,6 @@ class CoopSession(Session):
# pylint: disable=cyclic-import
from babase._language import Lstr
from babase._general import WeakCall
from bastd.tutorial import TutorialActivity
from bastd.activity.coopscore import CoopScoreScreen
from bascenev1._gameresults import GameResults
from bascenev1._player import PlayerInfo
from bascenev1._activitytypes import JoinActivity, TransitionActivity
@ -276,6 +277,11 @@ class CoopSession(Session):
from bascenev1._score import ScoreType
app = _babase.app
classic = app.classic
assert classic is not None
tutorial_activity = classic.get_tutorial_activity()
coop_score_screen = classic.get_coop_score_screen()
# If we're running a TeamGameActivity we'll have a GameResults
# as results. Otherwise its an old CoopGameActivity so its giving
@ -297,7 +303,7 @@ class CoopSession(Session):
# If we're in a between-round activity or a restart-activity,
# hop into a round.
if isinstance(
activity, (JoinActivity, CoopScoreScreen, TransitionActivity)
activity, (JoinActivity, coop_score_screen, TransitionActivity)
):
if outcome == 'next_level':
if self._next_game_instance is None:
@ -357,7 +363,7 @@ class CoopSession(Session):
# If we were in a tutorial, just pop a transition to get to the
# actual round.
elif isinstance(activity, TutorialActivity):
elif isinstance(activity, tutorial_activity):
self.setactivity(_bascenev1.newactivity(TransitionActivity))
else:
playerinfos: list[bascenev1.PlayerInfo]
@ -424,7 +430,7 @@ class CoopSession(Session):
else:
self.setactivity(
_bascenev1.newactivity(
CoopScoreScreen,
coop_score_screen,
{
'playerinfos': playerinfos,
'score': score,

View File

@ -34,17 +34,21 @@ class DualTeamSession(MultiTeamSession):
def _switch_to_score_screen(self, results: bascenev1.GameResults) -> None:
# pylint: disable=cyclic-import
from bastd.activity.drawscore import DrawScoreScreenActivity
from bastd.activity.dualteamscore import TeamVictoryScoreScreenActivity
from bastd.activity.multiteamvictory import (
TeamSeriesVictoryScoreScreenActivity,
)
classic = _babase.app.classic
assert classic is not None
draw_score_screen_activity = classic.get_draw_score_screen_activity()
team_victory_score_screen_activity = (
classic.get_team_series_victory_score_screen_activity()
)
team_series_victory_score_screen_activity = (
classic.get_team_series_victory_score_screen_activity()
)
winnergroups = results.winnergroups
# If everyone has the same score, call it a draw.
if len(winnergroups) < 2:
self.setactivity(_bascenev1.newactivity(DrawScoreScreenActivity))
self.setactivity(_bascenev1.newactivity(draw_score_screen_activity))
else:
winner = winnergroups[0].teams[0]
winner.customdata['score'] += 1
@ -53,12 +57,13 @@ class DualTeamSession(MultiTeamSession):
if winner.customdata['score'] >= (self._series_length - 1) / 2 + 1:
self.setactivity(
_bascenev1.newactivity(
TeamSeriesVictoryScoreScreenActivity, {'winner': winner}
team_series_victory_score_screen_activity,
{'winner': winner},
)
)
else:
self.setactivity(
_bascenev1.newactivity(
TeamVictoryScoreScreenActivity, {'winner': winner}
team_victory_score_screen_activity, {'winner': winner}
)
)

View File

@ -27,7 +27,6 @@ if TYPE_CHECKING:
from bastd.actor.bomb import TNTSpawner
import babase
import bascenev1
import baclassic
PlayerT = TypeVar('PlayerT', bound='bascenev1.Player')
TeamT = TypeVar('TeamT', bound='bascenev1.Team')
@ -435,9 +434,12 @@ class GameActivity(Activity[PlayerT, TeamT]):
"""
# pylint: disable=too-many-nested-blocks
# pylint: disable=cyclic-import
from bastd.ui.continues import ContinuesWindow
from bascenev1._coopsession import CoopSession
classic = _babase.app.classic
assert classic is not None
continues_window = classic.continues_window
plus = _babase.app.plus
try:
if plus is not None and plus.get_v1_account_misc_read_val(
@ -464,7 +466,7 @@ class GameActivity(Activity[PlayerT, TeamT]):
with _babase.ContextRef.empty():
_babase.apptimer(
0.5,
lambda: ContinuesWindow(
lambda: continues_window(
self,
self._continue_cost,
continue_call=WeakCall(

View File

@ -17,9 +17,9 @@ if TYPE_CHECKING:
def launch_main_menu_session() -> None:
from bastd.mainmenu import MainMenuSession
assert _babase.app.classic is not None
_bascenev1.new_host_session(MainMenuSession)
_bascenev1.new_host_session(_babase.app.classic.get_main_menu_session())
def get_player_icon(sessionplayer: bascenev1.SessionPlayer) -> dict[str, Any]:

View File

@ -7,18 +7,14 @@ import copy
import weakref
from typing import TYPE_CHECKING
import _bauiv1
if TYPE_CHECKING:
from typing import Any
import baclassic
import bascenev1
import bauiv1
class Level:
"""An entry in a baclassic.Campaign consisting of a name, game type, and settings.
"""An entry in a bascenev1.Campaign.
Category: **Gameplay Classes**
"""
@ -36,7 +32,7 @@ class Level:
self._settings = settings
self._preview_texture_name = preview_texture_name
self._displayname = displayname
self._campaign: weakref.ref[baclassic.Campaign] | None = None
self._campaign: weakref.ref[bascenev1.Campaign] | None = None
self._index: int | None = None
self._score_version_string: str | None = None
@ -63,9 +59,9 @@ class Level:
"""The preview texture name for this Level."""
return self._preview_texture_name
def get_preview_texture(self) -> bauiv1.Texture:
"""Load/return the preview Texture for this Level."""
return _bauiv1.gettexture(self._preview_texture_name)
# def get_preview_texture(self) -> bauiv1.Texture:
# """Load/return the preview Texture for this Level."""
# return _bauiv1.gettexture(self._preview_texture_name)
@property
def displayname(self) -> bascenev1.Lstr:
@ -90,7 +86,7 @@ class Level:
return self._gametype
@property
def campaign(self) -> baclassic.Campaign | None:
def campaign(self) -> bascenev1.Campaign | None:
"""The baclassic.Campaign this Level is associated with, or None."""
return None if self._campaign is None else self._campaign()
@ -174,7 +170,7 @@ class Level:
assert isinstance(val, dict)
return val
def set_campaign(self, campaign: baclassic.Campaign, index: int) -> None:
def set_campaign(self, campaign: bascenev1.Campaign, index: int) -> None:
"""For use by baclassic.Campaign when adding levels to itself.
(internal)"""

View File

@ -13,14 +13,13 @@ import _babase
from babase._error import print_exception, print_error, NotFoundError
from babase._language import Lstr
from babase._mgen.enums import SpecialChar, InputType
from bascenev1._gameutils import animate, animate_array
import _bascenev1
from baclassic._profile import get_player_profile_colors
from bascenev1._profile import get_player_profile_colors
from bascenev1._gameutils import animate, animate_array
if TYPE_CHECKING:
from typing import Any, Sequence
import baclassic
import bascenev1
MAX_QUICK_CHANGE_COUNT = 30
@ -32,7 +31,7 @@ QUICK_CHANGE_RESET_INTERVAL = 1.0
class JoinInfo:
"""Display useful info for joiners."""
def __init__(self, lobby: baclassic.Lobby):
def __init__(self, lobby: bascenev1.Lobby):
from bascenev1._nodeactor import NodeActor
from babase._general import WeakCall
@ -121,8 +120,6 @@ class JoinInfo:
self._timer = _bascenev1.Timer(4.0, WeakCall(self._update), repeat=True)
def _update_for_keyboard(self, keyboard: bascenev1.InputDevice) -> None:
from baclassic import _input
classic = _babase.app.classic
assert classic is not None
@ -164,7 +161,7 @@ class JoinInfo:
class PlayerReadyMessage:
"""Tells an object a player has been selected from the given chooser."""
chooser: baclassic.Chooser
chooser: bascenev1.Chooser
@dataclass
@ -354,7 +351,7 @@ class Chooser:
):
app.classic.lobby_random_profile_index += 1
if app.classic.lobby_random_profile_index < len(profilenames):
profileindex = app.classic.lobby_random_profile_index
profileindex: int = app.classic.lobby_random_profile_index
app.classic.lobby_random_profile_index += 1
return profileindex
assert '_random' in profilenames
@ -384,14 +381,14 @@ class Chooser:
return self.lobby.sessionteams[self._selected_team_index]
@property
def lobby(self) -> baclassic.Lobby:
def lobby(self) -> bascenev1.Lobby:
"""The chooser's baclassic.Lobby."""
lobby = self._lobby()
if lobby is None:
raise NotFoundError('Lobby does not exist.')
return lobby
def get_lobby(self) -> baclassic.Lobby | None:
def get_lobby(self) -> bascenev1.Lobby | None:
"""Return this chooser's lobby if it still exists; otherwise None."""
return self._lobby()
@ -581,15 +578,17 @@ class Chooser:
def _set_ready(self, ready: bool) -> None:
# pylint: disable=cyclic-import
from bastd.ui.profile import browser as pbrowser
from babase._general import Call
classic = _babase.app.classic
assert classic is not None
profilename = self._profilenames[self._profileindex]
# Handle '_edit' as a special case.
if profilename == '_edit' and ready:
with _babase.ContextRef.empty():
pbrowser.ProfileBrowserWindow(in_main_menu=False)
classic.profile_browser_window(in_main_menu=False)
# Give their input-device UI ownership too
# (prevent someone else from snatching it in crowded games)

View File

@ -15,7 +15,6 @@ if TYPE_CHECKING:
from typing import Sequence, Any
import babase
import baclassic
import bascenev1
@ -66,7 +65,8 @@ def get_map_class(name: str) -> type[Map]:
assert _babase.app.classic is not None
name = get_filtered_map_name(name)
try:
return _babase.app.classic.maps[name]
mapclass: type[Map] = _babase.app.classic.maps[name]
return mapclass
except KeyError:
from babase import _error

View File

@ -41,12 +41,14 @@ class MultiTeamSession(Session):
"""Set up playlists & launch a bascenev1.Activity to accept joiners."""
# pylint: disable=cyclic-import
from bascenev1 import _playlist
from bastd.activity.multiteamjoin import MultiTeamJoinActivity
app = _babase.app
assert app.classic is not None
classic = app.classic
assert classic is not None
cfg = app.config
multi_team_join_activity = classic.get_multi_team_join_activity()
if self.use_teams:
team_names = cfg.get('Custom Team Names', DEFAULT_TEAM_NAMES)
team_colors = cfg.get('Custom Team Colors', DEFAULT_TEAM_COLORS)
@ -65,18 +67,18 @@ class MultiTeamSession(Session):
max_players=self.get_max_players(),
)
self._series_length = app.classic.teams_series_length
self._ffa_series_length = app.classic.ffa_series_length
self._series_length: int = classic.teams_series_length
self._ffa_series_length: int = classic.ffa_series_length
show_tutorial = cfg.get('Show Tutorial', True)
self._tutorial_activity_instance: bascenev1.Activity | None
if show_tutorial:
from bastd.tutorial import TutorialActivity
tutorial_activity = classic.get_tutorial_activity()
# Get this loading.
self._tutorial_activity_instance = _bascenev1.newactivity(
TutorialActivity
tutorial_activity
)
else:
self._tutorial_activity_instance = None
@ -131,7 +133,7 @@ class MultiTeamSession(Session):
self._instantiate_next_game()
# Start in our custom join screen.
self.setactivity(_bascenev1.newactivity(MultiTeamJoinActivity))
self.setactivity(_bascenev1.newactivity(multi_team_join_activity))
def get_ffa_series_length(self) -> int:
"""Return free-for-all series length."""
@ -173,16 +175,19 @@ class MultiTeamSession(Session):
self, activity: bascenev1.Activity, results: Any
) -> None:
# pylint: disable=cyclic-import
from bastd.tutorial import TutorialActivity
from bastd.activity.multiteamvictory import (
TeamSeriesVictoryScoreScreenActivity,
)
from bascenev1._activitytypes import (
TransitionActivity,
JoinActivity,
ScoreScreenActivity,
)
classic = _babase.app.classic
assert classic is not None
tutorial_activity = classic.get_tutorial_activity()
team_series_victory_score_screen_activity = (
classic.get_team_series_victory_score_screen_activity()
)
# If we have a tutorial to show, that's the first thing we do no
# matter what.
if self._tutorial_activity_instance is not None:
@ -192,7 +197,7 @@ class MultiTeamSession(Session):
# If we're leaving the tutorial activity, pop a transition activity
# to transition us into a round gracefully (otherwise we'd snap from
# one terrain to another instantly).
elif isinstance(activity, TutorialActivity):
elif isinstance(activity, tutorial_activity):
self.setactivity(_bascenev1.newactivity(TransitionActivity))
# If we're in a between-round activity or a restart-activity, hop
@ -201,7 +206,7 @@ class MultiTeamSession(Session):
activity, (JoinActivity, TransitionActivity, ScoreScreenActivity)
):
# If we're coming from a series-end activity, reset scores.
if isinstance(activity, TeamSeriesVictoryScoreScreenActivity):
if isinstance(activity, team_series_victory_score_screen_activity):
self.stats.reset()
self._game_number = 0
for team in self.sessionteams:

View File

@ -16,7 +16,6 @@ if TYPE_CHECKING:
from typing import Sequence, Any
import babase
import baclassic
import bascenev1
@ -47,7 +46,7 @@ class Session:
# at the class level so that looks better and nobody get lost while
# reading large __init__
lobby: baclassic.Lobby
lobby: bascenev1.Lobby
"""The baclassic.Lobby instance where new bascenev1.Player-s go to select
a Profile/Team/etc. before being added to games.
Be aware this value may be None if a Session does not allow
@ -93,12 +92,12 @@ class Session:
# pylint: disable=cyclic-import
# pylint: disable=too-many-branches
from efro.util import empty_weakref
from baclassic._lobby import Lobby
from bascenev1._dependency import (
Dependency,
AssetPackage,
DependencyError,
)
from bascenev1._lobby import Lobby
from bascenev1._stats import Stats
from bascenev1._gameactivity import GameActivity
from bascenev1._activity import Activity
@ -409,7 +408,6 @@ class Session:
will replace the old.
"""
from babase._general import Call
from babase._mgen.enums import TimeType
# Only pay attention if this is coming from our current activity.
if activity is not self._activity_retained:
@ -436,7 +434,7 @@ class Session:
def handlemessage(self, msg: Any) -> Any:
"""General message handling; can be passed any message object."""
from baclassic._lobby import PlayerReadyMessage
from bascenev1._lobby import PlayerReadyMessage
from bascenev1._messages import PlayerProfilesChangedMessage, UNHANDLED
if isinstance(msg, PlayerReadyMessage):
@ -629,7 +627,7 @@ class Session:
self._activity_should_end_immediately_delay,
)
def _on_player_ready(self, chooser: baclassic.Chooser) -> None:
def _on_player_ready(self, chooser: bascenev1.Chooser) -> None:
"""Called when a bascenev1.Player has checked themself ready."""
lobby = chooser.lobby
activity = self._activity_weak()
@ -691,7 +689,7 @@ class Session:
_babase.pushcall(self.begin_next_activity)
def _add_chosen_player(
self, chooser: baclassic.Chooser
self, chooser: bascenev1.Chooser
) -> bascenev1.SessionPlayer:
from bascenev1._team import SessionTeam

View File

@ -50,7 +50,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]):
self._menu_icon_texture = bui.gettexture('menuIcon')
self._next_level_icon_texture = bui.gettexture('nextLevelIcon')
self._campaign: baclassic.Campaign = settings['campaign']
self._campaign: bs.Campaign = settings['campaign']
self._have_achievements = (
bs.app.classic is not None

View File

@ -87,7 +87,9 @@ class GameButton:
size=(image_width, image_width * 0.5),
mesh_transparent=window.lsbt,
mesh_opaque=window.lsbo,
texture=campaign.getlevel(levelname).get_preview_texture(),
texture=bui.gettexture(
campaign.getlevel(levelname).preview_texture_name
),
mask_texture=bui.gettexture('mapPreviewMask'),
)

View File

@ -584,7 +584,9 @@ class TournamentButton:
bui.textwidget(edit=self.button_text, text=txt)
bui.imagewidget(
edit=self.image,
texture=campaign.getlevel(levelname).get_preview_texture(),
texture=bui.gettexture(
campaign.getlevel(levelname).preview_texture_name
),
opacity=1.0 if enabled else 0.5,
)