Fraser commited on
Commit
bba35f8
·
1 Parent(s): c4f956e
src/lib/components/Battle/BattleField.svelte CHANGED
@@ -28,7 +28,7 @@
28
 
29
  setTimeout(() => {
30
  playerVisible = true;
31
- }, 1500);
32
  } else {
33
  // Skip intro
34
  playerVisible = true;
@@ -49,7 +49,7 @@
49
  <div class="battle-content">
50
  <!-- Enemy Row -->
51
  <div class="enemy-row">
52
- <div class="enemy-stack">
53
  <PicletInfo
54
  piclet={enemyPiclet}
55
  hpPercentage={enemyHpPercentage}
@@ -58,7 +58,7 @@
58
  />
59
 
60
  {#if enemyVisible}
61
- <div class="enemy-piclet-wrapper" transition:fade={{ duration: 300 }}>
62
  <img
63
  class="piclet-image enemy-image"
64
  src={enemyPiclet.imageData || enemyPiclet.imageUrl}
@@ -84,9 +84,9 @@
84
 
85
  <!-- Player Row -->
86
  <div class="player-row">
87
- <div class="player-stack">
88
  {#if playerVisible}
89
- <div class="player-piclet-wrapper" transition:fade={{ duration: 300 }}>
90
  <img
91
  class="piclet-image player-image"
92
  src={playerPiclet.imageData || playerPiclet.imageUrl}
@@ -142,6 +142,19 @@
142
  .trainer-intro img {
143
  width: 200px;
144
  height: auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  }
146
 
147
  .battle-content {
@@ -255,6 +268,82 @@
255
  flex: 1;
256
  }
257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
  @media (max-width: 768px) {
259
  .enemy-image {
260
  width: 100px;
 
28
 
29
  setTimeout(() => {
30
  playerVisible = true;
31
+ }, 1000);
32
  } else {
33
  // Skip intro
34
  playerVisible = true;
 
49
  <div class="battle-content">
50
  <!-- Enemy Row -->
51
  <div class="enemy-row">
52
+ <div class="enemy-stack" class:intro-animations={showIntro}>
53
  <PicletInfo
54
  piclet={enemyPiclet}
55
  hpPercentage={enemyHpPercentage}
 
58
  />
59
 
60
  {#if enemyVisible}
61
+ <div class="enemy-piclet-wrapper" class:animate-in={showIntro}>
62
  <img
63
  class="piclet-image enemy-image"
64
  src={enemyPiclet.imageData || enemyPiclet.imageUrl}
 
84
 
85
  <!-- Player Row -->
86
  <div class="player-row">
87
+ <div class="player-stack" class:intro-animations={showIntro}>
88
  {#if playerVisible}
89
+ <div class="player-piclet-wrapper" class:animate-in={showIntro}>
90
  <img
91
  class="piclet-image player-image"
92
  src={playerPiclet.imageData || playerPiclet.imageUrl}
 
142
  .trainer-intro img {
143
  width: 200px;
144
  height: auto;
145
+ animation: trainerPulse 0.5s ease-in-out;
146
+ }
147
+
148
+ @keyframes trainerPulse {
149
+ 0% {
150
+ transform: scale(1);
151
+ }
152
+ 50% {
153
+ transform: scale(1.05);
154
+ }
155
+ 100% {
156
+ transform: scale(1);
157
+ }
158
  }
159
 
160
  .battle-content {
 
268
  flex: 1;
269
  }
270
 
271
+ /* Animations */
272
+ .enemy-piclet-wrapper {
273
+ animation-fill-mode: both;
274
+ }
275
+
276
+ .enemy-piclet-wrapper.animate-in {
277
+ animation: enemySlideIn 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
278
+ }
279
+
280
+ .player-piclet-wrapper {
281
+ animation-fill-mode: both;
282
+ }
283
+
284
+ .player-piclet-wrapper.animate-in {
285
+ animation: playerSlideIn 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
286
+ }
287
+
288
+ @keyframes enemySlideIn {
289
+ 0% {
290
+ transform: translateX(150px) translateY(-50px) scale(1.5);
291
+ opacity: 0;
292
+ }
293
+ 50% {
294
+ opacity: 1;
295
+ }
296
+ 100% {
297
+ transform: translateX(0) translateY(0) scale(1);
298
+ opacity: 1;
299
+ }
300
+ }
301
+
302
+ @keyframes playerSlideIn {
303
+ 0% {
304
+ transform: translateX(-150px) translateY(50px) scale(0.5);
305
+ opacity: 0;
306
+ }
307
+ 50% {
308
+ opacity: 1;
309
+ }
310
+ 100% {
311
+ transform: translateX(0) translateY(0) scale(1);
312
+ opacity: 1;
313
+ }
314
+ }
315
+
316
+ /* Info box animations */
317
+ .enemy-stack.intro-animations :global(.piclet-info-wrapper) {
318
+ animation: fadeSlideDown 0.5s ease-out 0.3s both;
319
+ }
320
+
321
+ .player-stack.intro-animations :global(.piclet-info-wrapper) {
322
+ animation: fadeSlideUp 0.5s ease-out 0.3s both;
323
+ }
324
+
325
+ @keyframes fadeSlideDown {
326
+ 0% {
327
+ opacity: 0;
328
+ transform: translateY(-20px);
329
+ }
330
+ 100% {
331
+ opacity: 1;
332
+ transform: translateY(0);
333
+ }
334
+ }
335
+
336
+ @keyframes fadeSlideUp {
337
+ 0% {
338
+ opacity: 0;
339
+ transform: translateY(20px);
340
+ }
341
+ 100% {
342
+ opacity: 1;
343
+ transform: translateY(0);
344
+ }
345
+ }
346
+
347
  @media (max-width: 768px) {
348
  .enemy-image {
349
  width: 100px;