@flare-engine/成绩
类型 AchievementsProvider 接口 + NoopAchievementsProvider +反应上下文,加 createMemoryAchievements 编号 : createStorageAchievements ——本地供应商,拥有定义的解锁/进度合同,用于测试,dev,和单人游戏. 混凝土平台适配器(Game Center,Google Play Games,Steam)是后发射的;在此之前在应用边界自线.
安装
bun add @flare-engine/achievements
使用量
import {
AchievementsContext,
useAchievements,
NoopAchievementsProvider,
} from '@flare-engine/achievements';
export function App() {
return (
<AchievementsContext.Provider value={NoopAchievementsProvider}>
{/* ... */}
</AchievementsContext.Provider>
);
}
useAchievements() 返回活动提供者。 这个 AchievementsProvider 表面为 unlock(id, progress?), (中文(简体) ), getState(id),以及 getAll() - 全都是动脉 进展是局部的 [0, 1] 值; 省略以完全解锁.
本地供应商+解锁合同
createMemoryAchievements() 保持状态为内存; createStorageAchievements(store, opts?) 以注射方式坚持 { get, set } 存储。 两者都拥有相同的合同——语义适配器作者应保留:
import { createStorageAchievements } from '@flare-engine/achievements';
import type { AchievementsStore } from '@flare-engine/achievements';
declare const myStore: AchievementsStore;
const achievements = createStorageAchievements(myStore); // { get, set }
await achievements.unlock('first_blood', 0.5); // progress 0.5
await achievements.unlock('first_blood', 0.2); // ignored — progress stays 0.5
await achievements.unlock('first_blood'); // full unlock, latches
await achievements.getState('first_blood'); // { unlocked: true, progress: 1, unlockedAt }
- 相撞+单音: 进度被锁定到
[0, 1](非无限 )0),永不减少——一个更低要求的值被忽略. unlock(id)完全解锁 (目标进展)1) (中文(简体) ).- 带子 : 实现进展
1套装unlocked: true邮票unlockedAt一次(通过注射)now默认值Date.now) (中文(简体) ). 重新解锁是禁用——原版unlockedAt保留. - 未跟踪的IDs 报告
{ unlocked: false, progress: 0 }。 。 。 .
AchievementsStore 是一个结构 { get(key): Promise<string | null>; set(key, value): Promise<void> } - 那个 get编号 :set 子集为 @flare-engine/storage是因为 StorageAdapter,因此存储提供者不添加依赖性,并与任何 Aync KV (AsyncStorage, MMKV 包装器, a) 合作 localStorage 嘘,... ) 它从水分上懒惰地从 store.get(key) (默认密钥) 'flare.achievements'),在每次突变后持续,而串行会写出这样同时解锁不会丢失更新.
内置后退
在 CI 或 dev 构建中没有平台证书, 请选择 NoopAchievementsProvider (或当地供应商)在您自己的嵌入式旗帜后方,所以在真实的资质存在之前,任何事物都不要触碰本地的SDK.