Add uking::PlayReport (#112)

This commit is contained in:
Tonycons-dev
2023-01-22 12:17:04 -05:00
committed by GitHub
parent 19f115dcae
commit 50469a43fc
7 changed files with 231 additions and 38 deletions
+2
View File
@@ -7,6 +7,8 @@ add_subdirectory(UI)
target_sources(uking PRIVATE
gameItemUtils.cpp
gameItemUtils.h
gamePlayReport.cpp
gamePlayReport.h
gameScene.cpp
gameScene.h
gameStageInfo.cpp
+82
View File
@@ -0,0 +1,82 @@
#include "Game/gamePlayReport.h"
#include <math/seadVector.h>
#include "KingSystem/GameData/gdtCommonFlagsUtils.h"
#include "KingSystem/GameData/gdtManager.h"
#include "KingSystem/GameData/gdtTriggerParam.h"
#include "KingSystem/System/ProductReporter.h"
#include "KingSystem/System/StageInfo.h"
namespace uking {
void reportKorok(const sead::Vector3f& position) {
ksys::ProductReporter::getSomeBool();
s32 id = ksys::gdt::getFlag_HiddenKorok_Number();
PlayReport report(sead::SafeString("korok"), 7,
ksys::PlayReportMgr::instance()->getReporter()->getHeap());
report.addMapType();
report.add(sead::SafeString("Id"), u32(id));
report.addPlayTimes();
report.addPosition({position.x, position.z});
if (ksys::PlayReportMgr::instance()) {
auto* reporter = ksys::PlayReportMgr::instance()->getReporter();
if (reporter && reporter->isEnabled())
reporter->saveReport(&report);
}
}
void reportDungeon(const sead::SafeString& name, const sead::SafeString& event) {
ksys::ProductReporter::getSomeBool();
if (name.findIndex("Remains") == -1 && name.findIndex("Dungeon") == -1 &&
name.findIndex("FinalTrial") == -1)
return;
PlayReport report(sead::SafeString("dungeon"), 6,
ksys::PlayReportMgr::instance()->getReporter()->getHeap());
report.addMapType();
report.add(sead::SafeString("Name"), name);
report.add(sead::SafeString("Event"), event);
report.addPlayTimes();
if (ksys::PlayReportMgr::instance()) {
auto* reporter = ksys::PlayReportMgr::instance()->getReporter();
if (reporter && reporter->isEnabled())
reporter->saveReport(&report);
}
}
PlayReport::PlayReport(const sead::FixedSafeString<32>& event_id, s32 num_entries, sead::Heap* heap)
: ksys::PlayReport(event_id, num_entries, heap) {}
void PlayReport::addMapType() {
if (!ksys::gdt::Manager::instance())
return;
add(sead::SafeString("IsHardMode"), ksys::gdt::getFlag_AoC_HardMode_Enabled());
const sead::SafeString& current_map = ksys::StageInfo::getCurrentMapType();
u32 type = 0;
if (current_map == "MainField")
type = 1;
if (current_map == "AocField")
type = 2;
if (current_map == "CDungeon")
type = 3;
if (current_map == "MainFieldDungeon")
type = 4;
add(sead::SafeString("MapType"), type);
}
} // namespace uking
+20
View File
@@ -0,0 +1,20 @@
#pragma once
#include <math/seadVectorFwd.h>
#include "KingSystem/System/PlayReportMgr.h"
namespace uking {
void reportKorok(const sead::Vector3f& position);
void reportDungeon(const sead::SafeString& name, const sead::SafeString& event);
// TODO: More functions
class PlayReport : public ksys::PlayReport {
public:
PlayReport(const sead::FixedSafeString<32>& event_id, s32 num_entries, sead::Heap* heap);
void addMapType();
};
} // namespace uking
+64 -4
View File
@@ -13,6 +13,40 @@ PlayReportMgr::~PlayReportMgr() {
delete mReporter;
}
void PlayReportMgr::calc() {
if (!_30 && mReporter)
mReporter->updateTimers();
}
void PlayReportMgr::reportDebug(const sead::SafeString& message, const sead::SafeString& data) {
// Stubbed in release builds
}
bool PlayReportMgr::auto0() const {
return true;
}
PlayerTrackReporter* PlayReportMgr::getPlayerTrackReporter() const {
if (!mReporter)
return nullptr;
return mReporter->getPlayerTrackReporter();
}
void PlayReportMgr::setPlayerTrackReporter28() {
if (auto* reporter = getPlayerTrackReporter())
reporter->_28 = true;
}
void PlayReportMgr::setPlayerTrackReporter29() {
if (auto* reporter = getPlayerTrackReporter())
reporter->_29 = true;
}
void PlayReportMgr::setPlayerTrackReporter30() {
if (auto* reporter = getPlayerTrackReporter())
reporter->_30 = true;
}
bool PlayReport::setEventId(sead::BufferedSafeString& event_id) {
if (!mHasNinPrepoReport)
return false;
@@ -21,22 +55,48 @@ bool PlayReport::setEventId(sead::BufferedSafeString& event_id) {
return mNinPlayReport->SetEventId(event_id.cstr()).IsSuccess();
}
bool PlayReport::add(const sead::SafeString& key, u32 value) {
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, u32 value) {
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), s64(value)).IsSuccess();
}
bool PlayReport::add(const sead::SafeString& key, s32 value) {
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, s32 value) {
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), s64(value)).IsSuccess();
}
bool PlayReport::add(const sead::SafeString& key, f32 value) {
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key, f32 value) {
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), value).IsSuccess();
}
bool PlayReport::add(const sead::SafeString& key, const sead::SafeString& value) {
[[gnu::noinline]] bool PlayReport::add(const sead::FixedSafeString<48>& key,
const sead::SafeString& value) {
return mHasNinPrepoReport && mNinPlayReport->Add(key.cstr(), value.cstr()).IsSuccess();
}
void PlayReport::addPlayTimes() {
if (!gdt::Manager::instance())
return;
if (!PlayReportMgr::instance())
return;
if (!PlayReportMgr::instance()->getReporter())
return;
s32 playTime =
PlayReportMgr::instance()->getReporter()->getS32(PlayReportKey::PlayReport_PlayTime);
s32 allPlayTime =
PlayReportMgr::instance()->getReporter()->getS32(PlayReportKey::PlayReport_AllPlayTime);
add(sead::SafeString("PlayTime"), u32(playTime));
add(sead::SafeString("AllPlayTime"), u32(allPlayTime));
}
void PlayReport::addPosition(const sead::Vector2f& position) {
add(sead::SafeString("PosX"), position.x);
add(sead::SafeString("PosZ"), position.y);
}
bool PlayReport::save() {
if (!mHasNinPrepoReport)
return false;
+23 -7
View File
@@ -3,6 +3,7 @@
#include <container/seadBuffer.h>
#include <heap/seadDisposer.h>
#include <prim/seadSafeString.h>
#include "KingSystem/System/ProductReporter.h"
#include "KingSystem/Utils/Types.h"
namespace nn::prepo {
@@ -29,6 +30,13 @@ public:
void reportDebug(const sead::SafeString& message, const sead::SafeString& data);
bool auto0() const;
PlayerTrackReporter* getPlayerTrackReporter() const;
void setPlayerTrackReporter28();
void setPlayerTrackReporter29();
void setPlayerTrackReporter30();
ProductReporter* getReporter() const { return mReporter; }
bool get30() const { return _30; }
@@ -43,20 +51,28 @@ KSYS_CHECK_SIZE_NX150(PlayReportMgr, 0x40);
class PlayReport {
public:
PlayReport(const sead::SafeString& event_id, s32 num_entries, sead::Heap* heap) {
inline PlayReport(const sead::FixedSafeString<32>& event_id, s32 num_entries,
sead::Heap* heap) {
init(num_entries, heap);
sead::FixedSafeString<32> event_id_;
event_id_.cutOffCopy(event_id);
sead::FixedSafeString<32> event_id_ = event_id;
setEventId(event_id_);
}
~PlayReport();
bool setEventId(sead::BufferedSafeString& event_id);
bool add(const sead::SafeString& key, u32 value);
bool add(const sead::SafeString& key, s32 value);
bool add(const sead::SafeString& key, f32 value);
bool add(const sead::SafeString& key, const sead::SafeString& value);
bool add(const sead::FixedSafeString<48>& key, u32 value);
bool add(const sead::FixedSafeString<48>& key, s32 value);
bool add(const sead::FixedSafeString<48>& key, f32 value);
bool add(const sead::FixedSafeString<48>& key, const sead::SafeString& value);
// TODO: requires LayoutResourceMgr
void addRomVersions();
void addPlayTimes();
void addPosition(const sead::Vector2f& position);
bool save();
private:
+15 -2
View File
@@ -29,8 +29,11 @@ public:
void init(sead::Heap* heap);
void setPosTrackEnd();
private:
u8 _0[48];
u8 _0[40];
bool _28;
bool _29;
bool _30;
u8 _3a[5];
};
class ProductReporter {
@@ -82,6 +85,16 @@ public:
u32 mBufferLength;
};
sead::Heap* getHeap() const { return mHeap; }
PlayerTrackReporter* getPlayerTrackReporter() const { return mPlayerTrackReporter; }
inline s32 getS32(s32 key) {
s32 out = 0;
gdt::Manager::instance()->getS32(mGameDataHandles[key], &out);
return out;
}
private:
u8 _0[8];