mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-08 08:45:43 +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:
|
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}))
|
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user