mirror of
https://github.com/zeldaret/botw
synced 2026-09-03 01:54:07 -04:00
Add uking::PlayReport (#112)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user