better anim
Browse files
src/lib/components/Battle/BattleField.svelte
CHANGED
@@ -41,33 +41,19 @@
|
|
41 |
const playerXpPercentage = (playerPiclet.xp / 100) * 100; // Simplified, should use actual XP curve
|
42 |
|
43 |
onMount(() => {
|
44 |
-
if (showIntro) {
|
45 |
-
//
|
46 |
-
setTimeout(() => {
|
47 |
-
if (!isWildBattle) {
|
48 |
-
enemyTrainerVisible = true;
|
49 |
-
} else {
|
50 |
-
enemyVisible = true;
|
51 |
-
}
|
52 |
-
}, 100);
|
53 |
-
|
54 |
-
setTimeout(() => {
|
55 |
-
if (!isWildBattle) {
|
56 |
-
playerTrainerVisible = true;
|
57 |
-
} else {
|
58 |
-
playerTrainerVisible = true; // Show player trainer even in wild battles
|
59 |
-
}
|
60 |
-
}, 200);
|
61 |
-
} else {
|
62 |
-
// Skip intro
|
63 |
playerVisible = true;
|
64 |
enemyVisible = true;
|
65 |
}
|
|
|
66 |
});
|
67 |
|
68 |
// Watch for trainer slide-out triggers
|
69 |
$: if (playerTrainerSlideOut && !playerTrainerSliding) {
|
70 |
playerTrainerSliding = true;
|
|
|
|
|
71 |
setTimeout(() => {
|
72 |
playerTrainerVisible = false;
|
73 |
// Trigger white flash then show player monster
|
@@ -81,6 +67,8 @@
|
|
81 |
|
82 |
$: if (enemyTrainerSlideOut && !enemyTrainerSliding) {
|
83 |
enemyTrainerSliding = true;
|
|
|
|
|
84 |
setTimeout(() => {
|
85 |
enemyTrainerVisible = false;
|
86 |
// Trigger white flash then show enemy monster
|
|
|
41 |
const playerXpPercentage = (playerPiclet.xp / 100) * 100; // Simplified, should use actual XP curve
|
42 |
|
43 |
onMount(() => {
|
44 |
+
if (!showIntro) {
|
45 |
+
// Skip intro - show everything immediately
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
playerVisible = true;
|
47 |
enemyVisible = true;
|
48 |
}
|
49 |
+
// For intro mode, trainers will be shown when slide-out is triggered
|
50 |
});
|
51 |
|
52 |
// Watch for trainer slide-out triggers
|
53 |
$: if (playerTrainerSlideOut && !playerTrainerSliding) {
|
54 |
playerTrainerSliding = true;
|
55 |
+
// Show trainer briefly, then slide out
|
56 |
+
playerTrainerVisible = true;
|
57 |
setTimeout(() => {
|
58 |
playerTrainerVisible = false;
|
59 |
// Trigger white flash then show player monster
|
|
|
67 |
|
68 |
$: if (enemyTrainerSlideOut && !enemyTrainerSliding) {
|
69 |
enemyTrainerSliding = true;
|
70 |
+
// Show trainer briefly, then slide out
|
71 |
+
enemyTrainerVisible = true;
|
72 |
setTimeout(() => {
|
73 |
enemyTrainerVisible = false;
|
74 |
// Trigger white flash then show enemy monster
|
src/lib/components/Pages/Battle.svelte
CHANGED
@@ -261,7 +261,7 @@
|
|
261 |
const playerName = stripBattlePrefix(battleState?.playerPiclet?.definition?.name || '');
|
262 |
const enemyName = stripBattlePrefix(battleState?.opponentPiclet?.definition?.name || '');
|
263 |
|
264 |
-
// Attack lunge effects - trigger when a Piclet uses a move
|
265 |
if (message.includes(' used ')) {
|
266 |
if (message.includes(playerName)) {
|
267 |
triggerLungeAnimation('player');
|
@@ -270,7 +270,7 @@
|
|
270 |
}
|
271 |
}
|
272 |
|
273 |
-
// Damage effects
|
274 |
if (message.includes('took') && message.includes('damage')) {
|
275 |
if (message.includes(playerName)) {
|
276 |
triggerDamageFlash('player');
|
@@ -402,17 +402,19 @@
|
|
402 |
currentMessageIndex = 0;
|
403 |
continueCallback = callback;
|
404 |
|
405 |
-
// Show first message
|
406 |
currentMessage = messageQueue[0];
|
407 |
waitingForContinue = true;
|
|
|
|
|
|
|
|
|
|
|
408 |
}
|
409 |
|
410 |
function handleContinueTap() {
|
411 |
if (!waitingForContinue || !messageQueue.length) return;
|
412 |
|
413 |
-
// Trigger visual effects for current message
|
414 |
-
triggerVisualEffectsFromMessage(currentMessage);
|
415 |
-
|
416 |
currentMessageIndex++;
|
417 |
|
418 |
if (currentMessageIndex >= messageQueue.length) {
|
@@ -428,6 +430,11 @@
|
|
428 |
} else {
|
429 |
// Show next message
|
430 |
currentMessage = messageQueue[currentMessageIndex];
|
|
|
|
|
|
|
|
|
|
|
431 |
}
|
432 |
}
|
433 |
|
|
|
261 |
const playerName = stripBattlePrefix(battleState?.playerPiclet?.definition?.name || '');
|
262 |
const enemyName = stripBattlePrefix(battleState?.opponentPiclet?.definition?.name || '');
|
263 |
|
264 |
+
// Attack lunge effects - trigger immediately when a Piclet uses a move
|
265 |
if (message.includes(' used ')) {
|
266 |
if (message.includes(playerName)) {
|
267 |
triggerLungeAnimation('player');
|
|
|
270 |
}
|
271 |
}
|
272 |
|
273 |
+
// Damage flash effects - trigger when damage is taken
|
274 |
if (message.includes('took') && message.includes('damage')) {
|
275 |
if (message.includes(playerName)) {
|
276 |
triggerDamageFlash('player');
|
|
|
402 |
currentMessageIndex = 0;
|
403 |
continueCallback = callback;
|
404 |
|
405 |
+
// Show first message and trigger its effects
|
406 |
currentMessage = messageQueue[0];
|
407 |
waitingForContinue = true;
|
408 |
+
|
409 |
+
// Trigger visual effects automatically after text appears (with small delay for text animation)
|
410 |
+
setTimeout(() => {
|
411 |
+
triggerVisualEffectsFromMessage(currentMessage);
|
412 |
+
}, 500); // Allow time for typewriter text to complete
|
413 |
}
|
414 |
|
415 |
function handleContinueTap() {
|
416 |
if (!waitingForContinue || !messageQueue.length) return;
|
417 |
|
|
|
|
|
|
|
418 |
currentMessageIndex++;
|
419 |
|
420 |
if (currentMessageIndex >= messageQueue.length) {
|
|
|
430 |
} else {
|
431 |
// Show next message
|
432 |
currentMessage = messageQueue[currentMessageIndex];
|
433 |
+
|
434 |
+
// Trigger visual effects automatically after text appears
|
435 |
+
setTimeout(() => {
|
436 |
+
triggerVisualEffectsFromMessage(currentMessage);
|
437 |
+
}, 500); // Allow time for typewriter text to complete
|
438 |
}
|
439 |
}
|
440 |
|