sync seed and wait time separately from launch trigger

This commit is contained in:
ohsqueezy 2024-01-10 17:30:37 -08:00
parent 3c68333638
commit 0b59b4fc29
1 changed files with 19 additions and 10 deletions

29
NS.py
View File

@ -925,7 +925,8 @@ class LevelSelect(Animation):
self.grow_sound_channel.stop()
self.grow_sound_channel = None
self.get_game().peers["localhost"].seed = random.randint(0, self.get_configuration("system", "max-seed"))
print(f"Set seed to {self.get_game().peers['localhost'].seed}")
self.seed = self.get_game().peers['localhost'].seed
print(f"Set seed to {self.seed}")
self.play(self.force_launch, delay=self.get_configuration("network", "join-time-limit"))
# Wipe away other levels and zoom selected
for level_index in range(3):
@ -933,6 +934,7 @@ class LevelSelect(Animation):
self.platforms[level_index].view.play(self.platforms[level_index].view.wipe_out)
self.previews[level_index].play(self.previews[level_index].wipe_out, interval=100)
self.get_audio().play_sfx("complete_pattern_3")
self.players_counted = 1
break
else:
if self.grow_sound_channel is None:
@ -952,16 +954,21 @@ class LevelSelect(Animation):
# Check if peers are still deciding
elif not self.level_launched:
# Sync seed and wait time with players who have voted for the same level
for peer in self.get_game().peers.values():
if peer.address != "localhost" and peer.status == "voted" and peer.level == self.level_index_selected:
peer.versus = True
if self.get_game().count_players() > self.players_counted:
self.players_counted += 1
self.seed = (self.seed + peer.seed) % self.get_configuration("system", "max-seed")
self.halt(self.force_launch)
self.play(self.force_launch, delay=self.get_configuration("network", "join-time-limit"))
# Launch if time is up, the lobby is empty, or everyone present has voted
if all(peer.status != "level select" or peer.status == "voted" for peer in self.get_game().peers.values()) or \
self.launch_forced:
seed = self.get_game().peers["localhost"].seed
for peer in self.get_game().peers.values():
if peer.address != "localhost" and peer.status == "voted" and peer.level == self.level_index_selected:
peer.versus = True
seed = (seed + peer.seed) % self.get_configuration("system", "max-seed")
print(f"Seeding generator with {seed}")
random.seed(seed)
print(f"Seeding generator with {self.seed}")
random.seed(self.seed)
self.halt(self.force_launch)
self.get_game().pop_up("", clear=True)
self.level_launched = True
@ -974,8 +981,10 @@ class LevelSelect(Animation):
# Update displayed wait message
else:
self.get_game().pop_up(
f"Waiting {self.accounts[self.force_launch].delay // 1000 + 1}s for players to join", clear=True)
remaining = self.accounts[self.force_launch].delay
if remaining < self.get_configuration("network", "join-time-limit") - 500:
self.get_game().pop_up(
f"Waiting {remaining // 1000 + 1}s for players to join", clear=True)
# Second half of launch animation
elif not self.get_game().wipe.is_playing() and any(preview.is_hidden() for preview in self.previews):