1#pragma once
2
3#include <container/seadStrTreeMap.h>
4#include <math/seadMatrix.h>
5#include <math/seadVector.h>
6
7#include "Library/LiveActor/LiveActor.h"
8#include "Library/Scene/ISceneObj.h"
9
10#include "Scene/SceneObjFactory.h"
11
12class Bird;
13
14class BirdPlayerGlideCtrl : public al::LiveActor, public al::ISceneObj {
15public:
16 static constexpr s32 sSceneObjId = SceneObjID_BirdPlayerGlideCtrl;
17
18 BirdPlayerGlideCtrl(const char* name);
19
20 void init(const al::ActorInitInfo& info) override;
21 void initAfterPlacement() override;
22 void validateGlideOnNose();
23 void invalidateGlideOnNose();
24 void validateGlideOnSitDownHead();
25 void invalidateGlideOnSitDownHead();
26 void addDemoActorAndFlyAway();
27
28 void exeInvalid();
29 void exeValidOnNose();
30 void exeValidOnSitDownHead();
31 void exeWaitFlyAway();
32
33 const char* getSceneObjName() const override { return getName(); }
34
35 bool isValidOnSitDownHead() const { return mIsValidOnSitDownHead; }
36
37private:
38 sead::StrTreeMap<32, sead::Vector3f> mCapOffsetInfo;
39 sead::StrTreeMap<32, sead::Vector3f> mCostumeOffsetScaleInfo;
40 Bird* mBird = nullptr;
41 Bird* mCommonBird = nullptr;
42 Bird* mUfoBird = nullptr;
43 sead::Matrix34f mDestinationMtx = sead::Matrix34f::ident;
44 sead::Vector3f mCapOffset;
45 sead::Vector3f mCostumeOffsetScale = {1, 1, 1};
46 s32 mGlideDownTime = 0;
47 bool mIsValidOnNose = false;
48 bool mIsValidOnSitDownHead = false;
49};
50
51static_assert(sizeof(BirdPlayerGlideCtrl) == 0x1b8);
52
53namespace rs {
54void validateGlideBirdOnPlayerNose(const al::LiveActor* player);
55void invalidateGlideBirdOnPlayerNose(const al::LiveActor* player);
56void validateGlideBirdOnSitDownPlayerHead(const al::LiveActor* player);
57void invalidateGlideBirdOnSitDownPlayerHead(const al::LiveActor* player);
58bool isPlayerSitDownChair(const Bird* bird);
59} // namespace rs
60