1#pragma once
2
3#include <prim/seadSafeString.h>
4
5#include "Library/Audio/IUseAudioKeeper.h"
6#include "Library/Camera/IUseCamera.h"
7#include "Library/Effect/IUseEffectKeeper.h"
8#include "Library/HostIO/HioNode.h"
9#include "Library/Layout/IUseLayout.h"
10#include "Library/Layout/IUseLayoutAction.h"
11#include "Library/Message/IUseMessageSystem.h"
12#include "Library/Nerve/IUseNerve.h"
13#include "Library/Scene/IUseSceneObjHolder.h"
14
15namespace al {
16class NerveKeeper;
17class LayoutKeeper;
18class LayoutActionKeeper;
19class LayoutTextPaneAnimator;
20class EffectKeeper;
21class AudioKeeper;
22class LayoutExecuteInfo;
23class HitReactionKeeper;
24class LayoutSceneInfo;
25class LayoutPartsActorKeeper;
26class CameraDirector;
27class SceneObjHolder;
28class MessageSystem;
29class Nerve;
30
31class LayoutActor : public IUseHioNode,
32 public IUseNerve,
33 public IUseLayout,
34 public IUseLayoutAction,
35 public IUseMessageSystem,
36 public IUseCamera,
37 public IUseAudioKeeper,
38 public IUseEffectKeeper,
39 public IUseSceneObjHolder {
40public:
41 LayoutActor(const char* name);
42
43 virtual void appear();
44 virtual void kill();
45
46 virtual void movement();
47 virtual void calcAnim(bool recursive);
48
49 virtual NerveKeeper* getNerveKeeper() const override { return mNerveKeeper; }
50
51 virtual const char* getName() const override { return mName.cstr(); }
52
53 virtual EffectKeeper* getEffectKeeper() const override { return mEffectKeeper; }
54
55 virtual AudioKeeper* getAudioKeeper() const override { return mAudioKeeper; }
56
57 virtual LayoutActionKeeper* getLayoutActionKeeper() const override {
58 return mLayoutActionKeeper;
59 }
60
61 virtual LayoutKeeper* getLayoutKeeper() const override { return mLayoutKeeper; }
62
63 virtual CameraDirector* getCameraDirector() const override;
64
65 virtual SceneObjHolder* getSceneObjHolder() const override;
66
67 virtual const MessageSystem* getMessageSystem() const override;
68
69 virtual void control() {}
70
71 void initLayoutKeeper(LayoutKeeper*);
72 void initActionKeeper();
73 void initTextPaneAnimator(LayoutTextPaneAnimator*);
74 void initExecuteInfo(LayoutExecuteInfo*);
75 void initHitReactionKeeper(HitReactionKeeper*);
76 void initSceneInfo(LayoutSceneInfo*);
77 void initLayoutPartsActorKeeper(s32);
78 void initEffectKeeper(EffectKeeper*);
79 void initAudioKeeper(AudioKeeper*);
80 void initNerve(const Nerve*, s32);
81 void setMainGroupName(const char*);
82 void syncAction();
83
84 bool isAlive() const { return mIsAlive; }
85
86 LayoutExecuteInfo* getExecuteInfo() const { return mExecuteInfo; }
87
88 LayoutSceneInfo* getLayoutSceneInfo() const { return mLayoutSceneInfo; }
89
90private:
91 sead::FixedSafeString<0x80> mName;
92 NerveKeeper* mNerveKeeper;
93 LayoutKeeper* mLayoutKeeper;
94 LayoutActionKeeper* mLayoutActionKeeper;
95 LayoutTextPaneAnimator* mTextPaneAnimator;
96 EffectKeeper* mEffectKeeper;
97 AudioKeeper* mAudioKeeper;
98 LayoutExecuteInfo* mExecuteInfo;
99 HitReactionKeeper* mHitReactionKeeper;
100 LayoutSceneInfo* mLayoutSceneInfo;
101 LayoutPartsActorKeeper* mLayoutPartsActorKeeper;
102 bool mIsAlive;
103};
104} // namespace al
105