MBHaxe/src/Analytics.hx
2023-10-08 14:45:26 +05:30

153 lines
3.6 KiB
Haxe

package src;
import haxe.Json;
import src.Util;
import src.Settings;
import src.Http;
import src.Console;
typedef PayloadData = {
type:String,
payload:{
hostname:String, language:String, referrer:String, screen:String, title:String, url:String, website:String, name:String, ?data:Dynamic
}
};
// I'm sorry to add this
// Your data is private and anonymous and we don't track you at all, I promise!
// The analytics are stored in a self hosted Umami instance inside EU.
class Analytics {
static var umami = "https://analytics.randomityguy.me/api/send";
public static function trackSingle(eventName:String) {
var p = payload(eventName, null);
var json = Json.stringify(p);
Http.post(umami, json, (b) -> {
// Console.log("Analytics suceeded: " + b.toString());
}, (e) -> {
// Console.log("Analytics failed: " + e);
});
}
public static function trackLevelPlay(levelName:String, levelFile:String) {
var p = payload("level-play", {
level: {
name: levelName,
file: levelFile
}
});
var json = Json.stringify(p);
Http.post(umami, json, (b) -> {
// Console.log("Analytics suceeded: " + b.toString());
}, (e) -> {
// Console.log("Analytics failed: " + e);
});
}
public static function trackLevelScore(levelName:String, levelFile:String, time:Int, oobs:Int, respawns:Int, rewind:Bool) {
var p = payload("level-score", {
level_play: Json.stringify({
name: levelName,
file: levelFile,
time: time,
oobs: oobs,
respawns: respawns,
rewind: rewind
})
});
var json = Json.stringify(p);
Http.post(umami, json, (b) -> {
// Console.log("Analytics suceeded: " + b.toString());
}, (e) -> {
// Console.log("Analytics failed: " + e);
});
}
public static function trackLevelQuit(levelName:String, levelFile:String, time:Int, oobs:Int, respawns:Int, rewind:Bool) {
var p = payload("level-quit", {
level_quit: Json.stringify({
name: levelName,
file: levelFile,
time: time,
oobs: oobs,
respawns: respawns,
rewind: rewind
})
});
var json = Json.stringify(p);
Http.post(umami, json, (b) -> {
// Console.log("Analytics suceeded: " + b.toString());
}, (e) -> {
// Console.log("Analytics failed: " + e);
});
}
public static function trackPlatformInfo() {
var p = payload("device-telemetry", {
platform: Util.getPlatform(),
screen: screen(),
});
var json = Json.stringify(p);
Http.post(umami, json, (b) -> {
// Console.log("Analytics suceeded: " + b.toString());
}, (e) -> {
// Console.log("Analytics failed: " + e);
});
}
static function payload(eventName:String, eventData:Dynamic):PayloadData {
var p:PayloadData = {
type: "event",
payload: {
hostname: hostname(),
language: language(),
referrer: referrer(),
screen: screen(),
title: "MBHaxe Ultra",
url: "/",
website: "359e2bfd-5152-4284-969f-c9f5b56fcb76",
name: eventName
}
};
if (eventData == null)
return p;
p.payload.data = eventData;
return p;
}
static function hostname() {
#if js
return js.Browser.window.location.hostname;
#end
#if hl
return "marbleblastultra.randomityguy.me";
#end
}
static function language() {
#if js
return js.Browser.window.navigator.language;
#end
#if hl
return "en-us";
#end
}
static function referrer() {
#if js
return js.Browser.window.document.referrer;
#end
#if hl
return "";
#end
}
static function screen() {
#if js
return '${js.Browser.window.screen.width}x${js.Browser.window.screen.height}';
#end
#if hl
return '${Settings.optionsSettings.screenWidth}x${Settings.optionsSettings.screenHeight}';
#end
}
}