Surn commited on
Commit
c488945
·
1 Parent(s): b37c7d8

Test Initializing

Browse files
Files changed (1) hide show
  1. wrdler/ui.py +109 -108
wrdler/ui.py CHANGED
@@ -117,116 +117,117 @@ def _build_letter_map(puzzle) -> dict[CoordLike, str]:
117
  def _init_session() -> None:
118
  if "initialized" in st.session_state and st.session_state.initialized:
119
  return
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
- # --- Load most recent settings from settings/settings.json ---
122
-
123
- latest_settings = load_latest_settings()
124
-
125
- if latest_settings:
126
- # Apply all keys from settings file into session_state before any defaults
127
- for key, value in latest_settings.items():
128
- # Avoid clobbering an already-initialized puzzle or game progress
129
- if key in {"puzzle", "revealed", "guessed", "score", "points_by_word"}:
130
- continue
131
- st.session_state[key] = value
132
- # --- Ensure enable_sound_effects is always set from loaded settings ---
133
- if "enable_sound_effects" in latest_settings:
134
- st.session_state.enable_sound_effects = latest_settings["enable_sound_effects"]
135
-
136
- # --- Preserve music settings ---
137
-
138
- # Check if we're loading a shared game
139
- shared_settings = st.session_state.get("shared_game_settings")
140
-
141
- # Apply challenge-specific settings before initializing defaults
142
- # This ensures show_incorrect_guesses, enable_free_letters, game_title are set from challenge
143
- if shared_settings:
144
- _apply_challenge_settings(shared_settings)
145
-
146
- # Ensure a default selection exists before creating the puzzle
147
- files = get_wordlist_files()
148
- if "selected_wordlist" not in st.session_state and files:
149
- st.session_state.selected_wordlist = "classic.txt"
150
- if "game_mode" not in st.session_state:
151
- st.session_state.game_mode = "classic"
152
-
153
- # Generate puzzle with shared game settings if available
154
- if shared_settings:
155
- # Each user gets different random words from the same wordlist source
156
- wordlist_source = shared_settings.get("wordlist_source", "classic.txt")
157
- spacer = shared_settings["puzzle_options"].get("spacer", 1)
158
- game_mode = shared_settings.get("game_mode", "classic")
159
-
160
- # Override selected wordlist to match challenge
161
- st.session_state.selected_wordlist = wordlist_source
162
-
163
- # Generate puzzle with random words from the challenge's wordlist (Wrdler:8×6 grid)
164
- words = load_word_list(wordlist_source)
165
- puzzle = generate_puzzle(
166
- grid_rows=6,
167
- grid_cols=8,
168
- words_by_len=words,
169
- spacer=spacer
170
- )
171
- st.session_state.game_mode = game_mode
172
- st.session_state.spacer = spacer
173
-
174
- # Users will see leaderboard showing all players' results
175
- # Each player has their own uid and word_list in the users array
176
- else:
177
- # Normal game generation (Wrdler: 8 columns × 6 rows)
178
- # Use unified loader that handles both AI and file modes
179
- words = load_word_list_or_ai(
180
- use_ai=st.session_state.get("use_ai_wordlist", False),
181
- topic=st.session_state.get("ai_topic", "English"),
182
- selected_file=st.session_state.get("selected_wordlist")
183
- )
184
- puzzle = generate_puzzle(grid_rows=6, grid_cols=8, words_by_len=words)
185
-
186
- st.session_state.puzzle = puzzle
187
- st.session_state.grid_rows = 6 # Wrdler uses 6 rows
188
- st.session_state.grid_cols = 8 # Wrdler uses 8 columns
189
- st.session_state.revealed = set()
190
- st.session_state.guessed = set()
191
- st.session_state.score = 0
192
- # Update welcome message based on free letters setting
193
- if st.session_state.get("enable_free_letters", False):
194
- st.session_state.last_action = "Welcome to Wrdler! Choose 2 free letters to start. Guess the words on each line!"
195
- else:
196
- st.session_state.last_action = "Welcome to Wrdler! Reveal cells and guess the words on each line!"
197
- st.session_state.can_guess = False
198
- st.session_state.points_by_word = {}
199
- st.session_state.letter_map = build_letter_map(puzzle)
200
- st.session_state.initialized = True
201
- st.session_state.start_time = None # Timer starts on first action (grid click or free letter)
202
- st.session_state.end_time = None
203
- # Ensure game_mode is set
204
- if "game_mode" not in st.session_state:
205
- st.session_state.game_mode = "classic"
206
- # Initialize incorrect guesses tracking
207
- if "incorrect_guesses" not in st.session_state:
208
- st.session_state.incorrect_guesses = []
209
- # Initialize show_incorrect_guesses to True by default
210
- if "show_incorrect_guesses" not in st.session_state:
211
- st.session_state.show_incorrect_guesses = True
212
-
213
- # NEW: Initialize Show Challenge Share Links (default ON)
214
- if "show_challenge_share_links" not in st.session_state:
215
- st.session_state.show_challenge_share_links = True
216
 
217
- # NEW: Initialize free letters tracking
218
- if "free_letters" not in st.session_state:
219
- st.session_state.free_letters = set()
220
- if "free_letters_used" not in st.session_state:
221
- st.session_state.free_letters_used = 0
222
- if "enable_free_letters" not in st.session_state:
223
- st.session_state.enable_free_letters = False
224
- if "show_grid_ticks" not in st.session_state:
225
- st.session_state.show_grid_ticks = False
226
-
227
- # --- Add enable sound effects ---
228
- if "enable_sound_effects" not in st.session_state:
229
- st.session_state.enable_sound_effects = False
230
 
231
 
232
  def _new_game() -> None:
 
117
  def _init_session() -> None:
118
  if "initialized" in st.session_state and st.session_state.initialized:
119
  return
120
+ spinner_placeholder = st.empty()
121
+ with CustomSpinner(spinner_placeholder, "Initializing session..."):
122
+ # --- Load most recent settings from settings/settings.json ---
123
+
124
+ latest_settings = load_latest_settings()
125
+
126
+ if latest_settings:
127
+ # Apply all keys from settings file into session_state before any defaults
128
+ for key, value in latest_settings.items():
129
+ # Avoid clobbering an already-initialized puzzle or game progress
130
+ if key in {"puzzle", "revealed", "guessed", "score", "points_by_word"}:
131
+ continue
132
+ st.session_state[key] = value
133
+ # --- Ensure enable_sound_effects is always set from loaded settings ---
134
+ if "enable_sound_effects" in latest_settings:
135
+ st.session_state.enable_sound_effects = latest_settings["enable_sound_effects"]
136
+
137
+ # --- Preserve music settings ---
138
+
139
+ # Check if we're loading a shared game
140
+ shared_settings = st.session_state.get("shared_game_settings")
141
+
142
+ # Apply challenge-specific settings before initializing defaults
143
+ # This ensures show_incorrect_guesses, enable_free_letters, game_title are set from challenge
144
+ if shared_settings:
145
+ _apply_challenge_settings(shared_settings)
146
+
147
+ # Ensure a default selection exists before creating the puzzle
148
+ files = get_wordlist_files()
149
+ if "selected_wordlist" not in st.session_state and files:
150
+ st.session_state.selected_wordlist = "classic.txt"
151
+ if "game_mode" not in st.session_state:
152
+ st.session_state.game_mode = "classic"
153
+
154
+ # Generate puzzle with shared game settings if available
155
+ if shared_settings:
156
+ # Each user gets different random words from the same wordlist source
157
+ wordlist_source = shared_settings.get("wordlist_source", "classic.txt")
158
+ spacer = shared_settings["puzzle_options"].get("spacer", 1)
159
+ game_mode = shared_settings.get("game_mode", "classic")
160
+
161
+ # Override selected wordlist to match challenge
162
+ st.session_state.selected_wordlist = wordlist_source
163
+
164
+ # Generate puzzle with random words from the challenge's wordlist (Wrdler:8×6 grid)
165
+ words = load_word_list(wordlist_source)
166
+ puzzle = generate_puzzle(
167
+ grid_rows=6,
168
+ grid_cols=8,
169
+ words_by_len=words,
170
+ spacer=spacer
171
+ )
172
+ st.session_state.game_mode = game_mode
173
+ st.session_state.spacer = spacer
174
 
175
+ # Users will see leaderboard showing all players' results
176
+ # Each player has their own uid and word_list in the users array
177
+ else:
178
+ # Normal game generation (Wrdler: 8 columns × 6 rows)
179
+ # Use unified loader that handles both AI and file modes
180
+ words = load_word_list_or_ai(
181
+ use_ai=st.session_state.get("use_ai_wordlist", False),
182
+ topic=st.session_state.get("ai_topic", "English"),
183
+ selected_file=st.session_state.get("selected_wordlist")
184
+ )
185
+ puzzle = generate_puzzle(grid_rows=6, grid_cols=8, words_by_len=words)
186
+
187
+ st.session_state.puzzle = puzzle
188
+ st.session_state.grid_rows = 6 # Wrdler uses 6 rows
189
+ st.session_state.grid_cols = 8 # Wrdler uses 8 columns
190
+ st.session_state.revealed = set()
191
+ st.session_state.guessed = set()
192
+ st.session_state.score = 0
193
+ # Update welcome message based on free letters setting
194
+ if st.session_state.get("enable_free_letters", False):
195
+ st.session_state.last_action = "Welcome to Wrdler! Choose 2 free letters to start. Guess the words on each line!"
196
+ else:
197
+ st.session_state.last_action = "Welcome to Wrdler! Reveal cells and guess the words on each line!"
198
+ st.session_state.can_guess = False
199
+ st.session_state.points_by_word = {}
200
+ st.session_state.letter_map = build_letter_map(puzzle)
201
+ st.session_state.initialized = True
202
+ st.session_state.start_time = None # Timer starts on first action (grid click or free letter)
203
+ st.session_state.end_time = None
204
+ # Ensure game_mode is set
205
+ if "game_mode" not in st.session_state:
206
+ st.session_state.game_mode = "classic"
207
+ # Initialize incorrect guesses tracking
208
+ if "incorrect_guesses" not in st.session_state:
209
+ st.session_state.incorrect_guesses = []
210
+ # Initialize show_incorrect_guesses to True by default
211
+ if "show_incorrect_guesses" not in st.session_state:
212
+ st.session_state.show_incorrect_guesses = True
213
+
214
+ # NEW: Initialize Show Challenge Share Links (default ON)
215
+ if "show_challenge_share_links" not in st.session_state:
216
+ st.session_state.show_challenge_share_links = True
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
 
218
+ # NEW: Initialize free letters tracking
219
+ if "free_letters" not in st.session_state:
220
+ st.session_state.free_letters = set()
221
+ if "free_letters_used" not in st.session_state:
222
+ st.session_state.free_letters_used = 0
223
+ if "enable_free_letters" not in st.session_state:
224
+ st.session_state.enable_free_letters = False
225
+ if "show_grid_ticks" not in st.session_state:
226
+ st.session_state.show_grid_ticks = False
227
+
228
+ # --- Add enable sound effects ---
229
+ if "enable_sound_effects" not in st.session_state:
230
+ st.session_state.enable_sound_effects = False
231
 
232
 
233
  def _new_game() -> None: