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.stop()
|
||||||
self.grow_sound_channel = None
|
self.grow_sound_channel = None
|
||||||
self.get_game().peers["localhost"].seed = random.randint(0, self.get_configuration("system", "max-seed"))
|
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"))
|
self.play(self.force_launch, delay=self.get_configuration("network", "join-time-limit"))
|
||||||
# Wipe away other levels and zoom selected
|
# Wipe away other levels and zoom selected
|
||||||
for level_index in range(3):
|
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.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.previews[level_index].play(self.previews[level_index].wipe_out, interval=100)
|
||||||
self.get_audio().play_sfx("complete_pattern_3")
|
self.get_audio().play_sfx("complete_pattern_3")
|
||||||
|
self.players_counted = 1
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
if self.grow_sound_channel is None:
|
if self.grow_sound_channel is None:
|
||||||
|
@ -952,16 +954,21 @@ class LevelSelect(Animation):
|
||||||
# Check if peers are still deciding
|
# Check if peers are still deciding
|
||||||
elif not self.level_launched:
|
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
|
# 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 \
|
if all(peer.status != "level select" or peer.status == "voted" for peer in self.get_game().peers.values()) or \
|
||||||
self.launch_forced:
|
self.launch_forced:
|
||||||
seed = self.get_game().peers["localhost"].seed
|
print(f"Seeding generator with {self.seed}")
|
||||||
for peer in self.get_game().peers.values():
|
random.seed(self.seed)
|
||||||
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)
|
|
||||||
self.halt(self.force_launch)
|
self.halt(self.force_launch)
|
||||||
self.get_game().pop_up("", clear=True)
|
self.get_game().pop_up("", clear=True)
|
||||||
self.level_launched = True
|
self.level_launched = True
|
||||||
|
@ -974,8 +981,10 @@ class LevelSelect(Animation):
|
||||||
|
|
||||||
# Update displayed wait message
|
# Update displayed wait message
|
||||||
else:
|
else:
|
||||||
self.get_game().pop_up(
|
remaining = self.accounts[self.force_launch].delay
|
||||||
f"Waiting {self.accounts[self.force_launch].delay // 1000 + 1}s for players to join", clear=True)
|
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
|
# Second half of launch animation
|
||||||
elif not self.get_game().wipe.is_playing() and any(preview.is_hidden() for preview in self.previews):
|
elif not self.get_game().wipe.is_playing() and any(preview.is_hidden() for preview in self.previews):
|
||||||
|
|
Loading…
Reference in New Issue