fix null replays and replays altogether by copying, having separate indices and only saving at the end

This commit is contained in:
csd4ni3l
2025-11-29 21:47:14 +01:00
parent 945c3a3859
commit e76f36d755

View File

@@ -102,9 +102,9 @@ class Game(arcade.gui.UIView):
self.scene.add_sprite("Player", self.player) self.scene.add_sprite("Player", self.player)
self.replays = self.data.get("replays", []) if self.settings.get("replays", True) else None self.replays = self.data.get("replays", []).copy() if self.settings.get("replays", True) else []
self.replay_players = [] self.replay_players = []
self.replay_index = 0 self.replay_indices = [0] * len(self.replays)
if self.replays: if self.replays:
for n, replay in enumerate(self.replays): for n, replay in enumerate(self.replays):
@@ -329,23 +329,25 @@ class Game(arcade.gui.UIView):
if self.replays: if self.replays:
replays_to_remove = [] replays_to_remove = []
self.replay_index += 1
for n, replay in enumerate(self.replays): for n, replay in enumerate(self.replays):
if replay is None: if replay is None:
continue continue
if self.replay_index < len(replay): self.replay_indices[n] += 1
self.replay_players[n].center_x, self.replay_players[n].center_y = replay[self.replay_index]
if self.replay_indices[n] < len(replay):
self.replay_players[n].center_x, self.replay_players[n].center_y = replay[self.replay_indices[n]]
else: else:
replays_to_remove.append(n) replays_to_remove.append(n)
for replay_to_remove in replays_to_remove: for replay_to_remove in replays_to_remove:
self.replays[replay_to_remove] = None self.replays[replay_to_remove] = None
self.scene[f"ReplayPlayer{replay_to_remove}"].remove(self.replay_players[replay_to_remove]) self.replay_players[replay_to_remove] = None
self.scene.remove_sprite_list_by_name(f"ReplayPlayer{replay_to_remove}") if f"ReplayPlayer{replay_to_remove}" in self.scene._name_mapping:
self.scene.remove_sprite_list_by_name(f"ReplayPlayer{replay_to_remove}")
def update_data_file(self): def update_data_file(self, with_replay=False):
with open("data.json", "w") as file: with open("data.json", "w") as file:
data_dict = self.data.copy() data_dict = self.data.copy()
@@ -354,7 +356,9 @@ class Game(arcade.gui.UIView):
f"{self.level_num}_tries": self.tries f"{self.level_num}_tries": self.tries
}) })
data_dict["replays"].append(self.current_replay_data) if with_replay:
if self.current_replay_data:
data_dict["replays"].append(self.current_replay_data)
file.write(json.dumps(data_dict, indent=4)) file.write(json.dumps(data_dict, indent=4))
@@ -363,5 +367,6 @@ class Game(arcade.gui.UIView):
self.main_exit() self.main_exit()
def main_exit(self): def main_exit(self):
self.update_data_file(with_replay=True)
from menus.main import Main from menus.main import Main
self.window.show_view(Main(self.pypresence_client)) self.window.show_view(Main(self.pypresence_client))