75 lines
3.0 KiB
TypeScript
75 lines
3.0 KiB
TypeScript
import { gameanalytics } from 'gameanalytics';
|
|
|
|
import { AnalyticsTransport } from './AnalyticsTransport';
|
|
|
|
// gameanalytics' type declarations don't expose these enums even though they exist at runtime,
|
|
// so they're mirrored here from the SDK's public values (see GameAnalytics.d.ts EGA* enums).
|
|
const EGAErrorSeverity = { Error: 4 } as const;
|
|
const EGAProgressionStatus = { Start: 1, Complete: 2, Fail: 3 } as const;
|
|
const EGAResourceFlowType = { Source: 1, Sink: 2 } as const;
|
|
|
|
export class GameAnalyticsTransport extends AnalyticsTransport {
|
|
private readonly gameKey: string;
|
|
private readonly gameSecret: string;
|
|
|
|
constructor(gameKey: string, gameSecret: string) {
|
|
super();
|
|
this.gameKey = gameKey;
|
|
this.gameSecret = gameSecret;
|
|
}
|
|
|
|
init(data: {
|
|
version: string,
|
|
resourceTypes: string[],
|
|
resourceCurrencies: string[],
|
|
}) {
|
|
if (import.meta.env.DEV) {
|
|
gameanalytics.GameAnalytics.setEnabledInfoLog(true);
|
|
gameanalytics.GameAnalytics.setEnabledEventSubmission(true);
|
|
}
|
|
gameanalytics.GameAnalytics.configureBuild(data.version);
|
|
gameanalytics.GameAnalytics.configureAvailableResourceCurrencies(data.resourceCurrencies);
|
|
gameanalytics.GameAnalytics.configureAvailableResourceItemTypes(data.resourceTypes);
|
|
// gameanalytics.GameAnalytics.configureAvailableCustomDimensions01(["easy", "normal", "hard"]);
|
|
gameanalytics.GameAnalytics.initialize(this.gameKey, this.gameSecret);
|
|
}
|
|
|
|
ui(data: { event: string, value?: number, [x: string]: unknown }): void {
|
|
this.event({ ...data, event: 'UI:' + data.event });
|
|
}
|
|
|
|
progress(data: { world: string | number, level: string | number, sublevel?: string | number, kind: 'start' | 'complete' | 'fail', score?: number, [x: string]: unknown }): void {
|
|
const { kind, world, level, sublevel, score, ...params } = data;
|
|
gameanalytics.GameAnalytics.addProgressionEvent(
|
|
kind === 'start' ? EGAProgressionStatus.Start : (kind === 'complete' ? EGAProgressionStatus.Complete : EGAProgressionStatus.Fail),
|
|
'' + world,
|
|
'' + level,
|
|
'' + sublevel,
|
|
score,
|
|
params,
|
|
)
|
|
}
|
|
|
|
transaction(data: { resourceType: string, resourceId: string, amount: number, action: 'gain' | 'spend', withCurrency: string, [x: string]: unknown }): void {
|
|
const { resourceType, resourceId, amount, action, withCurrency, ...params } = data;
|
|
gameanalytics.GameAnalytics.addResourceEvent(
|
|
action === 'gain' ? EGAResourceFlowType.Source : EGAResourceFlowType.Sink,
|
|
withCurrency,
|
|
amount,
|
|
resourceType,
|
|
resourceId,
|
|
params,
|
|
)
|
|
}
|
|
|
|
event(data: { event: string, value?: number, [x: string]: unknown }): void {
|
|
const { event, value, ...params } = data;
|
|
gameanalytics.GameAnalytics.addDesignEvent('UI:' + event, value, params);
|
|
}
|
|
|
|
error(data: { severity: 'error', message: string, [x: string]: unknown }): void {
|
|
const { severity, message, ...params } = data;
|
|
gameanalytics.GameAnalytics.addErrorEvent(EGAErrorSeverity.Error, message.slice(0, 8192), params);
|
|
}
|
|
}
|