mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-19 13:25:31 +08:00
commit
60ef633122
@ -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
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user