mirror of
https://github.com/zeldaret/botw
synced 2026-07-26 06:27:51 -04:00
ksys: Add Account
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
#include "KingSystem/System/Account.h"
|
||||
#include <nn/account.h>
|
||||
|
||||
namespace ksys {
|
||||
|
||||
SEAD_SINGLETON_DISPOSER_IMPL(Account)
|
||||
|
||||
Account::~Account() {
|
||||
if (mFlags.isOn(Flag::HasUserHandle)) {
|
||||
if (mUserHandle) {
|
||||
delete mUserHandle;
|
||||
mUserHandle = nullptr;
|
||||
}
|
||||
mFlags.reset(Flag::HasUserHandle);
|
||||
}
|
||||
}
|
||||
|
||||
void Account::init(sead::Heap* heap) {
|
||||
mUserHandle = new (heap) nn::account::UserHandle{};
|
||||
|
||||
nn::account::Initialize();
|
||||
|
||||
if (mFlags.isOff(Flag::HasOpenedUserSuccessfully)) {
|
||||
const auto result = nn::account::OpenPreselectedUser(mUserHandle);
|
||||
if (result.IsSuccess())
|
||||
mFlags.set(Flag::HasOpenedUserSuccessfully);
|
||||
}
|
||||
|
||||
mFlags.set(Flag::HasUserHandle);
|
||||
}
|
||||
|
||||
nn::account::UserHandle* Account::getUserHandle() const {
|
||||
return mUserHandle;
|
||||
}
|
||||
|
||||
void Account::getUserId(nn::account::Uid* uid) const {
|
||||
if (mUserHandle)
|
||||
nn::account::GetUserId(uid, *mUserHandle);
|
||||
else
|
||||
*uid = {};
|
||||
}
|
||||
|
||||
} // namespace ksys
|
||||
@@ -0,0 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
#include <heap/seadDisposer.h>
|
||||
#include <prim/seadTypedBitFlag.h>
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace nn::account {
|
||||
class Uid;
|
||||
class UserHandle;
|
||||
} // namespace nn::account
|
||||
|
||||
namespace ksys {
|
||||
|
||||
class Account {
|
||||
SEAD_SINGLETON_DISPOSER(Account)
|
||||
Account() = default;
|
||||
virtual ~Account();
|
||||
|
||||
public:
|
||||
void init(sead::Heap* heap);
|
||||
|
||||
nn::account::UserHandle* getUserHandle() const;
|
||||
void getUserId(nn::account::Uid* uid) const;
|
||||
|
||||
private:
|
||||
enum class Flag : u8 {
|
||||
HasUserHandle = 0x1,
|
||||
HasOpenedUserSuccessfully = 0x2,
|
||||
};
|
||||
|
||||
void* _28 = nullptr;
|
||||
sead::TypedBitFlag<Flag> mFlags;
|
||||
nn::account::UserHandle* mUserHandle = nullptr;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(Account, 0x40);
|
||||
|
||||
} // namespace ksys
|
||||
@@ -1,4 +1,6 @@
|
||||
target_sources(uking PRIVATE
|
||||
Account.cpp
|
||||
Account.h
|
||||
OverlayArena.cpp
|
||||
OverlayArena.h
|
||||
OverlayArenaSystem.cpp
|
||||
|
||||
Reference in New Issue
Block a user