1#pragma once
2
3#include <basis/seadTypes.h>
4
5namespace al {
6class IUseNerve;
7class Nerve;
8class NerveStateCtrl;
9class NerveActionCtrl;
10
11class NerveKeeper {
12public:
13 NerveKeeper(IUseNerve* parent, const Nerve* nerve, s32 maxStates);
14
15 void initNerveAction(NerveActionCtrl* actionCtrl);
16 void setNerve(const Nerve* nextNerve);
17 void tryChangeNerve();
18 void update();
19 const Nerve* getCurrentNerve() const;
20
21 s32 getCurrentStep() const { return mStep; }
22
23 bool isNewNerve() const { return mNextNerve != nullptr; }
24
25 NerveStateCtrl* getStateCtrl() const { return mStateCtrl; }
26
27 NerveActionCtrl* getActionCtrl() const { return mActionCtrl; }
28
29 template <typename T>
30 T* getParent() {
31 return static_cast<T*>(mParent);
32 }
33
34private:
35 IUseNerve* mParent;
36 const Nerve* mCurrentNerve = nullptr;
37 const Nerve* mNextNerve;
38 s32 mStep = 0;
39 NerveStateCtrl* mStateCtrl = nullptr;
40 NerveActionCtrl* mActionCtrl = nullptr;
41};
42} // namespace al
43