1#pragma once
2
3#include <basis/seadTypes.h>
4#include <math/seadVector.h>
5
6#include "Library/LiveActor/LiveActor.h"
7
8namespace al {
9struct ActorInitInfo;
10class AreaObjGroup;
11class ActorCameraTarget;
12class CameraTicket;
13class HitSensor;
14class JointSpringControllerHolder;
15class SensorMsg;
16} // namespace al
17class Shine;
18
19class KuriboGirl : public al::LiveActor {
20public:
21 KuriboGirl(const char* name);
22 void init(const al::ActorInitInfo& actorInitInfo) override;
23 void control() override;
24 void exeWait();
25 void lookFront();
26 void exeFind();
27 void lookPlayer();
28 void exeLoveLook();
29 void exeLoveLookTurn();
30 void exeSurprise();
31 void exeDisappear();
32 void exeHide();
33 void exeAppear();
34 void exePreLoveFind();
35 void exeLoveFind();
36 void exeAppearShineStart();
37 void exeAppearShine();
38 void exeAppearShineEnd();
39 void exeLookLoveAfter();
40 void exeWaitLoveAfter();
41 void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
42 bool isWatchStart(sead::Vector3f pos);
43 bool isNrvWait();
44 bool receiveMsg(const al::SensorMsg* msg, al::HitSensor* other, al::HitSensor* self) override;
45
46private:
47 al::AreaObjGroup* mAreaObjGroup = nullptr;
48 bool mIsAfterShineAppear = false;
49 bool mIsPlayerNear = false;
50 bool mIsLoveLook = false;
51 bool mIsPlayerFar = true;
52 s32 mFramesOnGround = 0;
53 al::CameraTicket* mCamera = nullptr;
54 al::ActorCameraTarget* mCameraTarget = nullptr;
55 Shine* mShineActor = nullptr;
56 sead::Vector3f* mShineMoveDir = nullptr;
57 bool mIsMoveShine = false;
58 sead::Vector3f mHitSensorPos = sead::Vector3f::zero;
59 al::JointSpringControllerHolder* mJointSpringControllerHolder = nullptr;
60 f32 mHeadRotator = 0.0f;
61 sead::Vector3f mInitialFront = sead::Vector3f::zero;
62};
63
64static_assert(sizeof(KuriboGirl) == 0x160);
65