1#pragma once
2
3#include <container/seadPtrArray.h>
4
5#include "Library/Nerve/IUseNerve.h"
6
7#include "Amiibo/HelpAmiiboExecutor.h"
8
9namespace al {
10struct ActorInitInfo;
11class IUseNerve;
12class LiveActor;
13class NerveKeeper;
14struct NfpInfo;
15} // namespace al
16
17class HelpAmiiboDirector;
18class LifeUpItem;
19class LifeUpItem2D;
20class Coin;
21class Coin2D;
22
23class HelpAmiiboCountUpCoin : public HelpAmiiboExecutor, public al::IUseNerve {
24public:
25 HelpAmiiboCountUpCoin(HelpAmiiboDirector* director, al::LiveActor* actor);
26
27 void initAfterPlacement(const al::ActorInitInfo& initInfo) override;
28 bool isTriggerTouch(const al::NfpInfo& nfpInfo) const override;
29 bool isEnableUse() override;
30 bool execute() override;
31 void activate() override;
32
33 HelpAmiiboType getType() const override { return HelpAmiiboType::All; }
34
35 al::NerveKeeper* getNerveKeeper() const override { return mNerveKeeper; }
36
37 void updateItemQT(al::LiveActor* actor);
38
39 void exeEnd();
40 void exeDelay();
41 void exeAppearCoin();
42
43private:
44 al::NerveKeeper* mNerveKeeper = nullptr;
45 LifeUpItem* mLifeUpItem = nullptr;
46 LifeUpItem2D* mLifeUpItem2D = nullptr;
47 sead::PtrArray<Coin> mCoinBuffer;
48 sead::PtrArray<Coin2D> mCoin2DBuffer;
49 s32 mNumberOfCoins = 4;
50 u32 mCoinsSpawned = 0;
51};
52