1#pragma once
2
3#include <basis/seadTypes.h>
4#include <math/seadMatrix.h>
5#include <math/seadQuat.h>
6#include <math/seadVector.h>
7
8#include "Library/LiveActor/LiveActor.h"
9
10namespace al {
11class HitSensor;
12class MtxConnector;
13class PlacementId;
14class SensorMsg;
15} // namespace al
16
17class CoinCollectEmpty;
18class CoinCollectHintState;
19class CoinRotateCalculator;
20class CoinStateCountUp;
21class ExternalForceKeeper;
22class WaterSurfaceShadow;
23
24class CoinCollect : public al::LiveActor {
25public:
26 CoinCollect(const char* name);
27
28 void init(const al::ActorInitInfo& initInfo) override;
29 void initAfterPlacement() override;
30 void control() override;
31 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
32 al::HitSensor* self) override;
33 void endClipped() override;
34 void appear() override;
35 void makeActorAlive() override;
36
37 void listenKill();
38 void listenAppear();
39 const sead::Vector3f& getTransForHint() const;
40 void appearHelpAmiiboEffect();
41 void deleteHelpAmiiboEffect();
42 void reappearHelpAmiiboEffect();
43 bool isEnableHint() const;
44 void rotate();
45
46 void exeWait();
47 void exeWaitAmiibo();
48 void exeGot();
49 void exeCountUp();
50 void exeBlow();
51
52private:
53 CoinStateCountUp* mStateCountUp = nullptr;
54 CoinCollectHintState* mHintState = nullptr;
55 al::PlacementId* mPlacementId = nullptr;
56 sead::Quatf mQuat = sead::Quatf::unit;
57 al::MtxConnector* mMtxConnector = nullptr;
58 ExternalForceKeeper* mExternalForceKeeper = nullptr;
59 CoinRotateCalculator* mRotateCalculator = nullptr;
60 f32 mShadowLength = 0.0f;
61 WaterSurfaceShadow* mWaterSurfaceShadow = nullptr;
62 bool mIsSurfaceUpdated = false;
63 sead::Matrix34f mSurfaceMatrix = sead::Matrix34f::ident;
64 CoinCollectEmpty* mCoinCollectEmpty = nullptr;
65 bool _198 = false; // Only assigned `false` later, never read
66};
67