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

View File

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

View File

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

View File

@ -71,7 +71,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
def show_player_scores(self,
delay: float = 2.5,
results: Any = None,
results: Optional[ba.TeamGameResults] = None,
scale: float = 1.0,
x_offset: float = 0.0,
y_offset: float = 0.0) -> None:
@ -105,7 +105,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
return val
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
# (since they're not in results and that's where we pull their
# scores from)
@ -121,7 +121,6 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
# PyCharm incorrectly thinks valid_players is a List[str]
# noinspection PyUnresolvedReferences
if p_rec[1].player is player:
# noinspection PyTypeChecker
return p_rec[1]
return None
@ -230,8 +229,8 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
transition=Text.Transition.IN_LEFT,
transition_delay=tdelay).autoretain()
_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,
playerrec.accum_killed_count == topkilledcount, 100)
playerrec.accum_killed_count == topkilledcount, 0.1)
_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(self.node, 'opacity', o_keys)
elif transition is self.Transition.IN_TOP_SLOW:
keys = {transition_delay: 0.4, transition_delay + 3.5: position[1]}
o_keys = {transition_delay: 0.0, transition_delay + 1.0: 1.0}
keys = {
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]
ba.animate(cmb, 'input1', keys)
ba.animate(self.node, 'opacity', o_keys)