1#pragma once
2
3#include "Library/LiveActor/LiveActor.h"
4#include "Library/Movement/MoveType.h"
5
6namespace al {
7class WaterSurfaceFinder;
8}
9class CapTargetInfo;
10class EnemyStateSwoon;
11class IUsePlayerHack;
12
13class Nokonoko : public al::LiveActor {
14public:
15 Nokonoko(const char* name);
16 void init(const al::ActorInitInfo& info) override;
17 void control() override;
18 void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
19 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
20 al::HitSensor* self) override;
21
22 void endCapture();
23
24 inline bool updateAccelStick();
25
26 void exeWait();
27 void exeSwoon();
28 void exeCaptureStart();
29 void exeCaptureStartEnd();
30 void exeCaptureEnd();
31 void exeCaptureWait();
32 void exeCaptureWalk();
33 void exeCaptureJumpStart();
34 void exeCaptureJump();
35 void exeCaptureJumpEnd();
36 void exeCaptureSpinStandbyStart();
37 void exeCaptureSpin();
38 void exeCaptureSpinEnd();
39 void exeDie();
40
41private:
42 CapTargetInfo* mCapTargetInfo = nullptr;
43 EnemyStateSwoon* mStateSwoon = nullptr;
44 IUsePlayerHack* mHackActor = nullptr;
45 sead::Vector3f mUnused1 = sead::Vector3f::zero;
46 sead::Vector3f mUnused2 = sead::Vector3f::zero;
47 s32 mHackSwingCooldown = 0;
48 al::MoveType mMoveType = al::MoveType::Loop;
49 sead::Vector3f mStartSpinDriftSideDir = sead::Vector3f::ex;
50 sead::Vector3f mStartSpinDriftFrontDir = sead::Vector3f::ez;
51 al::WaterSurfaceFinder* mWaterSurfaceFinder = nullptr;
52 s32 mWaterSurfaceSpringCooldown = 0;
53};
54