Merge pull request #238 from Freaku17/main

Add co-op support to simon_says minigame
This commit is contained in:
rikkolovescats 2024-02-17 02:57:31 +05:30 committed by GitHub
commit acbc1bda2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 8 deletions

View file

@ -67,7 +67,7 @@
} }
}, },
"simon_says": { "simon_says": {
"description": "You better do what Simon says", "description": "You better do what Simon says. Playable in co-op",
"external_url": "", "external_url": "",
"authors": [ "authors": [
{ {
@ -77,6 +77,12 @@
} }
], ],
"versions": { "versions": {
"1.0.2": {
"api_version": 8,
"commit_sha": "593ae6f",
"released_on": "16-02-2024",
"md5sum": "57cd7a06f1f3169752cf77537affcf5b"
},
"1.0.1": { "1.0.1": {
"api_version": 8, "api_version": 8,
"commit_sha": "2b5c9ee", "commit_sha": "2b5c9ee",

View file

@ -102,6 +102,7 @@ class Player(bs.Player['Team']):
def __init__(self) -> None: def __init__(self) -> None:
self.score = 0 self.score = 0
self.dead: bool = False
class Team(bs.Team[Player]): class Team(bs.Team[Player]):
@ -230,9 +231,8 @@ class SimonSays(bs.TeamGameActivity[Player, Team]):
player.score = 0 player.score = 0
# check for immediate end if theres only 1 player # check for immediate end if theres only 1 player
if len(self.players) == 1: if len(self.players) == 1:
bs.timer(4000/1000, lambda: self.check_end()) bs.timer(4000/1000, bs.Call(self.check_end))
else: bs.timer(6000/1000, self.call_round)
bs.timer(6000/1000, self.call_round)
def spawn_player(self, player: PlayerT) -> bs.Actor: def spawn_player(self, player: PlayerT) -> bs.Actor:
assert player assert player
@ -352,6 +352,7 @@ class SimonSays(bs.TeamGameActivity[Player, Team]):
def handlemessage(self, msg) -> None: def handlemessage(self, msg) -> None:
if isinstance(msg, bs.PlayerDiedMessage): if isinstance(msg, bs.PlayerDiedMessage):
msg.getplayer(Player).dead = True
self.check_end() self.check_end()
else: else:
super().handlemessage(msg) super().handlemessage(msg)
@ -363,10 +364,25 @@ class SimonSays(bs.TeamGameActivity[Player, Team]):
results.set_team_score(team, team.score) results.set_team_score(team, team.score)
self.end(results=results) self.end(results=results)
def check_end(self) -> None: def check_end(self):
i = 0 i = 0
for player in self.players: for player in self.players:
if player.is_alive(): if player.is_alive() and not player.dead:
i += 1 i += 1
if i <= 2: if isinstance(self.session, bs.CoopSession):
bs.timer(0.6, lambda: self.end_game()) if i <= 0:
bs.timer(0.6, bs.Call(self.end_game))
else:
if i <= 2:
bs.timer(0.6, bs.Call(self.end_game))
# ba_meta export plugin
class plugin(babase.Plugin):
def __init__(self):
## Campaign support ##
babase.app.classic.add_coop_practice_level(bs.Level(
name='Simon Says',
gametype=SimonSays,
settings={},
preview_texture_name='courtyardPreview'))