sync seed and wait time separately from launch trigger
This commit is contained in:
parent
3c68333638
commit
0b59b4fc29
29
NS.py
29
NS.py
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue