mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-05 23:13:46 +08:00
Fixed a bug with get_source_player
This commit is contained in:
parent
6d861f4088
commit
95c93a455f
@ -301,7 +301,7 @@ class HitMessage:
|
|||||||
self.velocity_magnitude = velocity_magnitude
|
self.velocity_magnitude = velocity_magnitude
|
||||||
self.radius = radius
|
self.radius = radius
|
||||||
|
|
||||||
# Invalid refs should never be passed to things.
|
# We should not be getting passed an invalid ref.
|
||||||
assert source_player is None or source_player.exists()
|
assert source_player is None or source_player.exists()
|
||||||
self._source_player = source_player
|
self._source_player = source_player
|
||||||
self.kick_back = kick_back
|
self.kick_back = kick_back
|
||||||
@ -313,18 +313,16 @@ class HitMessage:
|
|||||||
|
|
||||||
def get_source_player(
|
def get_source_player(
|
||||||
self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
|
self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
|
||||||
"""Return the source-player if there is one and they still exist.
|
"""Return the source-player if one exists and is the provided type."""
|
||||||
|
|
||||||
The type of player for the current activity should be passed so that
|
|
||||||
the type-checker properly identifies the returned value as one.
|
|
||||||
"""
|
|
||||||
player: Any = self._source_player
|
player: Any = self._source_player
|
||||||
assert isinstance(player, (playertype, type(None)))
|
|
||||||
|
|
||||||
# We should not be delivering invalid refs.
|
# We should not be delivering invalid refs.
|
||||||
# (technically if someone holds on to this message this can happen)
|
# (we could translate to None here but technically we are changing
|
||||||
|
# the message delivered which seems wrong)
|
||||||
assert player is None or player.exists()
|
assert player is None or player.exists()
|
||||||
return player
|
|
||||||
|
# Return the player *only* if they're the type given.
|
||||||
|
return player if isinstance(player, playertype) else None
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|||||||
@ -852,18 +852,10 @@ class Bomb(ba.Actor):
|
|||||||
|
|
||||||
def get_source_player(
|
def get_source_player(
|
||||||
self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
|
self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
|
||||||
"""Return the source-player if there is one and they still exist.
|
"""Return the source-player if one exists and is the provided type."""
|
||||||
|
|
||||||
The type of player for the current activity should be passed so that
|
|
||||||
the type-checker properly identifies the returned value as one.
|
|
||||||
"""
|
|
||||||
player: Any = self._source_player
|
player: Any = self._source_player
|
||||||
assert isinstance(player, (playertype, type(None)))
|
return (player if isinstance(player, playertype) and player.exists()
|
||||||
|
else None)
|
||||||
# We should not be delivering invalid refs.
|
|
||||||
# (technically if someone holds on to this message this can happen)
|
|
||||||
assert player is None or player.exists()
|
|
||||||
return player
|
|
||||||
|
|
||||||
def on_expire(self) -> None:
|
def on_expire(self) -> None:
|
||||||
super().on_expire()
|
super().on_expire()
|
||||||
|
|||||||
@ -98,12 +98,12 @@ class Puck(ba.Actor):
|
|||||||
msg.force_direction[2])
|
msg.force_direction[2])
|
||||||
|
|
||||||
# If this hit came from a player, log them as the last to touch us.
|
# If this hit came from a player, log them as the last to touch us.
|
||||||
splayer = msg.get_source_player(Player)
|
s_player = msg.get_source_player(Player)
|
||||||
if splayer is not None:
|
if s_player is not None:
|
||||||
activity = self._activity()
|
activity = self._activity()
|
||||||
if activity:
|
if activity:
|
||||||
if splayer in activity.players:
|
if s_player in activity.players:
|
||||||
self.last_players_to_touch[splayer.team.id] = splayer
|
self.last_players_to_touch[s_player.team.id] = s_player
|
||||||
else:
|
else:
|
||||||
super().handlemessage(msg)
|
super().handlemessage(msg)
|
||||||
|
|
||||||
|
|||||||
@ -173,7 +173,8 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]):
|
|||||||
# under us if we hit stuff (don't wanna get points for new targets).
|
# under us if we hit stuff (don't wanna get points for new targets).
|
||||||
player = bomb.get_source_player(Player)
|
player = bomb.get_source_player(Player)
|
||||||
if not player:
|
if not player:
|
||||||
return # Could happen if they leave after throwing a bomb.
|
# It's possible the player left after throwing the bomb.
|
||||||
|
return
|
||||||
|
|
||||||
bullseye = any(
|
bullseye = any(
|
||||||
target.do_hit_at_position(pos, player)
|
target.do_hit_at_position(pos, player)
|
||||||
|
|||||||
@ -2584,10 +2584,7 @@ If the time-limit expires, end_game() will be called.</p>
|
|||||||
<dt><h4><a name="method_ba_HitMessage__get_source_player">get_source_player()</a></dt></h4><dd>
|
<dt><h4><a name="method_ba_HitMessage__get_source_player">get_source_player()</a></dt></h4><dd>
|
||||||
<p><span>get_source_player(self, playertype: Type[PlayerType]) -> Optional[PlayerType]</span></p>
|
<p><span>get_source_player(self, playertype: Type[PlayerType]) -> Optional[PlayerType]</span></p>
|
||||||
|
|
||||||
<p>Return the source-player if there is one and they still exist.</p>
|
<p>Return the source-player if one exists and is the provided type.</p>
|
||||||
|
|
||||||
<p>The type of player for the current activity should be passed so that
|
|
||||||
the type-checker properly identifies the returned value as one.</p>
|
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user