mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-01 12:25:53 +08:00
FreeForAll score screens should be behaving now
This commit is contained in:
parent
6d8c3c5c14
commit
9edc4c5d57
@ -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}))
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user