1#pragma once
2
3#include <basis/seadTypes.h>
4#include <math/seadQuat.h>
5#include <math/seadVector.h>
6
7#include "Library/LiveActor/LiveActor.h"
8
9namespace al {
10struct ActorInitInfo;
11class HitSensor;
12class MtxConnector;
13class SensorMsg;
14} // namespace al
15
16class Coin;
17class CoinRotateCalculator;
18class CoinStateAppearRotate;
19
20class CoinChameleon : public al::LiveActor {
21public:
22 CoinChameleon(const char* name);
23
24 void init(const al::ActorInitInfo& initInfo) override;
25 void initAfterPlacement() override;
26 void endClipped() override;
27 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
28 al::HitSensor* self) override;
29
30 void rotate();
31
32 void exeWait();
33 void exeVisible();
34 void exeAppear();
35
36private:
37 Coin* mCoin = nullptr;
38 CoinStateAppearRotate* mStateAppearRotate = nullptr;
39 sead::Quatf mQuat = sead::Quatf::unit;
40 al::MtxConnector* mMtxConnector = nullptr;
41 CoinRotateCalculator* mRotateCalculator = nullptr;
42 sead::Vector3f mDisplayOffset = sead::Vector3f::zero;
43 s32 mWaitTime = 0;
44};
45