FreeForAll score screens should be behaving now

This commit is contained in:
Eric Froemling 2020-04-14 00:20:55 -07:00
parent 6d8c3c5c14
commit 9edc4c5d57
5 changed files with 27 additions and 24 deletions

View File

@ -70,16 +70,18 @@ class FreeForAllSession(TeamBaseSession):
def _switch_to_score_screen(self, results: ba.TeamGameResults) -> None: def _switch_to_score_screen(self, results: ba.TeamGameResults) -> None:
# pylint: disable=cyclic-import # pylint: disable=cyclic-import
from bastd.activity import drawscreen from bastd.activity.drawscreen import DrawScoreScreenActivity
from bastd.activity import multiteamendscreen from bastd.activity.multiteamendscreen import (
from bastd.activity import freeforallendscreen TeamSeriesVictoryScoreScreenActivity)
from bastd.activity.freeforallendscreen import (
FreeForAllVictoryScoreScreenActivity)
winners = results.get_winners() winners = results.get_winners()
# If there's multiple players and everyone has the same score, # If there's multiple players and everyone has the same score,
# call it a draw. # call it a draw.
if len(self.players) > 1 and len(winners) < 2: if len(self.players) > 1 and len(winners) < 2:
self.set_activity( self.set_activity(
_ba.new_activity(drawscreen.DrawScoreScreenActivity, _ba.new_activity(DrawScoreScreenActivity,
{'results': results})) {'results': results}))
else: else:
# Award different point amounts based on number of players. # Award different point amounts based on number of players.
@ -103,13 +105,9 @@ class FreeForAllSession(TeamBaseSession):
and series_winners[0].sessiondata['score'] != and series_winners[0].sessiondata['score'] !=
series_winners[1].sessiondata['score'])): series_winners[1].sessiondata['score'])):
self.set_activity( self.set_activity(
_ba.new_activity( _ba.new_activity(TeamSeriesVictoryScoreScreenActivity,
multiteamendscreen. {'winner': series_winners[0]}))
TeamSeriesVictoryScoreScreenActivity,
{'winner': series_winners[0]}))
else: else:
self.set_activity( self.set_activity(
_ba.new_activity( _ba.new_activity(FreeForAllVictoryScoreScreenActivity,
freeforallendscreen. {'results': results}))
FreeForAllVictoryScoreScreenActivity,
{'results': results}))

View File

@ -76,9 +76,9 @@ class PlayerRecord:
self._stats = weakref.ref(stats) self._stats = weakref.ref(stats)
self._last_player: Optional[ba.Player] = None self._last_player: Optional[ba.Player] = None
self._player: Optional[ba.Player] = None self._player: Optional[ba.Player] = None
self.associate_with_player(player)
self._team: Optional[ReferenceType[ba.Team]] = None self._team: Optional[ReferenceType[ba.Team]] = None
self.streak = 0 self.streak = 0
self.associate_with_player(player)
@property @property
def team(self) -> ba.Team: def team(self) -> ba.Team:

View File

@ -78,8 +78,10 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity):
delay3 += 1.5 delay3 += 1.5
ba.timer(0.3, ba.Call(ba.playsound, self._score_display_sound)) ba.timer(0.3, ba.Call(ba.playsound, self._score_display_sound))
results = self.settings['results']
assert isinstance(results, ba.TeamGameResults)
self.show_player_scores(delay=0.001, self.show_player_scores(delay=0.001,
results=self.settings['results'], results=results,
scale=1.2, scale=1.2,
x_offset=-110.0) x_offset=-110.0)
@ -256,12 +258,12 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity):
ba.Call(_safesetattr, s_txt.node, 'color', (1, 1, 1, 1))) ba.Call(_safesetattr, s_txt.node, 'color', (1, 1, 1, 1)))
for j in range(score_change): for j in range(score_change):
ba.timer( ba.timer(
0.001 * (tdelay + delay1 + 150 * j), (tdelay + delay1 + 0.15 * j),
ba.Call( ba.Call(
_safesetattr, s_txt.node, 'text', _safesetattr, s_txt.node, 'text',
str(player.team.sessiondata['previous_score'] + j + str(player.team.sessiondata['previous_score'] + j +
1))) 1)))
tfin = tdelay + delay1 + 150 * j tfin = tdelay + delay1 + 0.15 * j
if tfin not in sound_times: if tfin not in sound_times:
sound_times.add(tfin) sound_times.add(tfin)
ba.timer( ba.timer(
@ -272,5 +274,6 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity):
def _safe_animate(self, node: Optional[ba.Node], attr: str, def _safe_animate(self, node: Optional[ba.Node], attr: str,
keys: Dict[float, float]) -> None: keys: Dict[float, float]) -> None:
"""Run an animation on a node if the node still exists."""
if node: if node:
ba.animate(node, attr, keys) ba.animate(node, attr, keys)

View File

@ -71,7 +71,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
def show_player_scores(self, def show_player_scores(self,
delay: float = 2.5, delay: float = 2.5,
results: Any = None, results: Optional[ba.TeamGameResults] = None,
scale: float = 1.0, scale: float = 1.0,
x_offset: float = 0.0, x_offset: float = 0.0,
y_offset: float = 0.0) -> None: y_offset: float = 0.0) -> None:
@ -105,7 +105,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
return val return val
return str(p_rec.accumscore) return str(p_rec.accumscore)
# get_records() can return players that are no longer in # stats.get_records() can return players that are no longer in
# the game.. if we're using results we have to filter those out # the game.. if we're using results we have to filter those out
# (since they're not in results and that's where we pull their # (since they're not in results and that's where we pull their
# scores from) # scores from)
@ -121,7 +121,6 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
# PyCharm incorrectly thinks valid_players is a List[str] # PyCharm incorrectly thinks valid_players is a List[str]
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
if p_rec[1].player is player: if p_rec[1].player is player:
# noinspection PyTypeChecker
return p_rec[1] return p_rec[1]
return None return None
@ -230,8 +229,8 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
transition=Text.Transition.IN_LEFT, transition=Text.Transition.IN_LEFT,
transition_delay=tdelay).autoretain() transition_delay=tdelay).autoretain()
_scoretxt(str(playerrec.accum_kill_count), 180, _scoretxt(str(playerrec.accum_kill_count), 180,
playerrec.accum_kill_count == topkillcount, 100) playerrec.accum_kill_count == topkillcount, 0.1)
_scoretxt(str(playerrec.accum_killed_count), 280, _scoretxt(str(playerrec.accum_killed_count), 280,
playerrec.accum_killed_count == topkilledcount, 100) playerrec.accum_killed_count == topkilledcount, 0.1)
_scoretxt(_get_prec_score_str(playerrec), 390, _scoretxt(_get_prec_score_str(playerrec), 390,
_get_prec_score(playerrec) == top_score, 200) _get_prec_score(playerrec) == top_score, 0.2)

View File

@ -209,8 +209,11 @@ class Text(ba.Actor):
ba.animate(cmb, 'input1', keys) ba.animate(cmb, 'input1', keys)
ba.animate(self.node, 'opacity', o_keys) ba.animate(self.node, 'opacity', o_keys)
elif transition is self.Transition.IN_TOP_SLOW: elif transition is self.Transition.IN_TOP_SLOW:
keys = {transition_delay: 0.4, transition_delay + 3.5: position[1]} keys = {
o_keys = {transition_delay: 0.0, transition_delay + 1.0: 1.0} transition_delay: 400.0,
transition_delay + 3.5: position[1]
}
o_keys = {transition_delay: 0, transition_delay + 1.0: 1.0}
cmb.input0 = position[0] cmb.input0 = position[0]
ba.animate(cmb, 'input1', keys) ba.animate(cmb, 'input1', keys)
ba.animate(self.node, 'opacity', o_keys) ba.animate(self.node, 'opacity', o_keys)