| 1 | #pragma once |
|---|---|
| 2 | |
| 3 | #include <math/seadVector.h> |
| 4 | |
| 5 | #include "Library/Event/IEventFlowEventReceiver.h" |
| 6 | #include "Library/LiveActor/LiveActor.h" |
| 7 | |
| 8 | namespace al { |
| 9 | |
| 10 | struct ActorInitInfo; |
| 11 | class AreaObj; |
| 12 | class EventFlowEventData; |
| 13 | class EventFlowExecutor; |
| 14 | class HitSensor; |
| 15 | class LiveActorGroup; |
| 16 | class SensorMsg; |
| 17 | } // namespace al |
| 18 | |
| 19 | class NpcEventStateScare; |
| 20 | class VolleyballBall; |
| 21 | class VolleyballBase; |
| 22 | class VolleyballLayout; |
| 23 | class Shine; |
| 24 | |
| 25 | class VolleyballNpc : public al::LiveActor, public al::IEventFlowEventReceiver { |
| 26 | public: |
| 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 | |
| 66 | private: |
| 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 | |
| 97 | static_assert(sizeof(VolleyballNpc) == 0x1b8); |
| 98 |