1#pragma once
2
3#include <basis/seadTypes.h>
4
5#include "Library/Nerve/Nerve.h"
6
7namespace alNerveFunction {
8class NerveActionCollector;
9}
10
11namespace al {
12class NerveAction : public Nerve {
13public:
14 NerveAction();
15 virtual const char* getActionName() const = 0;
16
17 NerveAction* getNext() const { return mNextAction; }
18
19protected:
20 friend class alNerveFunction::NerveActionCollector;
21
22private:
23 NerveAction* mNextAction = nullptr;
24};
25} // namespace al
26
27namespace alNerveFunction {
28
29class NerveActionCollector {
30public:
31 NerveActionCollector();
32
33 void addNerve(al::NerveAction* action);
34
35 s32 getNumActions() const { return mActionCount; }
36
37 al::NerveAction* getHead() { return mHead; }
38
39protected:
40 friend class al::NerveAction;
41
42private:
43 s32 mActionCount = 0;
44 al::NerveAction* mHead = nullptr;
45 al::NerveAction* mTail = nullptr;
46
47 static NerveActionCollector* sCurrentCollector;
48};
49
50} // namespace alNerveFunction
51