1#pragma once
2
3#include <container/seadPtrArray.h>
4
5#include "Library/Audio/IUseAudioKeeper.h"
6#include "Library/HostIO/HioNode.h"
7#include "Library/Nerve/IUseNerve.h"
8#include "Library/Scene/ISceneObj.h"
9
10namespace al {
11struct NfpInfo;
12
13struct ActorInitInfo;
14class AudioDirector;
15class AudioKeeper;
16class IUseSceneObjHolder;
17class LayoutActor;
18class LayoutInitInfo;
19class NerveKeeper;
20class PlayerHolder;
21class SimpleLayoutAppearWaitEnd;
22} // namespace al
23
24class ProjectNfpDirector;
25class HelpAmiiboCoinCollect;
26class HelpAmiiboExecutor;
27
28class HelpAmiiboDirector : public al::IUseHioNode,
29 public al::ISceneObj,
30 public al::IUseAudioKeeper,
31 public al::IUseNerve {
32public:
33 HelpAmiiboDirector();
34 void init(ProjectNfpDirector* projectNfpDirector, const al::PlayerHolder* playerHolder,
35 al::AudioDirector* audioDirector, const al::LayoutInitInfo& initInfo);
36 void initAfterPlacementSceneObj(const al::ActorInitInfo& initInfo) override;
37
38 bool isTriggerTouchAmiiboMario() const;
39 bool isTriggerTouchAmiiboPeach() const;
40 bool isTriggerTouchAmiiboKoopa() const;
41 bool isTriggerTouchAmiiboYoshi() const;
42 bool isTriggerTouchAmiiboAll() const;
43 virtual void execute();
44 void reset();
45 bool isHelpAmiiboMode() const;
46 void appearCoinCollectEffect();
47 void killCoinCollectEffect();
48 bool tryExecute(const al::NfpInfo* nfpInfo);
49
50 const char* getSceneObjName() const override;
51 al::AudioKeeper* getAudioKeeper() const override;
52 al::NerveKeeper* getNerveKeeper() const override;
53
54 void exeWait();
55 void exeCountHold();
56 void exeActive();
57 void exeIconClose();
58
59private:
60 ProjectNfpDirector* mProjectNfpDirector = nullptr;
61 const al::PlayerHolder* mPlayerHolder = nullptr;
62 al::AudioKeeper* mAudioKeeper = nullptr;
63 sead::PtrArray<HelpAmiiboExecutor> mTouchEntries;
64
65 al::NerveKeeper* mNerveKeeper = nullptr;
66 al::SimpleLayoutAppearWaitEnd* mSimpleLayout = nullptr;
67 al::LayoutActor* mLayoutActor = nullptr;
68 bool _58 = true;
69 HelpAmiiboCoinCollect* mCoinCollect = nullptr;
70};
71
72namespace AmiiboFunction {
73
74void tryCreateHelpAmiiboDirector(const al::IUseSceneObjHolder* objHolder);
75bool isTriggerTouchAmiiboMario(const al::IUseSceneObjHolder* objHolder);
76bool isTriggerTouchAmiiboPeach(const al::IUseSceneObjHolder* objHolder);
77bool isTriggerTouchAmiiboKoopa(const al::IUseSceneObjHolder* objHolder);
78bool isTriggerTouchAmiiboAll(const al::IUseSceneObjHolder* objHolder);
79
80} // namespace AmiiboFunction
81
82namespace rs {
83
84void resetHelpAmiiboState(const al::IUseSceneObjHolder* objHolder);
85bool isHelpAmiiboMode(const al::IUseSceneObjHolder* objHolder);
86
87} // namespace rs
88