Merge pull request #763 from vishal332008/myself

Spawning time fix
This commit is contained in:
Eric Froemling 2025-01-15 10:36:06 -08:00 committed by GitHub
commit 60ef633122
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 7 deletions

View File

@ -144,6 +144,9 @@ class FlagDiedMessage:
flag: Flag
"""The `Flag` that died."""
self_kill: bool = False
"""If the `Flag` killed itself or not."""
@dataclass
class FlagDroppedMessage:
@ -283,7 +286,9 @@ class Flag(bs.Actor):
)
self._counter.text = str(self._count)
if self._count < 1:
self.handlemessage(bs.DieMessage())
self.handlemessage(
bs.DieMessage(how=bs.DeathType.LEFT_GAME)
)
else:
assert self._counter
self._counter.text = ''
@ -337,7 +342,11 @@ class Flag(bs.Actor):
if self.node:
self.node.delete()
if not msg.immediate:
self.activity.handlemessage(FlagDiedMessage(self))
self.activity.handlemessage(
FlagDiedMessage(self, (
msg.how is bs.DeathType.LEFT_GAME
))
)
elif isinstance(msg, bs.HitMessage):
assert self.node
assert msg.force_direction is not None

View File

@ -331,7 +331,10 @@ class FootballTeamGame(bs.TeamGameActivity[Player, Team]):
# Respawn dead flags.
elif isinstance(msg, FlagDiedMessage):
if not self.has_ended():
self._flag_respawn_timer = bs.Timer(3.0, self._spawn_flag)
if msg.self_kill:
self._spawn_flag()
else:
self._flag_respawn_timer = bs.Timer(3.0, self._spawn_flag)
self._flag_respawn_light = bs.NodeActor(
bs.newnode(
'light',
@ -879,8 +882,7 @@ class FootballCoopGame(bs.CoopGameActivity[Player, Team]):
)
self._time_text_input.node.timemax = self._final_time_ms
# FIXME: Does this still need to be deferred?
bs.pushcall(bs.Call(self.do_end, 'victory'))
self.do_end('victory')
def do_end(self, outcome: str) -> None:
"""End the game with the specified outcome."""
@ -931,7 +933,10 @@ class FootballCoopGame(bs.CoopGameActivity[Player, Team]):
# Respawn dead flags.
elif isinstance(msg, FlagDiedMessage):
assert isinstance(msg.flag, FootballFlag)
msg.flag.respawn_timer = bs.Timer(3.0, self._spawn_flag)
if msg.self_kill:
self._spawn_flag()
else:
msg.flag.respawn_timer = bs.Timer(3.0, self._spawn_flag)
self._flag_respawn_light = bs.NodeActor(
bs.newnode(
'light',
@ -948,7 +953,7 @@ class FootballCoopGame(bs.CoopGameActivity[Player, Team]):
self._flag_respawn_light.node,
'intensity',
{0: 0, 0.25: 0.15, 0.5: 0},
loop=True,
loop=(not msg.self_kill),
)
bs.timer(3.0, self._flag_respawn_light.node.delete)
else: