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 BgmPlayObj;
11class CameraTicket;
12class EventFlowExecutor;
13class HitSensor;
14class JointLookAtController;
15class JointRippleGenerator;
16class SensorMsg;
17class Nerve;
18} // namespace al
19
20class DoshiStateWanderBossBattle;
21class ShoppingWatcher;
22class TalkNpcCap;
23
24class Doshi : public al::LiveActor {
25public:
26 Doshi(const char* name);
27
28 void init(const al::ActorInitInfo& initInfo) override;
29 void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
30 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
31 al::HitSensor* self) override;
32 void control() override;
33
34 void onBattleStart();
35 void doReaction(const al::SensorMsg* message, al::HitSensor* other, al::HitSensor* self);
36 void requestUpdateAction(f32, f32);
37 bool isInWater() const;
38 void requestStartCamera();
39 void requestEndCamera();
40
41 void exeWait();
42 void exeRun();
43 void exeReaction();
44 void exeBossBattle();
45
46private:
47 ShoppingWatcher* mShoppingWatcher = nullptr;
48 al::BgmPlayObj* mBgmPlayObj = nullptr;
49 al::JointLookAtController* mJointLookAtController = nullptr;
50 al::EventFlowExecutor* mEventFlowExecutor = nullptr;
51 al::Nerve* mActiveNerve = nullptr;
52 DoshiStateWanderBossBattle* mWanderBossBattle = nullptr;
53 sead::Vector3f mTrans = sead::Vector3f::zero;
54 f32 mClippingRadius = 4500.0f;
55 f32 mLocalOffsetY = 2500.0f;
56 s32 mRemainingCoins = 5;
57 al::CameraTicket* mCamera = nullptr;
58 TalkNpcCap* mTalkNpcCap = nullptr;
59 f32 mActionWaitFrame = -1;
60 f32 mActionMoveFrame = -1;
61 al::JointRippleGenerator* mJointRippleGeneratorNeck = nullptr;
62 al::JointRippleGenerator* mJointRippleGeneratorSpine = nullptr;
63 al::JointRippleGenerator* mJointRippleGeneratorTail = nullptr;
64};
65