anaytics
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user