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

View File

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