aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Orbis/Sentient/SentientManager.h
blob: d539724960dd280169a9ac2d42c457abbbd0207b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#pragma once
#include "MinecraftTelemetry.h"

class CSentientManager
{
public:
	enum ETelemetryEvent
	{
		eTelemetry_PlayerSessionStart,
		eTelemetry_PlayerSessionExit,
		eTelemetry_HeartBeat,
		eTelemetry_LevelStart,
		eTelemetry_LevelExit,
		eTelemetry_LevelSaveOrCheckpoint,
		eTelemetry_PauseOrInactive,
		eTelemetry_UnpauseOrActive,
		eTelemetry_MenuShown,
		eTelemetry_AchievementUnlocked,
		eTelemetry_MediaShareUpload,
		eTelemetry_UpsellPresented,
		eTelemetry_UpsellResponded,
		eTelemetry_PlayerDiedOrFailed,
		eTelemetry_EnemyKilledOrOvercome,
	};

	HRESULT Init();
	HRESULT Tick();

	HRESULT Flush();

	BOOL RecordPlayerSessionStart(DWORD dwUserId);
	BOOL RecordPlayerSessionExit(DWORD dwUserId, int exitStatus);
	BOOL RecordHeartBeat(DWORD dwUserId);
	BOOL RecordLevelStart(DWORD dwUserId, ESen_FriendOrMatch friendsOrMatch, ESen_CompeteOrCoop competeOrCoop, int difficulty, DWORD numberOfLocalPlayers, DWORD numberOfOnlinePlayers);
	BOOL RecordLevelExit(DWORD dwUserId, ESen_LevelExitStatus levelExitStatus);
	BOOL RecordLevelSaveOrCheckpoint(DWORD dwUserId, INT saveOrCheckPointID, INT saveSizeInBytes);
	BOOL RecordLevelResume(DWORD dwUserId, ESen_FriendOrMatch friendsOrMatch, ESen_CompeteOrCoop competeOrCoop, int difficulty, DWORD numberOfLocalPlayers, DWORD numberOfOnlinePlayers, INT saveOrCheckPointID);
	BOOL RecordPauseOrInactive(DWORD dwUserId);
	BOOL RecordUnpauseOrActive(DWORD dwUserId);
	BOOL RecordMenuShown(DWORD dwUserId, INT menuID, INT optionalMenuSubID);
	BOOL RecordAchievementUnlocked(DWORD dwUserId, INT achievementID, INT achievementGamerscore);
	BOOL RecordMediaShareUpload(DWORD dwUserId, ESen_MediaDestination mediaDestination, ESen_MediaType mediaType);
	BOOL RecordUpsellPresented(DWORD dwUserId, ESen_UpsellID upsellId, INT marketplaceOfferID);
	BOOL RecordUpsellResponded(DWORD dwUserId, ESen_UpsellID upsellId, INT marketplaceOfferID, ESen_UpsellOutcome upsellOutcome);
	BOOL RecordPlayerDiedOrFailed(DWORD dwUserId, INT lowResMapX, INT lowResMapY, INT lowResMapZ, INT mapID, INT playerWeaponID, INT enemyWeaponID, ETelemetryChallenges enemyTypeID);
	BOOL RecordEnemyKilledOrOvercome(DWORD dwUserId, INT lowResMapX, INT lowResMapY, INT lowResMapZ, INT mapID, INT playerWeaponID, INT enemyWeaponID, ETelemetryChallenges enemyTypeID);

	BOOL RecordSkinChanged(DWORD dwUserId, DWORD dwSkinId);
	BOOL RecordBanLevel(DWORD dwUserId);
	BOOL RecordUnBanLevel(DWORD dwUserId);

	INT GetMultiplayerInstanceID();
	INT GenerateMultiplayerInstanceId();
	void SetMultiplayerInstanceId(INT value);

private:
	float m_initialiseTime;
	float m_lastHeartbeat;
	bool m_bFirstFlush;

	float m_fLevelStartTime[XUSER_MAX_COUNT];

	INT m_multiplayerInstanceID;
	DWORD m_levelInstanceID;

	// Helper functions to get the various common settings
	INT GetSecondsSinceInitialize();
	INT GetMode(DWORD dwUserId);
	INT GetSubMode(DWORD dwUserId);
	INT GetLevelId(DWORD dwUserId);
	INT GetSubLevelId(DWORD dwUserId);
	INT GetTitleBuildId();
	INT GetLevelInstanceID();
	INT GetSingleOrMultiplayer();
	INT GetDifficultyLevel(INT diff);
	INT GetLicense();
	INT GetDefaultGameControls();
	INT GetAudioSettings(DWORD dwUserId);
	INT GetLevelExitProgressStat1();
	INT GetLevelExitProgressStat2();
};

extern CSentientManager SentientManager;