|
3 | 3 | import com.csse3200.game.components.deck.*; |
4 | 4 | import com.csse3200.game.entities.configs.*; |
5 | 5 | import com.csse3200.game.files.FileLoader; |
| 6 | +import com.csse3200.game.services.AchievementService; |
| 7 | +import com.csse3200.game.services.ServiceLocator; |
6 | 8 | import org.slf4j.Logger; |
7 | 9 | import org.slf4j.LoggerFactory; |
8 | 10 |
|
@@ -177,6 +179,70 @@ private static List<DeckComponent> createDecks() { |
177 | 179 | } |
178 | 180 | } |
179 | 181 |
|
| 182 | + /** |
| 183 | + * A book component containing achievement decks. |
| 184 | + */ |
| 185 | + public static class AchievementBookComponent extends BookComponent { |
| 186 | + /** Constructs an achievement book component with all achievements. */ |
| 187 | + public AchievementBookComponent() { |
| 188 | + super("ACHIEVEMENTS", createDecks()); |
| 189 | + } |
| 190 | + |
| 191 | + /** |
| 192 | + * Creates a list of achievement deck components. |
| 193 | + * |
| 194 | + * @return a list of {@link DeckComponent} for all achievements |
| 195 | + */ |
| 196 | + private static List<DeckComponent> createDecks() { |
| 197 | + List<DeckComponent> decks = new ArrayList<>(); |
| 198 | + |
| 199 | + // Get achievement service |
| 200 | + AchievementService achievementService = ServiceLocator.getAchievementService(); |
| 201 | + |
| 202 | + // Achievement definitions with descriptions and images |
| 203 | + addAchievement(decks, achievementService, |
| 204 | + AchievementService.TOUGH_SURVIVOR, |
| 205 | + "Tough Survivor", |
| 206 | + "Survive with minimal damage and prove your resilience.", |
| 207 | + "images/tough survivor.jpg"); |
| 208 | + |
| 209 | + addAchievement(decks, achievementService, |
| 210 | + AchievementService.SPEED_RUNNER, |
| 211 | + "Speed Runner", |
| 212 | + "Complete the level in record time.", |
| 213 | + "images/speed runner.jpg"); |
| 214 | + |
| 215 | + addAchievement(decks, achievementService, |
| 216 | + AchievementService.SLAYER, |
| 217 | + "Slayer", |
| 218 | + "Defeat a massive number of enemies.", |
| 219 | + "images/slayer.jpg"); |
| 220 | + |
| 221 | + addAchievement(decks, achievementService, |
| 222 | + AchievementService.PERFECT_CLEAR, |
| 223 | + "Perfect Clear", |
| 224 | + "Complete a level without taking any damage.", |
| 225 | + "images/perfect clear.jpg"); |
| 226 | + |
| 227 | + addAchievement(decks, achievementService, |
| 228 | + AchievementService.PARTICIPATION, |
| 229 | + "Participation", |
| 230 | + "Join the game and start your journey.", |
| 231 | + "images/participation.jpg"); |
| 232 | + |
| 233 | + return decks; |
| 234 | + } |
| 235 | + |
| 236 | + /** |
| 237 | + * Helper method to add an achievement deck to the list. |
| 238 | + */ |
| 239 | + private static void addAchievement(List<DeckComponent> decks, AchievementService service, |
| 240 | + String achievementId, String name, String description, String image) { |
| 241 | + boolean locked = service == null || !service.isUnlocked(achievementId); |
| 242 | + decks.add(new AchievementBookDeckComponent(name, description, image, locked)); |
| 243 | + } |
| 244 | + } |
| 245 | + |
180 | 246 | public static class HeroBookComponent extends BookComponent { |
181 | 247 | public HeroBookComponent() { |
182 | 248 | super("HEROES", createDecks()); |
|
0 commit comments