mirror of
https://github.com/MartinKral/Slash-The-Hordes
synced 2024-12-25 11:18:54 +00:00
Added analytics
This commit is contained in:
parent
7d5eac78fb
commit
8c2ff5a7a2
@ -23,16 +23,19 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 14
|
"__id__": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 70
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 70
|
"__id__": 78
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": {
|
"_prefab": {
|
||||||
"__id__": 72
|
"__id__": 80
|
||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
@ -1488,6 +1491,117 @@
|
|||||||
},
|
},
|
||||||
"fileId": "f6cwwQmx9G2qaYOpNATP9o"
|
"fileId": "f6cwwQmx9G2qaYOpNATP9o"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Node",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"_parent": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_prefab": {
|
||||||
|
"__id__": 71
|
||||||
|
},
|
||||||
|
"__editorExtras__": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.PrefabInfo",
|
||||||
|
"root": {
|
||||||
|
"__id__": 70
|
||||||
|
},
|
||||||
|
"asset": {
|
||||||
|
"__uuid__": "f668086a-2bff-40eb-a029-dd891718441d",
|
||||||
|
"__expectedType__": "cc.Prefab"
|
||||||
|
},
|
||||||
|
"fileId": "5da9o8mwlJl5XD861jGbYx",
|
||||||
|
"instance": {
|
||||||
|
"__id__": 72
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.PrefabInstance",
|
||||||
|
"fileId": "56Xvr+wxdEcqGuJ2/9Drtp",
|
||||||
|
"prefabRootNode": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"mountedChildren": [],
|
||||||
|
"mountedComponents": [],
|
||||||
|
"propertyOverrides": [
|
||||||
|
{
|
||||||
|
"__id__": 73
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 75
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 76
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 77
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"removedComponents": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "CCPropertyOverrideInfo",
|
||||||
|
"targetInfo": {
|
||||||
|
"__id__": 74
|
||||||
|
},
|
||||||
|
"propertyPath": [
|
||||||
|
"_name"
|
||||||
|
],
|
||||||
|
"value": "Y8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.TargetInfo",
|
||||||
|
"localID": [
|
||||||
|
"5da9o8mwlJl5XD861jGbYx"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "CCPropertyOverrideInfo",
|
||||||
|
"targetInfo": {
|
||||||
|
"__id__": 74
|
||||||
|
},
|
||||||
|
"propertyPath": [
|
||||||
|
"_lpos"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"__type__": "cc.Vec3",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"z": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "CCPropertyOverrideInfo",
|
||||||
|
"targetInfo": {
|
||||||
|
"__id__": 74
|
||||||
|
},
|
||||||
|
"propertyPath": [
|
||||||
|
"_lrot"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"__type__": "cc.Quat",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"z": 0,
|
||||||
|
"w": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "CCPropertyOverrideInfo",
|
||||||
|
"targetInfo": {
|
||||||
|
"__id__": 74
|
||||||
|
},
|
||||||
|
"propertyPath": [
|
||||||
|
"_euler"
|
||||||
|
],
|
||||||
|
"value": {
|
||||||
|
"__type__": "cc.Vec3",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"z": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"__type__": "4943dSvt9FBvLizJ1HhFOzg",
|
"__type__": "4943dSvt9FBvLizJ1HhFOzg",
|
||||||
"_name": "",
|
"_name": "",
|
||||||
@ -1497,7 +1611,7 @@
|
|||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 71
|
"__id__": 79
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"__id__": 11
|
"__id__": 11
|
||||||
@ -1523,6 +1637,7 @@
|
|||||||
"screenFader": {
|
"screenFader": {
|
||||||
"__id__": 55
|
"__id__": 55
|
||||||
},
|
},
|
||||||
|
"y8": null,
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1537,6 +1652,38 @@
|
|||||||
"asset": {
|
"asset": {
|
||||||
"__id__": 0
|
"__id__": 0
|
||||||
},
|
},
|
||||||
"fileId": "f6TS0IBq9EGpNVBB7WXcF6"
|
"fileId": "f6TS0IBq9EGpNVBB7WXcF6",
|
||||||
|
"targetOverrides": [
|
||||||
|
{
|
||||||
|
"__id__": 81
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nestedPrefabInstanceRoots": [
|
||||||
|
{
|
||||||
|
"__id__": 70
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.TargetOverrideInfo",
|
||||||
|
"source": {
|
||||||
|
"__id__": 78
|
||||||
|
},
|
||||||
|
"sourceInfo": null,
|
||||||
|
"propertyPath": [
|
||||||
|
"y8"
|
||||||
|
],
|
||||||
|
"target": {
|
||||||
|
"__id__": 70
|
||||||
|
},
|
||||||
|
"targetInfo": {
|
||||||
|
"__id__": 82
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.TargetInfo",
|
||||||
|
"localID": [
|
||||||
|
"9cOBr9gAFNWbvsaSX5dfaa"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
44
assets/Scripts/AppRoot/Analytics.ts
Normal file
44
assets/Scripts/AppRoot/Analytics.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import { Y8 } from "../../Plugins/Y8/Scripts/Y8";
|
||||||
|
|
||||||
|
export class Analytics {
|
||||||
|
private totalTime = 0;
|
||||||
|
private minutesInGame = -1; // Track the 0 minute as well
|
||||||
|
private gamesPerSession = 0;
|
||||||
|
|
||||||
|
public constructor(private y8: Y8) {}
|
||||||
|
|
||||||
|
public update(deltaTime: number): void {
|
||||||
|
this.totalTime += deltaTime;
|
||||||
|
this.trySendTotalTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
public gameStart(): void {
|
||||||
|
this.y8.sendCustomEvent(EventName.GAMES_PER_SESSION, ++this.gamesPerSession);
|
||||||
|
}
|
||||||
|
|
||||||
|
public gameEnd(time: number): void {
|
||||||
|
this.y8.sendCustomEvent(EventName.GAME_TIME, Math.floor(time));
|
||||||
|
}
|
||||||
|
|
||||||
|
public gameExit(time: number): void {
|
||||||
|
this.y8.sendCustomEvent(EventName.GAME_EXIT, Math.floor(time));
|
||||||
|
}
|
||||||
|
|
||||||
|
public goldPerRun(goldEarned: number): void {
|
||||||
|
this.y8.sendCustomEvent(EventName.GOLD_PER_RUN, Math.floor(goldEarned));
|
||||||
|
}
|
||||||
|
|
||||||
|
private trySendTotalTime(): void {
|
||||||
|
if (this.minutesInGame < Math.floor(this.totalTime / 60)) {
|
||||||
|
this.y8.sendCustomEvent(EventName.TOTAL_TIME, ++this.minutesInGame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum EventName {
|
||||||
|
TOTAL_TIME = "Minutes_total",
|
||||||
|
GOLD_PER_RUN = "Gold_per_run",
|
||||||
|
GAMES_PER_SESSION = "Games_per_session",
|
||||||
|
GAME_TIME = "Game_time_seconds",
|
||||||
|
GAME_EXIT = "Game_exit"
|
||||||
|
}
|
9
assets/Scripts/AppRoot/Analytics.ts.meta
Normal file
9
assets/Scripts/AppRoot/Analytics.ts.meta
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.23",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "58a3e586-6c96-4f84-8682-7a73b1b72b9f",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
@ -7,6 +7,8 @@ import { AudioPlayer } from "../Services/AudioPlayer/AudioPlayer";
|
|||||||
import { SaveSystem } from "./SaveSystem";
|
import { SaveSystem } from "./SaveSystem";
|
||||||
import { ModalWindowManager } from "../Services/ModalWindowSystem/ModalWindowManager";
|
import { ModalWindowManager } from "../Services/ModalWindowSystem/ModalWindowManager";
|
||||||
import { OpenCloseAnimator } from "../Utils/OpenCloseAnimator";
|
import { OpenCloseAnimator } from "../Utils/OpenCloseAnimator";
|
||||||
|
import { Y8 } from "../../Plugins/Y8/Scripts/Y8";
|
||||||
|
import { Analytics } from "./Analytics";
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass("AppRoot")
|
@ccclass("AppRoot")
|
||||||
@ -18,12 +20,14 @@ export class AppRoot extends Component {
|
|||||||
@property(Camera) private mainCamera: Camera;
|
@property(Camera) private mainCamera: Camera;
|
||||||
@property(ModalWindowManager) private modalWindowManager: ModalWindowManager;
|
@property(ModalWindowManager) private modalWindowManager: ModalWindowManager;
|
||||||
@property(OpenCloseAnimator) private screenFader: OpenCloseAnimator;
|
@property(OpenCloseAnimator) private screenFader: OpenCloseAnimator;
|
||||||
|
@property(Y8) private y8: Y8;
|
||||||
|
|
||||||
private static instance: AppRoot;
|
private static instance: AppRoot;
|
||||||
private saveSystem: SaveSystem;
|
private saveSystem: SaveSystem;
|
||||||
|
|
||||||
private liveUserData: UserData;
|
private liveUserData: UserData;
|
||||||
private gameAssets: GameAssets;
|
private gameAssets: GameAssets;
|
||||||
|
private analytics: Analytics;
|
||||||
|
|
||||||
public static get Instance(): AppRoot {
|
public static get Instance(): AppRoot {
|
||||||
return this.instance;
|
return this.instance;
|
||||||
@ -61,6 +65,14 @@ export class AppRoot extends Component {
|
|||||||
return this.screenFader;
|
return this.screenFader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get Y8(): Y8 {
|
||||||
|
return this.y8;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get Analytics(): Analytics {
|
||||||
|
return this.analytics;
|
||||||
|
}
|
||||||
|
|
||||||
public saveUserData(): void {
|
public saveUserData(): void {
|
||||||
this.saveSystem.save(this.liveUserData);
|
this.saveSystem.save(this.liveUserData);
|
||||||
}
|
}
|
||||||
@ -75,7 +87,11 @@ export class AppRoot extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private init(): void {
|
public update(deltaTime: number): void {
|
||||||
|
if (this.analytics) this.analytics.update(deltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async init(): Promise<void> {
|
||||||
this.saveSystem = new SaveSystem();
|
this.saveSystem = new SaveSystem();
|
||||||
this.liveUserData = this.saveSystem.load();
|
this.liveUserData = this.saveSystem.load();
|
||||||
|
|
||||||
@ -88,5 +104,9 @@ export class AppRoot extends Component {
|
|||||||
|
|
||||||
this.screenFader.init();
|
this.screenFader.init();
|
||||||
this.screenFader.node.active = false;
|
this.screenFader.node.active = false;
|
||||||
|
|
||||||
|
await this.y8.init();
|
||||||
|
|
||||||
|
this.analytics = new Analytics(this.y8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Canvas, Component, KeyCode, Vec2, _decorator, Node } from "cc";
|
import { Canvas, Component, KeyCode, Vec2, _decorator, Node, approx } from "cc";
|
||||||
import { AppRoot } from "../AppRoot/AppRoot";
|
import { AppRoot } from "../AppRoot/AppRoot";
|
||||||
import { requireAppRootAsync } from "../AppRoot/AppRootUtils";
|
import { requireAppRootAsync } from "../AppRoot/AppRootUtils";
|
||||||
import { delay } from "../Services/Utils/AsyncUtils";
|
import { delay } from "../Services/Utils/AsyncUtils";
|
||||||
@ -81,6 +81,8 @@ export class Game extends Component {
|
|||||||
public async play(userData: UserData, settings: GameSettings, translationData: TranslationData, testValues?: TestValues): Promise<GameResult> {
|
public async play(userData: UserData, settings: GameSettings, translationData: TranslationData, testValues?: TestValues): Promise<GameResult> {
|
||||||
await this.setup(userData, settings, translationData, testValues);
|
await this.setup(userData, settings, translationData, testValues);
|
||||||
|
|
||||||
|
AppRoot.Instance.Analytics.gameStart();
|
||||||
|
|
||||||
this.gamePauser.resume();
|
this.gamePauser.resume();
|
||||||
this.blackScreen.active = false;
|
this.blackScreen.active = false;
|
||||||
AppRoot.Instance.ScreenFader.playClose();
|
AppRoot.Instance.ScreenFader.playClose();
|
||||||
@ -92,7 +94,12 @@ export class Game extends Component {
|
|||||||
this.gameResult.score = this.timeAlive;
|
this.gameResult.score = this.timeAlive;
|
||||||
|
|
||||||
if (!this.gameResult.hasExitManually) {
|
if (!this.gameResult.hasExitManually) {
|
||||||
|
AppRoot.Instance.Analytics.goldPerRun(this.gameResult.goldCoins);
|
||||||
|
AppRoot.Instance.Analytics.gameEnd(this.gameResult.score);
|
||||||
|
|
||||||
await delay(2000);
|
await delay(2000);
|
||||||
|
} else {
|
||||||
|
AppRoot.Instance.Analytics.gameExit(this.timeAlive);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.gameResult;
|
return this.gameResult;
|
||||||
|
Loading…
Reference in New Issue
Block a user