Fraser commited on
Commit
0cf8fa8
·
1 Parent(s): 5d91440
src/lib/components/Battle/BattleControls.svelte CHANGED
@@ -16,6 +16,9 @@
16
  export let onAction: (action: string) => void;
17
  export let onMoveSelect: (move: any) => void;
18
  export let onPicletSelect: (piclet: PicletInstance) => void;
 
 
 
19
 
20
  // Use the roster passed from parent instead of loading it here
21
  $: availablePiclets = rosterPiclets;
@@ -29,7 +32,14 @@
29
 
30
  <!-- Action Area -->
31
  <div class="action-area">
32
- {#if battlePhase === 'main' && !processingTurn && !battleEnded}
 
 
 
 
 
 
 
33
  <ActionButtons
34
  {isWildBattle}
35
  {playerPiclet}
@@ -40,6 +50,7 @@
40
  {onAction}
41
  {onMoveSelect}
42
  {onPicletSelect}
 
43
  />
44
  {/if}
45
  </div>
 
16
  export let onAction: (action: string) => void;
17
  export let onMoveSelect: (move: any) => void;
18
  export let onPicletSelect: (piclet: PicletInstance) => void;
19
+ export let onBack: () => void;
20
+ export let waitingForContinue: boolean = false;
21
+ export let onContinueTap: () => void;
22
 
23
  // Use the roster passed from parent instead of loading it here
24
  $: availablePiclets = rosterPiclets;
 
32
 
33
  <!-- Action Area -->
34
  <div class="action-area">
35
+ {#if waitingForContinue}
36
+ <!-- Tap to continue overlay -->
37
+ <div class="tap-continue-overlay" on:click={onContinueTap}>
38
+ <div class="tap-indicator">
39
+ <span>Tap to continue</span>
40
+ </div>
41
+ </div>
42
+ {:else if battlePhase === 'main' && !processingTurn && !battleEnded}
43
  <ActionButtons
44
  {isWildBattle}
45
  {playerPiclet}
 
50
  {onAction}
51
  {onMoveSelect}
52
  {onPicletSelect}
53
+ {onBack}
54
  />
55
  {/if}
56
  </div>
src/lib/components/Pages/Battle.svelte CHANGED
@@ -38,6 +38,12 @@
38
  let playerTrainerSlideOut = false;
39
  let enemyTrainerSlideOut = false;
40
 
 
 
 
 
 
 
41
  // HP animation states
42
  let playerHpPercentage = playerPiclet.currentHp / playerPiclet.maxHp;
43
  let enemyHpPercentage = enemyPiclet.currentHp / enemyPiclet.maxHp;
@@ -183,25 +189,9 @@
183
  const filteredLogEntries = newLogEntries.filter(message => !message.includes('fainted'));
184
  const result = { log: filteredLogEntries };
185
 
186
- // Show battle messages with timing and visual effects
187
  if (result.log && result.log.length > 0) {
188
- let messageIndex = 0;
189
- function showNextBattleMessage() {
190
- if (messageIndex < result.log.length) {
191
- const message = result.log[messageIndex];
192
- currentMessage = message;
193
-
194
- // Trigger visual effects based on message content
195
- triggerVisualEffectsFromMessage(message);
196
-
197
- messageIndex++;
198
- setTimeout(showNextBattleMessage, 1500);
199
- } else {
200
- // After all messages, check battle end or continue
201
- finalizeTurn();
202
- }
203
- }
204
- showNextBattleMessage();
205
  } else {
206
  finalizeTurn();
207
  }
@@ -210,12 +200,12 @@
210
  // Update UI state from battle engine
211
  updateUIFromBattleState();
212
 
213
- // Check for battle end - but handle faint message sequence properly
214
  if (battleState.winner) {
215
  battleEnded = true;
216
  const defeatedPiclet = battleState.winner === 'player' ? currentEnemyPiclet : currentPlayerPiclet;
217
 
218
- // First show the faint message and trigger animation
219
  currentMessage = `${defeatedPiclet.nickname} fainted!`;
220
 
221
  // Trigger faint animation for the defeated Piclet
@@ -225,18 +215,10 @@
225
  playerFaint = true;
226
  }
227
 
228
- // Wait for faint message to be displayed, then show win/loss message
229
- setTimeout(() => {
230
- const winMessage = battleState.winner === 'player'
231
- ? 'You won!'
232
- : 'You lost!';
233
- currentMessage = winMessage;
234
-
235
- // Process battle results with XP and level ups
236
- setTimeout(async () => {
237
- await handleBattleResults(battleState.winner === 'player');
238
- }, 1500);
239
- }, 2500); // Increased wait time to ensure faint message is seen
240
  } else {
241
  setTimeout(() => {
242
  currentMessage = `What will ${currentPlayerPiclet.nickname} do?`;
@@ -475,25 +457,9 @@
475
  const filteredLogEntries = newLogEntries.filter(message => !message.includes('fainted'));
476
  const result = { log: filteredLogEntries };
477
 
478
- // Show battle messages with timing and visual effects
479
  if (result.log && result.log.length > 0) {
480
- let messageIndex = 0;
481
- function showNextBattleMessage() {
482
- if (messageIndex < result.log.length) {
483
- const message = result.log[messageIndex];
484
- currentMessage = message;
485
-
486
- // Trigger visual effects based on message content
487
- triggerVisualEffectsFromMessage(message);
488
-
489
- messageIndex++;
490
- setTimeout(showNextBattleMessage, 1500);
491
- } else {
492
- // After all messages, check battle end or continue
493
- finalizeSwitchTurn();
494
- }
495
- }
496
- showNextBattleMessage();
497
  } else {
498
  finalizeSwitchTurn();
499
  }
@@ -502,12 +468,12 @@
502
  // Update UI state from battle engine
503
  updateUIFromBattleState();
504
 
505
- // Check for battle end - but handle faint message sequence properly
506
  if (battleState.winner) {
507
  battleEnded = true;
508
  const defeatedPiclet = battleState.winner === 'player' ? currentEnemyPiclet : currentPlayerPiclet;
509
 
510
- // First show the faint message and trigger animation
511
  currentMessage = `${defeatedPiclet.nickname} fainted!`;
512
 
513
  // Trigger faint animation for the defeated Piclet
@@ -517,18 +483,10 @@
517
  playerFaint = true;
518
  }
519
 
520
- // Wait for faint message to be displayed, then show win/loss message
521
- setTimeout(() => {
522
- const winMessage = battleState.winner === 'player'
523
- ? 'You won!'
524
- : 'You lost!';
525
- currentMessage = winMessage;
526
-
527
- // Process battle results with XP and level ups
528
- setTimeout(async () => {
529
- await handleBattleResults(battleState.winner === 'player');
530
- }, 1500);
531
- }, 2500); // Increased wait time to ensure faint message is seen
532
  } else {
533
  setTimeout(() => {
534
  currentMessage = `What will ${currentPlayerPiclet.nickname} do?`;
 
38
  let playerTrainerSlideOut = false;
39
  let enemyTrainerSlideOut = false;
40
 
41
+ // Message progression system
42
+ let waitingForContinue = false;
43
+ let messageQueue: string[] = [];
44
+ let currentMessageIndex = 0;
45
+ let continueCallback: (() => void) | null = null;
46
+
47
  // HP animation states
48
  let playerHpPercentage = playerPiclet.currentHp / playerPiclet.maxHp;
49
  let enemyHpPercentage = enemyPiclet.currentHp / enemyPiclet.maxHp;
 
189
  const filteredLogEntries = newLogEntries.filter(message => !message.includes('fainted'));
190
  const result = { log: filteredLogEntries };
191
 
192
+ // Show battle messages with tap-to-continue system
193
  if (result.log && result.log.length > 0) {
194
+ showMessageSequence(result.log, finalizeTurn);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  } else {
196
  finalizeTurn();
197
  }
 
200
  // Update UI state from battle engine
201
  updateUIFromBattleState();
202
 
203
+ // Check for battle end - only show faint message
204
  if (battleState.winner) {
205
  battleEnded = true;
206
  const defeatedPiclet = battleState.winner === 'player' ? currentEnemyPiclet : currentPlayerPiclet;
207
 
208
+ // Show the faint message and trigger animation
209
  currentMessage = `${defeatedPiclet.nickname} fainted!`;
210
 
211
  // Trigger faint animation for the defeated Piclet
 
215
  playerFaint = true;
216
  }
217
 
218
+ // Wait for faint message, then process battle results
219
+ setTimeout(async () => {
220
+ await handleBattleResults(battleState.winner === 'player');
221
+ }, 2500); // Wait time for faint message and animation
 
 
 
 
 
 
 
 
222
  } else {
223
  setTimeout(() => {
224
  currentMessage = `What will ${currentPlayerPiclet.nickname} do?`;
 
457
  const filteredLogEntries = newLogEntries.filter(message => !message.includes('fainted'));
458
  const result = { log: filteredLogEntries };
459
 
460
+ // Show battle messages with tap-to-continue system
461
  if (result.log && result.log.length > 0) {
462
+ showMessageSequence(result.log, finalizeSwitchTurn);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
463
  } else {
464
  finalizeSwitchTurn();
465
  }
 
468
  // Update UI state from battle engine
469
  updateUIFromBattleState();
470
 
471
+ // Check for battle end - only show faint message
472
  if (battleState.winner) {
473
  battleEnded = true;
474
  const defeatedPiclet = battleState.winner === 'player' ? currentEnemyPiclet : currentPlayerPiclet;
475
 
476
+ // Show the faint message and trigger animation
477
  currentMessage = `${defeatedPiclet.nickname} fainted!`;
478
 
479
  // Trigger faint animation for the defeated Piclet
 
483
  playerFaint = true;
484
  }
485
 
486
+ // Wait for faint message, then process battle results
487
+ setTimeout(async () => {
488
+ await handleBattleResults(battleState.winner === 'player');
489
+ }, 2500); // Wait time for faint message and animation
 
 
 
 
 
 
 
 
490
  } else {
491
  setTimeout(() => {
492
  currentMessage = `What will ${currentPlayerPiclet.nickname} do?`;