1#pragma once
2
3#include <math/seadMatrix.h>
4
5#include "Library/LiveActor/LiveActor.h"
6
7namespace al {
8class HitSensor;
9class SensorMsg;
10class WaterSurfaceFinder;
11} // namespace al
12
13class CapTargetInfo;
14class PlayerAnimator;
15class PlayerColliderYoshi;
16class PlayerConst;
17class PlayerEffect;
18class PlayerJumpMessageRequest;
19class PlayerModelHolder;
20class PlayerModelChangerYoshi;
21class PlayerPushReceiver;
22class PlayerTrigger;
23class YoshiJointControlKeeper;
24class YoshiStateEgg;
25class YoshiStateHack;
26class YoshiStateNpc;
27
28class Yoshi : public al::LiveActor {
29public:
30 Yoshi(const char* actorName);
31
32 void init(const al::ActorInitInfo& info) override;
33 void initAfterPlacement() override;
34 void movement() override;
35 void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
36 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
37 al::HitSensor* self) override;
38
39 void control() override;
40 void updateCollider() override;
41
42 void updateCollisionShape();
43 void sendCollisionMsg();
44 void appearEgg();
45 void startFruitShineGetDemo();
46 void exeEgg();
47 void exeNpc();
48 void exeHack();
49
50private:
51 PlayerConst* mPlayerConst = nullptr;
52 PlayerModelHolder* mModelHolder = nullptr;
53 PlayerModelChangerYoshi* mModelChanger = nullptr;
54 PlayerAnimator* mAnimator = nullptr;
55 PlayerColliderYoshi* mCollider = nullptr;
56 PlayerEffect* mEffect = nullptr;
57 PlayerTrigger* mTrigger = nullptr;
58 PlayerJumpMessageRequest* mJumpMessageRequest = nullptr;
59 PlayerPushReceiver* mPushReceiver = nullptr;
60 al::WaterSurfaceFinder* mWaterSurfaceFinder = nullptr;
61 YoshiJointControlKeeper* mJointControlKeeper = nullptr;
62 CapTargetInfo* mCapTargetInfo = nullptr;
63 YoshiStateEgg* mStateEgg = nullptr;
64 YoshiStateNpc* mStateNpc = nullptr;
65 YoshiStateHack* mStateHack = nullptr;
66 al::HitSensor* mHitSensor = nullptr;
67 sead::Matrix34f mLocalMtx = sead::Matrix34f::ident;
68};
69