From 85ec1ae51acb7fb9a968228f6697f05f4f0223c8 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Tue, 28 Jun 2022 18:36:32 +0300 Subject: [PATCH 1/2] finally fix #368 --- .../ba_data/python/bastd/game/chosenone.py | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/assets/src/ba_data/python/bastd/game/chosenone.py b/assets/src/ba_data/python/bastd/game/chosenone.py index ba99d35b..30ea6b0a 100644 --- a/assets/src/ba_data/python/bastd/game/chosenone.py +++ b/assets/src/ba_data/python/bastd/game/chosenone.py @@ -139,7 +139,6 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): Flag.project_stand(self._flag_spawn_pos) self._set_chosen_one_player(None) - pos = self._flag_spawn_pos ba.timer(1.0, call=self._tick, repeat=True) mat = self._reset_region_material = ba.Material() @@ -156,14 +155,20 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): ), ) - self._reset_region = ba.newnode('region', - attrs={ - 'position': (pos[0], pos[1] + 0.75, - pos[2]), - 'scale': (0.5, 0.5, 0.5), - 'type': 'sphere', - 'materials': [mat] - }) + self._create_reset_region() + + def _create_reset_region(self) -> None: + assert self._reset_region_material is not None + assert self._flag_spawn_pos is not None + pos = self._flag_spawn_pos + self._reset_region = ba.newnode( + 'region', + attrs={ + 'position': (pos[0], pos[1] + 0.75, pos[2]), + 'scale': (0.5, 0.5, 0.5), + 'type': 'sphere', + 'materials': [self._reset_region_material] + }) def _get_chosen_one_player(self) -> Player | None: # Should never return invalid references; return None in that case. @@ -176,14 +181,14 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): if self._get_chosen_one_player() is not None: return - # Attempt to get a Player controlling a Spaz that we hit. + # Attempt to get a Actor that we hit. try: - player = ba.getcollision().opposingnode.getdelegate( - PlayerSpaz, True).getplayer(Player, True) + spaz = ba.getcollision().opposingnode.getdelegate(PlayerSpaz, True) + player = spaz.getplayer(Player, True) except ba.NotFoundError: return - if player.is_alive(): + if spaz.is_alive(): self._set_chosen_one_player(player) def _flash_flag_spawn(self) -> None: @@ -278,6 +283,10 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): # Also an extra momentary flash. self._flash_flag_spawn() + + # Re-create our flag region if someone is waiting for flag + # right there: + self._create_reset_region() else: if player.actor: self._flag = None From 8dd058b1d36b29b736b0d31114b83cfd3d5b4b4b Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Tue, 28 Jun 2022 18:56:39 +0300 Subject: [PATCH 2/2] logic fix --- assets/src/ba_data/python/bastd/game/chosenone.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/assets/src/ba_data/python/bastd/game/chosenone.py b/assets/src/ba_data/python/bastd/game/chosenone.py index 30ea6b0a..6f75748e 100644 --- a/assets/src/ba_data/python/bastd/game/chosenone.py +++ b/assets/src/ba_data/python/bastd/game/chosenone.py @@ -137,8 +137,6 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): self.setup_standard_powerup_drops() self._flag_spawn_pos = self.map.get_flag_position(None) Flag.project_stand(self._flag_spawn_pos) - self._set_chosen_one_player(None) - ba.timer(1.0, call=self._tick, repeat=True) mat = self._reset_region_material = ba.Material() @@ -155,7 +153,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): ), ) - self._create_reset_region() + self._set_chosen_one_player(None) def _create_reset_region(self) -> None: assert self._reset_region_material is not None @@ -284,8 +282,8 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): # Also an extra momentary flash. self._flash_flag_spawn() - # Re-create our flag region if someone is waiting for flag - # right there: + # Re-create our flag region in case if someone is waiting for + # flag right there: self._create_reset_region() else: if player.actor: