Skip to content

@web-engine-dev/achievements

Achievement and trophy system for web-engine-dev.

Features

  • Achievement Tracking: Define and track achievements
  • Progress Tracking: Incremental achievements
  • Unlocking: Achievement unlock logic
  • Notifications: Achievement popups
  • Cloud Sync: Sync across devices
  • Statistics: Player stats tracking

Installation

bash
npm install @web-engine-dev/achievements
# or
pnpm add @web-engine-dev/achievements

Quick Start

typescript
import { AchievementSystem, Achievement } from '@web-engine-dev/achievements';

// Create achievement system
const achievements = new AchievementSystem();

// Define achievements
achievements.register({
  id: 'first_blood',
  name: 'First Blood',
  description: 'Defeat your first enemy',
  icon: 'achievements/first_blood.png',
  hidden: false,
});

achievements.register({
  id: 'collector',
  name: 'Collector',
  description: 'Collect 100 coins',
  icon: 'achievements/collector.png',
  progress: { target: 100 },
});

// Unlock achievement
achievements.unlock('first_blood');

// Update progress
achievements.addProgress('collector', 10);

// Listen for unlocks
achievements.on('unlock', (achievement) => {
  showNotification(achievement);
});

API Overview

Achievement Definition

typescript
achievements.register({
  id: 'master',
  name: 'Master',
  description: 'Complete the game on hard mode',
  icon: 'icon.png',
  hidden: true, // Hidden until unlocked
  secret: false, // Show description?
  points: 100, // Gamerscore-like points
  progress: {
    target: 1,
    showProgress: false,
  },
  prerequisites: ['complete_normal'], // Required achievements
});

Tracking Progress

typescript
// Increment progress
achievements.addProgress('kill_enemies', 1);

// Set progress
achievements.setProgress('collect_coins', totalCoins);

// Get progress
const progress = achievements.getProgress('collect_coins');
console.log(`${progress.current}/${progress.target}`);

Checking State

typescript
// Check if unlocked
if (achievements.isUnlocked('first_blood')) {
  // ...
}

// Get all unlocked
const unlocked = achievements.getUnlocked();

// Get all locked
const locked = achievements.getLocked();

// Get all achievements
const all = achievements.getAll();

Statistics

typescript
// Set stat
achievements.setStat('total_kills', kills);

// Increment stat
achievements.addStat('games_played', 1);

// Get stat
const stat = achievements.getStat('total_kills');

// Stat-based achievements
achievements.register({
  id: 'veteran',
  name: 'Veteran',
  stat: 'games_played',
  statValue: 100,
});

Events

typescript
achievements.on('unlock', (achievement) => {
  showUnlockNotification(achievement);
  playUnlockSound();
});

achievements.on('progress', (achievement, progress) => {
  if (progress.percentage >= 0.5) {
    showProgressNotification(achievement, progress);
  }
});

Proprietary software. All rights reserved.