Fraser commited on
Commit
5816acb
·
1 Parent(s): d5e2d02
src/lib/components/Pages/Encounters.svelte CHANGED
@@ -60,11 +60,11 @@
60
  }
61
 
62
  async function loadPicletImages() {
63
- const wildEncounters = encounters.filter(e =>
64
- e.type === EncounterType.WILD_PICLET && e.picletTypeId
65
  );
66
 
67
- for (const encounter of wildEncounters) {
68
  if (!encounter.picletTypeId) continue;
69
 
70
  // Find a piclet instance with this typeId
@@ -103,7 +103,10 @@
103
  }
104
 
105
  async function handleEncounterTap(encounter: Encounter) {
106
- if (encounter.type === EncounterType.WILD_PICLET && encounter.picletTypeId) {
 
 
 
107
  // Regular wild encounter - start battle
108
  await startBattle(encounter);
109
  } else if (encounter.type === EncounterType.SHOP) {
@@ -136,6 +139,45 @@
136
  console.error('Error at health center:', error);
137
  }
138
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  async function forceEncounterRefresh() {
141
  isRefreshing = true;
@@ -157,6 +199,8 @@
157
  return '❤️';
158
  case EncounterType.TRAINER_BATTLE:
159
  return '🏆';
 
 
160
  case EncounterType.WILD_PICLET:
161
  default:
162
  return '⚔️';
@@ -167,6 +211,8 @@
167
  switch (encounter.type) {
168
  case EncounterType.WILD_PICLET:
169
  return '#4caf50';
 
 
170
  case EncounterType.TRAINER_BATTLE:
171
  return '#ff9800';
172
  case EncounterType.SHOP:
@@ -335,11 +381,11 @@
335
  disabled={isRefreshing}
336
  >
337
  <div class="encounter-icon">
338
- {#if encounter.type === EncounterType.WILD_PICLET && encounter.picletTypeId}
339
  {#if monsterImages.has(encounter.picletTypeId)}
340
  <img
341
  src={monsterImages.get(encounter.picletTypeId)}
342
- alt="Wild Piclet"
343
  />
344
  {:else}
345
  <div class="fallback-icon">{getEncounterIcon(encounter)}</div>
 
60
  }
61
 
62
  async function loadPicletImages() {
63
+ const picletEncounters = encounters.filter(e =>
64
+ (e.type === EncounterType.WILD_PICLET || e.type === EncounterType.FIRST_PICLET) && e.picletTypeId
65
  );
66
 
67
+ for (const encounter of picletEncounters) {
68
  if (!encounter.picletTypeId) continue;
69
 
70
  // Find a piclet instance with this typeId
 
103
  }
104
 
105
  async function handleEncounterTap(encounter: Encounter) {
106
+ if (encounter.type === EncounterType.FIRST_PICLET) {
107
+ // First piclet encounter - direct catch
108
+ await handleFirstPicletEncounter(encounter);
109
+ } else if (encounter.type === EncounterType.WILD_PICLET && encounter.picletTypeId) {
110
  // Regular wild encounter - start battle
111
  await startBattle(encounter);
112
  } else if (encounter.type === EncounterType.SHOP) {
 
139
  console.error('Error at health center:', error);
140
  }
141
  }
142
+
143
+ async function handleFirstPicletEncounter(encounter: Encounter) {
144
+ try {
145
+ if (!encounter.picletInstanceId) {
146
+ throw new Error('No piclet instance specified for first piclet encounter');
147
+ }
148
+
149
+ // Get the specific piclet instance
150
+ const picletInstance = await db.picletInstances.get(encounter.picletInstanceId);
151
+ if (!picletInstance) {
152
+ throw new Error('Piclet instance not found');
153
+ }
154
+
155
+ // Mark the piclet as caught and set it as the first roster piclet
156
+ await db.picletInstances.update(encounter.picletInstanceId, {
157
+ caught: true,
158
+ caughtAt: new Date(),
159
+ isInRoster: true,
160
+ rosterPosition: 0
161
+ });
162
+
163
+ // Get the updated piclet instance
164
+ const caughtPiclet = await db.picletInstances.get(encounter.picletInstanceId);
165
+
166
+ // Show the newly caught piclet detail page
167
+ newlyCaughtPiclet = caughtPiclet!;
168
+ showNewlyCaught = true;
169
+
170
+ // Update counters and progress
171
+ incrementCounter('picletsCapured');
172
+ addProgressPoints(100);
173
+
174
+ // Force refresh encounters to remove the first piclet encounter
175
+ await forceEncounterRefresh();
176
+ } catch (error) {
177
+ console.error('Error handling first piclet encounter:', error);
178
+ alert('Something went wrong. Please try again.');
179
+ }
180
+ }
181
 
182
  async function forceEncounterRefresh() {
183
  isRefreshing = true;
 
199
  return '❤️';
200
  case EncounterType.TRAINER_BATTLE:
201
  return '🏆';
202
+ case EncounterType.FIRST_PICLET:
203
+ return '✨';
204
  case EncounterType.WILD_PICLET:
205
  default:
206
  return '⚔️';
 
211
  switch (encounter.type) {
212
  case EncounterType.WILD_PICLET:
213
  return '#4caf50';
214
+ case EncounterType.FIRST_PICLET:
215
+ return '#ffd700';
216
  case EncounterType.TRAINER_BATTLE:
217
  return '#ff9800';
218
  case EncounterType.SHOP:
 
381
  disabled={isRefreshing}
382
  >
383
  <div class="encounter-icon">
384
+ {#if (encounter.type === EncounterType.WILD_PICLET || encounter.type === EncounterType.FIRST_PICLET) && encounter.picletTypeId}
385
  {#if monsterImages.has(encounter.picletTypeId)}
386
  <img
387
  src={monsterImages.get(encounter.picletTypeId)}
388
+ alt="Piclet"
389
  />
390
  {:else}
391
  <div class="fallback-icon">{getEncounterIcon(encounter)}</div>
src/lib/db/encounterService.ts CHANGED
@@ -112,9 +112,10 @@ export class EncounterService {
112
  const displayName = latestPiclet.nickname || latestPiclet.typeId.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
113
 
114
  return {
115
- type: EncounterType.WILD_PICLET,
116
  title: 'Your First Piclet!',
117
  description: `A friendly ${displayName} appears! This one seems easy to catch.`,
 
118
  picletTypeId: latestPiclet.typeId,
119
  enemyLevel: 5, // Easy level for first encounter
120
  createdAt: new Date()
 
112
  const displayName = latestPiclet.nickname || latestPiclet.typeId.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
113
 
114
  return {
115
+ type: EncounterType.FIRST_PICLET,
116
  title: 'Your First Piclet!',
117
  description: `A friendly ${displayName} appears! This one seems easy to catch.`,
118
+ picletInstanceId: latestPiclet.id, // Reference to the specific piclet instance
119
  picletTypeId: latestPiclet.typeId,
120
  enemyLevel: 5, // Easy level for first encounter
121
  createdAt: new Date()