1#pragma once
2
3#include "Library/LiveActor/LiveActor.h"
4
5namespace al {
6class AreaObjGroup;
7}
8
9class CapTargetInfo;
10class IUsePlayerHack;
11class PlayerHackStartShaderCtrl;
12
13struct FukuwaraiPart {
14 const char* name;
15 f32 basePoints;
16 f32 anglePoints;
17 f32 distancePoints;
18};
19
20class FukuwaraiFaceParts : public al::LiveActor {
21public:
22 FukuwaraiFaceParts(const char* name, al::AreaObjGroup* group);
23
24 void init(const al::ActorInitInfo& info) override;
25 s32 getPriority() const;
26 void control() override;
27 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
28 al::HitSensor* self) override;
29
30 f32 calcScore(bool isMario) const;
31 bool isPlaced() const;
32 f32 calcScoreAngleRate() const;
33 f32 calcScoreDistRate() const;
34 void show();
35 void reset();
36 void vanish();
37
38 void exePlace();
39 void exeReset();
40 void exeAppear();
41 void exeWait();
42 void exeCaptureWait();
43 void exeCaptureMove();
44 void exeHide();
45 void exeCaptureStart();
46 void exeCaptureHackStart();
47 bool isKuriboMarioParts() const;
48
49private:
50 IUsePlayerHack* mIUsePlayerHack = nullptr;
51 CapTargetInfo* mCapTargetInfo = nullptr;
52 f32 mTargetAngle = 0.0f;
53 sead::Vector3f mTargetPos = sead::Vector3f::zero;
54 al::AreaObjGroup* mFukuwaraiArea = nullptr;
55 sead::Vector3f mTrans = sead::Vector3f::zero;
56 sead::Vector3f mRotation = sead::Vector3f::zero;
57 PlayerHackStartShaderCtrl* mPlayerHackStartShaderCtrl = nullptr;
58};
59