1#pragma once
2
3#include <math/seadVector.h>
4
5#include "Library/Event/IEventFlowEventReceiver.h"
6#include "Library/LiveActor/LiveActor.h"
7
8namespace al {
9
10struct ActorInitInfo;
11class AreaObj;
12class EventFlowEventData;
13class EventFlowExecutor;
14class HitSensor;
15class LiveActorGroup;
16class SensorMsg;
17} // namespace al
18
19class NpcEventStateScare;
20class VolleyballBall;
21class VolleyballBase;
22class VolleyballLayout;
23class Shine;
24
25class VolleyballNpc : public al::LiveActor, public al::IEventFlowEventReceiver {
26public:
27 VolleyballNpc(const char* name);
28
29 void init(const al::ActorInitInfo& initInfo) override;
30 void control() override;
31 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
32 al::HitSensor* self) override;
33 void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
34 bool receiveEvent(const al::EventFlowEventData* event) override;
35
36 void endGame();
37 void startGame(bool);
38 void addSuccessCount();
39 bool isEnableAppearLayout() const;
40 bool isEnterGameArea() const;
41 bool isEndMiss() const;
42 bool isInGame() const;
43 void startSmashReaction();
44 void tryChangeMiss();
45 void calcTargetTrans(sead::Vector3f*) const;
46 bool tryChangeAttack();
47 bool tryChangeAttackSign();
48
49 void exeWait();
50 void exeCapMessageWaitForThrough();
51 void exeCapMessage();
52 void exeLetsPlay();
53 void exeWaitAfterGame();
54 void exeScare();
55 void exeWaitAttackSign();
56 void exeAttackSign();
57 void exeAttack();
58 void exeAttackWait();
59 void exeMiss();
60 void exeWaitRetry();
61 void exeReactionCap();
62 void exeReactionTrample();
63
64 const sead::Vector3f& getFrontDir() { return mFrontDir; }
65
66private:
67 al::EventFlowExecutor* mEventFlowExecutor;
68 NpcEventStateScare* mNpcEventStateScare;
69 al::LiveActorGroup* mLiveActorGroup;
70 VolleyballBase* mBase;
71 VolleyballLayout* mLayout;
72 al::AreaObj* mGameArea;
73 al::AreaObj* _140;
74 al::AreaObj* _148;
75 s32 _150;
76 s32 _154;
77 s32 mBestCount;
78 s32 mDayCount;
79 f32 mSpeed;
80 s32 mLevelUpCount;
81 f32 mLevelUpSpeed;
82 f32 mMaxSpeed;
83 f32 mInitSpeed;
84 s32 _174;
85 s32 mBallNumMax;
86 s32 mLevelUpBallCount;
87 VolleyballBall* mBall;
88 s32 mClearCount;
89 s32 mSuperClearCount;
90 sead::Vector3f mFrontDir;
91 s32 _19c;
92 void* _1a0;
93 Shine* _1a8;
94 Shine* _1b0;
95};
96
97static_assert(sizeof(VolleyballNpc) == 0x1b8);
98