This commit is contained in:
Eric Froemling 2020-05-20 01:09:39 -07:00
parent acb38415eb
commit e32aa01088
8 changed files with 101 additions and 44 deletions

View File

@ -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/e4/b6/bbdb904d5cea6023a50d4dc2c9e9",
"build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/17/34/76b4411678f95106d2e3e368c79b",
"build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/83/b9/a679a7aaeb67227f94286ea9fffb",
"build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/95/a0/7a95002b5cc7d1bacbda49098fd9",
"build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/18/b8/1b547866b77a98fcc5ca43c93a07",
"build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ee/c4/0e92e825c67a249a77b16bb7a4fa",
"build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/31/1e/2d282dff8a9331b121908061c6bc",
"build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/1a/eb/9bf8367a161f3e9fb29b4f61216e",
"build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/4a/22/30984f1fd3a430755ea62c80ec76",
"build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/fe/f5/e99958f225c4b342c1bd4ecb0c23",
"build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/54/fd/b26b46b083240ad3855ba93cb42d",
"build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/a7/ee/ec0ee56e6f7254b460c4f1116a0c"
"build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/fd/1edae1d48773436f72ceaf5c4588",
"build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/07/88/2e60127c99cd8018f4b7a77c455b",
"build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/01/ef/2c661b395a46f1abbd6c2042cb50",
"build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/98/ad/d73757e8902b9c5c36c73469773b",
"build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/94/e3/9ad5acc492f343a24e790be07ed0",
"build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9a/1f/5ae4c3d9b710b24ea2464c1f62ab",
"build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/83/f9/de5c6a7a1dd65f305565bd5a0897",
"build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/c7/29/1f1d904b57ef0379654421737c6b",
"build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/bd/7b/308923feba6216c72c565cb9a942",
"build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/ce/44/4d2658f31d74fb342604e38bf12a",
"build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/53/d7/89dfbf816f8fe6824cf9f62f81f6",
"build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/1c/b8/d9def95f52348a50d01b4a9a3996"
}

View File

@ -34,7 +34,7 @@ NOTE: This file was autogenerated by gendummymodule; do not edit by hand.
"""
# (hash we can use to see if this file is out of date)
# SOURCES_HASH=122350585846084418668853979161934598264
# SOURCES_HASH=68384686054944380533078060197841658129
# I'm sorry Pylint. I know this file saddens you. Be strong.
# pylint: disable=useless-suppression

View File

@ -987,7 +987,7 @@ class Lobby:
self._vpos -= 48
def remove_chooser(self, player: ba.SessionPlayer) -> None:
"""Remove a single player's chooser; does not kick him.
"""Remove a single player's chooser; does not kick them.
This is used when a player enters the game and no longer
needs a chooser."""

View File

@ -19,6 +19,7 @@
# SOFTWARE.
# -----------------------------------------------------------------------------
"""Player related functionality."""
from __future__ import annotations
from typing import TYPE_CHECKING, TypeVar, Generic
@ -32,7 +33,13 @@ TeamType = TypeVar('TeamType', bound='ba.Team')
class Player(Generic[TeamType]):
"""Testing."""
"""A player in a specific ba.Activity.
Category: Gameplay Classes
These correspond to ba.SessionPlayer objects, but are created per activity
so that the activity can use its own custom player subclass.
"""
# Defining these types at the class level instead of in __init__ so
# that types are introspectable (these are still instance attrs).
@ -112,7 +119,7 @@ class Player(Generic[TeamType]):
@property
def exists(self) -> bool:
"""Whether the player still exists.
"""Whether the underlying player still exists.
Most functionality will fail on a nonexistent player.
Note that you can also use the boolean operator for this same

View File

@ -46,7 +46,7 @@ class Session:
ba.Activity instances such as mini-games and score-screens, and for
maintaining state between them (players, teams, score tallies, etc).
Attributes:
Attrs:
teams
All the ba.Teams in the Session. Most things should use the team
@ -74,10 +74,24 @@ class Session:
The ba.Campaign instance this Session represents, or None if
there is no associated Campaign.
use_teams
Whether this session groups players into an explicit set of
teams. If this is off, a unique team is generated for each
player that joins.
use_team_colors
Whether players on a team should all adopt the colors of that
team instead of their own profile colors. This only applies if
use_teams is enabled.
allow_mid_activity_joins
Whether players should be allowed to join in the middle of
activities.
"""
use_teams = False
use_team_colors = True
allow_mid_activity_joins = True
use_teams: bool = False
use_team_colors: bool = True
allow_mid_activity_joins: bool = True
# Note: even though these are instance vars, we annotate them at the
# class level so that docs generation can access their types.

View File

@ -18,7 +18,8 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# -----------------------------------------------------------------------------
"""Defines Team class."""
"""Team related functionality."""
from __future__ import annotations
import weakref
@ -35,9 +36,9 @@ class SessionTeam:
Category: Gameplay Classes
Note that a player *always* has a team;
Note that a SessionPlayer *always* has a SessionTeam;
in some cases, such as free-for-all ba.Sessions,
each team consists of just one ba.Player.
each SessionTeam consists of just one SessionPlayer.
Attributes:
@ -104,7 +105,13 @@ PlayerType = TypeVar('PlayerType', bound='ba.Player')
class Team(Generic[PlayerType]):
"""Testing."""
"""A team in a specific ba.Activity.
Category: Gameplay Classes
These correspond to ba.SessionTeam objects, but are created per activity
so that the activity can use its own custom team subclass.
"""
# Defining these types at the class level instead of in __init__ so
# that types are introspectable (these are still instance attrs).

View File

@ -263,9 +263,9 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
# No longer allowing mid-game joiners here; too easy to exploit.
if self.has_begun():
# Make sure our team has survival seconds set if they're all dead
# (otherwise blocked new ffa players would be considered 'still
# alive' in score tallying).
# Make sure their team has survival seconds set if they're all dead
# (otherwise blocked new ffa players are considered 'still alive'
# in score tallying).
if (self._get_total_team_lives(player.team) == 0
and player.team.survival_seconds is None):
player.team.survival_seconds = 0

View File

@ -1,5 +1,5 @@
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
<h4><em>last updated on 2020-05-20 for Ballistica version 1.5.0 build 20023</em></h4>
<h4><em>last updated on 2020-05-20 for Ballistica version 1.5.0 build 20024</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>
@ -25,6 +25,7 @@
<li><a href="#class_ba_Lobby">ba.Lobby</a></li>
<li><a href="#class_ba_Material">ba.Material</a></li>
<li><a href="#class_ba_Node">ba.Node</a></li>
<li><a href="#class_ba_Player">ba.Player</a></li>
<li><a href="#class_ba_PlayerRecord">ba.PlayerRecord</a></li>
<li><a href="#class_ba_ScoreInfo">ba.ScoreInfo</a></li>
<li><a href="#class_ba_Session">ba.Session</a></li>
@ -39,6 +40,7 @@
<li><a href="#class_ba_SessionPlayer">ba.SessionPlayer</a></li>
<li><a href="#class_ba_SessionTeam">ba.SessionTeam</a></li>
<li><a href="#class_ba_Stats">ba.Stats</a></li>
<li><a href="#class_ba_Team">ba.Team</a></li>
<li><a href="#class_ba_TeamGameResults">ba.TeamGameResults</a></li>
</ul>
<h4><a name="function_category_Gameplay_Functions">Gameplay Functions</a></h4>
@ -196,11 +198,6 @@
<li><a href="#class_ba_WidgetNotFoundError">ba.WidgetNotFoundError</a></li>
</ul>
</ul>
<h4><a name="class_category_Misc_Classes">Misc Classes</a></h4>
<ul>
<li><a href="#class_ba_Player">ba.Player</a></li>
<li><a href="#class_ba_Team">ba.Team</a></li>
</ul>
<hr>
<h2><strong><a name="class_ba_Achievement">ba.Achievement</a></strong></h3>
<p><em>&lt;top level class&gt;</em>
@ -1593,7 +1590,7 @@ and it should begin its actual game logic.</p>
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h5><a href="#attr_ba_Session__allow_mid_activity_joins">allow_mid_activity_joins</a>, <a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a>, <a href="#attr_ba_Session__use_team_colors">use_team_colors</a>, <a href="#attr_ba_Session__use_teams">use_teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_Session__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_Session__end">end()</a>, <a href="#method_ba_Session__end_activity">end_activity()</a>, <a href="#method_ba_Session__getactivity">getactivity()</a>, <a href="#method_ba_Session__handlemessage">handlemessage()</a>, <a href="#method_ba_Session__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_Session__on_player_request">on_player_request()</a>, <a href="#method_ba_Session__on_team_join">on_team_join()</a>, <a href="#method_ba_Session__on_team_leave">on_team_leave()</a>, <a href="#method_ba_Session__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
@ -1926,7 +1923,7 @@ its time with lingering corpses, sound effects, etc.</p>
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h5><a href="#attr_ba_Session__allow_mid_activity_joins">allow_mid_activity_joins</a>, <a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a>, <a href="#attr_ba_Session__use_team_colors">use_team_colors</a>, <a href="#attr_ba_Session__use_teams">use_teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_MultiTeamSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_MultiTeamSession__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_MultiTeamSession__end">end()</a>, <a href="#method_ba_MultiTeamSession__end_activity">end_activity()</a>, <a href="#method_ba_MultiTeamSession__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_MultiTeamSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_MultiTeamSession__get_game_number">get_game_number()</a>, <a href="#method_ba_MultiTeamSession__get_max_players">get_max_players()</a>, <a href="#method_ba_MultiTeamSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_MultiTeamSession__get_series_length">get_series_length()</a>, <a href="#method_ba_MultiTeamSession__getactivity">getactivity()</a>, <a href="#method_ba_MultiTeamSession__handlemessage">handlemessage()</a>, <a href="#method_ba_MultiTeamSession__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_MultiTeamSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_MultiTeamSession__on_player_leave">on_player_leave()</a>, <a href="#method_ba_MultiTeamSession__on_player_request">on_player_request()</a>, <a href="#method_ba_MultiTeamSession__on_team_join">on_team_join()</a>, <a href="#method_ba_MultiTeamSession__on_team_leave">on_team_leave()</a>, <a href="#method_ba_MultiTeamSession__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
@ -1947,7 +1944,7 @@ its time with lingering corpses, sound effects, etc.</p>
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h5><a href="#attr_ba_Session__allow_mid_activity_joins">allow_mid_activity_joins</a>, <a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a>, <a href="#attr_ba_Session__use_team_colors">use_team_colors</a>, <a href="#attr_ba_Session__use_teams">use_teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_MultiTeamSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_MultiTeamSession__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_MultiTeamSession__end">end()</a>, <a href="#method_ba_MultiTeamSession__end_activity">end_activity()</a>, <a href="#method_ba_MultiTeamSession__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_MultiTeamSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_MultiTeamSession__get_game_number">get_game_number()</a>, <a href="#method_ba_MultiTeamSession__get_max_players">get_max_players()</a>, <a href="#method_ba_MultiTeamSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_MultiTeamSession__get_series_length">get_series_length()</a>, <a href="#method_ba_MultiTeamSession__getactivity">getactivity()</a>, <a href="#method_ba_MultiTeamSession__handlemessage">handlemessage()</a>, <a href="#method_ba_MultiTeamSession__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_MultiTeamSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_MultiTeamSession__on_player_leave">on_player_leave()</a>, <a href="#method_ba_MultiTeamSession__on_player_request">on_player_request()</a>, <a href="#method_ba_MultiTeamSession__on_team_join">on_team_join()</a>, <a href="#method_ba_MultiTeamSession__on_team_leave">on_team_leave()</a>, <a href="#method_ba_MultiTeamSession__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
@ -2783,7 +2780,7 @@ Intended for use in initial joining-screens.</p>
<dt><h4><a name="method_ba_Lobby__remove_chooser">remove_chooser()</a></dt></h4><dd>
<p><span>remove_chooser(self, player: <a href="#class_ba_SessionPlayer">ba.SessionPlayer</a>) -&gt; None</span></p>
<p>Remove a single player's chooser; does not kick him.</p>
<p>Remove a single player's chooser; does not kick them.</p>
<p>This is used when a player enters the game and no longer
needs a chooser.</p>
@ -3240,7 +3237,7 @@ Use <a href="#function_ba_getmodel">ba.getmodel</a>() to instantiate one.</p>
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h5><a href="#attr_ba_Session__allow_mid_activity_joins">allow_mid_activity_joins</a>, <a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a>, <a href="#attr_ba_Session__use_team_colors">use_team_colors</a>, <a href="#attr_ba_Session__use_teams">use_teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_Session__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_Session__end">end()</a>, <a href="#method_ba_Session__end_activity">end_activity()</a>, <a href="#method_ba_Session__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_Session__getactivity">getactivity()</a>, <a href="#method_ba_Session__handlemessage">handlemessage()</a>, <a href="#method_ba_Session__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_Session__on_player_leave">on_player_leave()</a>, <a href="#method_ba_Session__on_player_request">on_player_request()</a>, <a href="#method_ba_Session__on_team_leave">on_team_leave()</a>, <a href="#method_ba_Session__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
@ -3711,14 +3708,20 @@ even if myactor is set to None.</p>
<hr>
<h2><strong><a name="class_ba_Player">ba.Player</a></strong></h3>
<p>inherits from: <a href="#class_typing_Generic">typing.Generic</a></p>
<p>Testing.</p>
<p>A player in a specific <a href="#class_ba_Activity">ba.Activity</a>.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a></p>
<p> These correspond to <a href="#class_ba_SessionPlayer">ba.SessionPlayer</a> objects, but are created per activity
so that the activity can use its own custom player subclass.
</p>
<h3>Attributes:</h3>
<h5><a href="#attr_ba_Player__exists">exists</a>, <a href="#attr_ba_Player__node">node</a>, <a href="#attr_ba_Player__sessionplayer">sessionplayer</a></h5>
<dl>
<dt><h4><a name="attr_ba_Player__exists">exists</a></h4></dt><dd>
<p><span>bool</span></p>
<p>Whether the player still exists.</p>
<p>Whether the underlying player still exists.</p>
<p> Most functionality will fail on a nonexistent player.
Note that you can also use the boolean operator for this same
@ -4100,8 +4103,14 @@ Pass 0 or a negative number for no ban time.</p>
maintaining state between them (players, teams, score tallies, etc).</p>
<h3>Attributes:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h5><a href="#attr_ba_Session__allow_mid_activity_joins">allow_mid_activity_joins</a>, <a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a>, <a href="#attr_ba_Session__use_team_colors">use_team_colors</a>, <a href="#attr_ba_Session__use_teams">use_teams</a></h5>
<dl>
<dt><h4><a name="attr_ba_Session__allow_mid_activity_joins">allow_mid_activity_joins</a></h4></dt><dd>
<p><span>bool</span></p>
<p>Whether players should be allowed to join in the middle of
activities.</p>
</dd>
<dt><h4><a name="attr_ba_Session__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> instance this Session represents, or None if
@ -4139,6 +4148,20 @@ not yet selected a character, will only appear on this list.</p>
<p>All the <a href="#class_ba_Team">ba.Teams</a> in the Session. Most things should use the team
list in <a href="#class_ba_Activity">ba.Activity</a>; not this.</p>
</dd>
<dt><h4><a name="attr_ba_Session__use_team_colors">use_team_colors</a></h4></dt><dd>
<p><span>bool</span></p>
<p>Whether players on a team should all adopt the colors of that
team instead of their own profile colors. This only applies if
use_teams is enabled.</p>
</dd>
<dt><h4><a name="attr_ba_Session__use_teams">use_teams</a></h4></dt><dd>
<p><span>bool</span></p>
<p>Whether this session groups players into an explicit set of
teams. If this is off, a unique team is generated for each
player that joins.</p>
</dd>
</dl>
<h3>Methods:</h3>
@ -4434,9 +4457,9 @@ other players.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a></p>
<p> Note that a player *always* has a team;
<p> Note that a SessionPlayer *always* has a SessionTeam;
in some cases, such as free-for-all <a href="#class_ba_Session">ba.Sessions</a>,
each team consists of just one <a href="#class_ba_Player">ba.Player</a>.</p>
each SessionTeam consists of just one SessionPlayer.</p>
<h3>Attributes:</h3>
<h5><a href="#attr_ba_SessionTeam__color">color</a>, <a href="#attr_ba_SessionTeam__gamedata">gamedata</a>, <a href="#attr_ba_SessionTeam__id">id</a>, <a href="#attr_ba_SessionTeam__name">name</a>, <a href="#attr_ba_SessionTeam__players">players</a>, <a href="#attr_ba_SessionTeam__sessiondata">sessiondata</a></h5>
@ -4735,7 +4758,13 @@ of the session.</p>
<hr>
<h2><strong><a name="class_ba_Team">ba.Team</a></strong></h3>
<p>inherits from: <a href="#class_typing_Generic">typing.Generic</a></p>
<p>Testing.</p>
<p>A team in a specific <a href="#class_ba_Activity">ba.Activity</a>.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a></p>
<p> These correspond to <a href="#class_ba_SessionTeam">ba.SessionTeam</a> objects, but are created per activity
so that the activity can use its own custom team subclass.
</p>
<h3>Attributes:</h3>
<dl>