ModeBalloon: Implement TimeBalloonStateShowResult (#994)

This commit is contained in:
guymakinggames 2026-04-14 16:15:09 +01:00 committed by GitHub
parent 0119348015
commit 3528e9e104
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 202 additions and 11 deletions

View file

@ -99080,50 +99080,50 @@ ModeBalloon/TimeBalloonStateShowResult.o:
label:
- _ZN26TimeBalloonStateShowResultC1EP26StageSceneStateTimeBalloonPN2al25SimpleLayoutAppearWaitEndEPK31IBalloonFindMyAchievementHolderRKNS2_14LayoutInitInfoE
- _ZN26TimeBalloonStateShowResultC2EP26StageSceneStateTimeBalloonPN2al25SimpleLayoutAppearWaitEndEPK31IBalloonFindMyAchievementHolderRKNS2_14LayoutInitInfoE
status: NotDecompiled
status: Matching
- offset: 0x37756c
size: 16
label: _ZN26TimeBalloonStateShowResult4initEv
status: NotDecompiled
status: Matching
- offset: 0x37757c
size: 16
label: _ZN26TimeBalloonStateShowResult6appearEv
status: NotDecompiled
status: Matching
- offset: 0x37758c
size: 104
label: _ZN26TimeBalloonStateShowResult9exeAppearEv
status: NotDecompiled
status: Matching
- offset: 0x3775f4
size: 84
label: _ZN26TimeBalloonStateShowResult7exeWaitEv
status: NotDecompiled
status: Matching
- offset: 0x377648
size: 80
label: _ZN26TimeBalloonStateShowResult6exeEndEv
status: NotDecompiled
status: Matching
- offset: 0x377698
size: 12
label: _ZN26TimeBalloonStateShowResult12setNerveWaitEv
status: NotDecompiled
status: Matching
- offset: 0x3776a4
size: 36
label: _ZN26TimeBalloonStateShowResultD0Ev
status: NotDecompiled
status: Matching
lazy: true
- offset: 0x3776c8
size: 108
label: _ZNK12_GLOBAL__N_135TimeBalloonStateShowResultNrvAppear7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x377734
size: 84
label: _ZNK12_GLOBAL__N_133TimeBalloonStateShowResultNrvWait7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
- offset: 0x377788
size: 84
label: _ZNK12_GLOBAL__N_132TimeBalloonStateShowResultNrvEnd7executeEPN2al11NerveKeeperE
status: NotDecompiled
status: Matching
guess: true
ModeBalloon/TimeBalloonStateWatchFindBalloon.o:
'.text':

View file

@ -0,0 +1,25 @@
#pragma once
#include <basis/seadTypes.h>
#include "Library/Play/Layout/SimpleLayoutAppearWaitEnd.h"
class IBalloonFindMyAchievementHolder;
namespace al {
class LayoutInitInfo;
} // namespace al
class TimeBalloonAchievementLayout : public al::SimpleLayoutAppearWaitEnd {
public:
TimeBalloonAchievementLayout(const al::LayoutInitInfo& info);
void appear() override;
void update();
void setAchievement(const IBalloonFindMyAchievementHolder* holder);
private:
u8 _130[0x288 - 0x130];
};
static_assert(sizeof(TimeBalloonAchievementLayout) == 0x288);

View file

@ -0,0 +1,72 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadVector.h>
class FriendsProfileDataHolder;
namespace al {
class FriendsProfileData;
} // namespace al
namespace nn::nex {
template <typename K, typename V>
class qMap;
template <typename T>
class qVector;
class qBuffer;
struct DataStoreRatingInfo;
struct DataStoreSearchBalloonResult;
} // namespace nn::nex
namespace TimeBalloon {
class BalloonDataServer {
public:
BalloonDataServer();
virtual ~BalloonDataServer();
};
class BalloonData {
public:
void setRatingInfo(const nn::nex::qMap<s8, nn::nex::DataStoreRatingInfo>& ratingInfoMap);
void setGotIdList(const nn::nex::qVector<nn::nex::qBuffer>& gotIdList);
void setPlayedIdList(const nn::nex::qVector<nn::nex::qBuffer>& playedIdList);
const nn::nex::qVector<nn::nex::qBuffer>& getGotIdList() const;
const nn::nex::qVector<nn::nex::qBuffer>& getPlayedIdList() const;
};
struct BalloonDataMetaBinary;
class RankAchievement {
public:
void end();
};
void initBalloonDataServer(BalloonDataServer* server);
bool isGotBalloon(const BalloonData& balloonData);
s32 getPlayerRank(const BalloonData& balloonData);
s64 getPlayedNum(const BalloonData& balloonData);
s32 calcGotCoin(const BalloonData& balloonData);
s32 calcProtectNum(const BalloonData& balloonData);
s64 calcProtectCoin(const BalloonData& balloonData);
s64 calcProtectCoin(s32 protectNum);
al::FriendsProfileData* tryGetProfileData(const BalloonData& balloonData);
void tryGetNickName(const char** outNickName, const BalloonData& balloonData);
const char* tryGetNickName(const BalloonData& balloonData);
void getBalloonPos(sead::Vector3f* outBalloonPos, const BalloonData& balloonData);
void setRatingInfo(BalloonData* balloonData,
const nn::nex::qMap<s8, nn::nex::DataStoreRatingInfo>& ratingInfoMap);
void createBalloonData(BalloonData* balloonData,
const nn::nex::DataStoreSearchBalloonResult& searchBalloonResult,
FriendsProfileDataHolder* profileDataHolder, bool isGotBalloon);
void createBalloonData(BalloonData* balloonData, u64 dataId, u64 ownerId, u16 playerRank,
const nn::nex::qMap<s8, nn::nex::DataStoreRatingInfo>& ratingInfoMap,
const BalloonDataMetaBinary* metaBinary,
FriendsProfileDataHolder* profileDataHolder, bool isGotBalloon);
s32 getBalloonGotSlotId();
s32 getBalloonPlayedSlotId();
} // namespace TimeBalloon

View file

@ -0,0 +1,59 @@
#include "ModeBalloon/TimeBalloonStateShowResult.h"
#include "Library/Nerve/NerveSetupUtil.h"
#include "Library/Nerve/NerveUtil.h"
#include "ModeBalloon/TimeBalloonAchievementLayout.h"
#include "Util/StageInputFunction.h"
namespace {
NERVE_IMPL(TimeBalloonStateShowResult, Appear)
NERVE_IMPL(TimeBalloonStateShowResult, Wait)
NERVE_IMPL(TimeBalloonStateShowResult, End)
NERVES_MAKE_NOSTRUCT(TimeBalloonStateShowResult, Appear, Wait, End)
} // namespace
TimeBalloonStateShowResult::TimeBalloonStateShowResult(
StageSceneStateTimeBalloon* timeBalloon, al::SimpleLayoutAppearWaitEnd* layout,
const IBalloonFindMyAchievementHolder* achievementHolder, const al::LayoutInitInfo& info)
: al::HostStateBase<StageSceneStateTimeBalloon>("結果を見る(風船割りゲーム)", timeBalloon),
mAchievementHolder(achievementHolder) {
mAchievementLayout = new TimeBalloonAchievementLayout(info);
}
void TimeBalloonStateShowResult::init() {
initNerve(&Appear, 0);
}
void TimeBalloonStateShowResult::appear() {
al::NerveStateBase::appear();
al::setNerve(this, &Appear);
}
void TimeBalloonStateShowResult::exeAppear() {
if (al::isFirstStep(this)) {
mAchievementLayout->setAchievement(mAchievementHolder);
mAchievementLayout->appear();
}
mAchievementLayout->update();
if (mAchievementLayout->isWait())
al::setNerve(this, &Wait);
}
void TimeBalloonStateShowResult::exeWait() {
mAchievementLayout->update();
if (rs::isTriggerUiCancel(mAchievementLayout))
al::setNerve(this, &End);
}
void TimeBalloonStateShowResult::exeEnd() {
if (al::isFirstStep(this))
mAchievementLayout->end();
if (!mAchievementLayout->isAlive())
kill();
}
void TimeBalloonStateShowResult::setNerveWait() {
al::setNerve(this, &Wait);
}

View file

@ -0,0 +1,35 @@
#pragma once
#include "Library/Nerve/NerveStateBase.h"
namespace al {
class LayoutInitInfo;
class SimpleLayoutAppearWaitEnd;
} // namespace al
class IBalloonFindMyAchievementHolder;
class StageSceneStateTimeBalloon;
class TimeBalloonAchievementLayout;
class TimeBalloonStateShowResult : public al::HostStateBase<StageSceneStateTimeBalloon> {
public:
TimeBalloonStateShowResult(StageSceneStateTimeBalloon* timeBalloon,
al::SimpleLayoutAppearWaitEnd* layout,
const IBalloonFindMyAchievementHolder* achievementHolder,
const al::LayoutInitInfo& info);
void init() override;
void appear() override;
void exeAppear();
void exeWait();
void exeEnd();
void setNerveWait();
private:
const IBalloonFindMyAchievementHolder* mAchievementHolder = nullptr;
TimeBalloonAchievementLayout* mAchievementLayout = nullptr;
};
static_assert(sizeof(TimeBalloonStateShowResult) == 0x30);