| 1 | #pragma once |
| 2 | |
| 3 | #include <math/seadMatrix.h> |
| 4 | |
| 5 | #include "Library/Area/IUseAreaObj.h" |
| 6 | #include "Library/Audio/IUseAudioKeeper.h" |
| 7 | #include "Library/Camera/IUseCamera.h" |
| 8 | #include "Library/Collision/IUseCollision.h" |
| 9 | #include "Library/Effect/IUseEffectKeeper.h" |
| 10 | #include "Library/HostIO/HioNode.h" |
| 11 | #include "Library/Nature/NatureDirector.h" |
| 12 | #include "Library/Nerve/IUseNerve.h" |
| 13 | #include "Library/Rail/IUseRail.h" |
| 14 | #include "Library/Scene/IUseSceneObjHolder.h" |
| 15 | #include "Library/Stage/IUseStageSwitch.h" |
| 16 | |
| 17 | namespace al { |
| 18 | class ActorPoseKeeperBase; |
| 19 | class ActorExecuteInfo; |
| 20 | class ActorActionKeeper; |
| 21 | class ActorItemKeeper; |
| 22 | class ActorScoreKeeper; |
| 23 | class Collider; |
| 24 | class CollisionParts; |
| 25 | class ModelKeeper; |
| 26 | class NerveKeeper; |
| 27 | class HitSensorKeeper; |
| 28 | class ScreenPointKeeper; |
| 29 | class EffectKeeper; |
| 30 | class AudioKeeper; |
| 31 | class HitReactionKeeper; |
| 32 | class StageSwitchKeeper; |
| 33 | class RailKeeper; |
| 34 | class ShadowKeeper; |
| 35 | class ActorPrePassLightKeeper; |
| 36 | class ActorOcclusionKeeper; |
| 37 | class SubActorKeeper; |
| 38 | class ActorParamHolder; |
| 39 | struct ActorSceneInfo; |
| 40 | struct LiveActorFlag; |
| 41 | struct ActorInitInfo; |
| 42 | class HitSensor; |
| 43 | class SensorMsg; |
| 44 | class ScreenPointer; |
| 45 | class ScreenPointTarget; |
| 46 | |
| 47 | class LiveActor : public IUseNerve, |
| 48 | public IUseEffectKeeper, |
| 49 | public IUseAudioKeeper, |
| 50 | public IUseStageSwitch, |
| 51 | public IUseSceneObjHolder, |
| 52 | public IUseAreaObj, |
| 53 | public IUseCamera, |
| 54 | public IUseCollision, |
| 55 | public IUseRail, |
| 56 | public IUseHioNode { |
| 57 | public: |
| 58 | LiveActor(const char* actorName); |
| 59 | |
| 60 | NerveKeeper* getNerveKeeper() const override { return mNerveKeeper; } |
| 61 | |
| 62 | virtual void init(const ActorInitInfo& info) {} |
| 63 | |
| 64 | virtual void initAfterPlacement(); |
| 65 | virtual void appear(); |
| 66 | virtual void makeActorAlive(); |
| 67 | virtual void kill(); |
| 68 | virtual void makeActorDead(); |
| 69 | virtual void movement(); |
| 70 | virtual void calcAnim(); |
| 71 | virtual void draw() const; |
| 72 | virtual void startClipped(); |
| 73 | virtual void endClipped(); |
| 74 | |
| 75 | virtual void attackSensor(HitSensor* self, HitSensor* other) {} |
| 76 | |
| 77 | virtual bool receiveMsg(const SensorMsg* message, HitSensor* other, HitSensor* self) { |
| 78 | return false; |
| 79 | } |
| 80 | |
| 81 | virtual bool receiveMsgScreenPoint(const SensorMsg* message, ScreenPointer* source, |
| 82 | ScreenPointTarget* target) { |
| 83 | return false; |
| 84 | } |
| 85 | |
| 86 | virtual const char* getName() const override { return mName; } |
| 87 | |
| 88 | virtual const sead::Matrix34f* getBaseMtx() const; |
| 89 | |
| 90 | virtual EffectKeeper* getEffectKeeper() const override { return mEffectKeeper; } |
| 91 | |
| 92 | virtual AudioKeeper* getAudioKeeper() const override { return mAudioKeeper; } |
| 93 | |
| 94 | virtual StageSwitchKeeper* getStageSwitchKeeper() const override { return mStageSwitchKeeper; } |
| 95 | |
| 96 | virtual RailRider* getRailRider() const override; |
| 97 | virtual SceneObjHolder* getSceneObjHolder() const override; |
| 98 | virtual CollisionDirector* getCollisionDirector() const override; |
| 99 | virtual AreaObjDirector* getAreaObjDirector() const override; |
| 100 | virtual CameraDirector* getCameraDirector() const override; |
| 101 | NatureDirector* getNatureDirector() const; |
| 102 | virtual void initStageSwitchKeeper() override; |
| 103 | |
| 104 | virtual void control() {} |
| 105 | |
| 106 | virtual void updateCollider(); |
| 107 | |
| 108 | ActorSceneInfo* getSceneInfo() const; |
| 109 | void initPoseKeeper(ActorPoseKeeperBase* poseKeeper); |
| 110 | void initExecuteInfo(ActorExecuteInfo* executeInfo); |
| 111 | void initModelKeeper(ModelKeeper* modelKeeper); |
| 112 | void initActionKeeper(ActorActionKeeper* actionKeeper); |
| 113 | void initNerveKeeper(NerveKeeper* nerveKeeper); |
| 114 | void initHitSensor(s32 amount); |
| 115 | void initScreenPointKeeper(ScreenPointKeeper* screenPointKeeper); |
| 116 | void initEffectKeeper(EffectKeeper* effectKeeper); |
| 117 | void initAudioKeeper(AudioKeeper* audioKeeper); |
| 118 | void initRailKeeper(const ActorInitInfo& info, const char* linkName); |
| 119 | void initCollider(f32 radius, f32 offsetY, u32 allocatedHitInfo); |
| 120 | void initItemKeeper(s32 itemAmount); |
| 121 | void initScoreKeeper(); |
| 122 | void initActorPrePassLightKeeper(ActorPrePassLightKeeper* lightKeeper); |
| 123 | void initActorOcclusionKeeper(ActorOcclusionKeeper* occlusionKeeper); |
| 124 | void initSubActorKeeper(SubActorKeeper* subActorKeeper); |
| 125 | void initSceneInfo(ActorSceneInfo* sceneInfo); |
| 126 | |
| 127 | LiveActorFlag* getFlags() const { return mFlags; } |
| 128 | |
| 129 | ModelKeeper* getModelKeeper() const { return mModelKeeper; } |
| 130 | |
| 131 | ActorPoseKeeperBase* getPoseKeeper() const { return mPoseKeeper; } |
| 132 | |
| 133 | ActorExecuteInfo* getExecuteInfo() const { return mExecuteInfo; } |
| 134 | |
| 135 | ActorActionKeeper* getActorActionKeeper() const { return mActionKeeper; } |
| 136 | |
| 137 | ActorItemKeeper* getActorItemKeeper() const { return mItemKeeper; } |
| 138 | |
| 139 | ActorScoreKeeper* getActorScoreKeeper() const { return mScoreKeeper; } |
| 140 | |
| 141 | Collider* getCollider() const { return mCollider; } |
| 142 | |
| 143 | CollisionParts* getCollisionParts() const { return mCollisionParts; } |
| 144 | |
| 145 | HitSensorKeeper* getHitSensorKeeper() const { return mHitSensorKeeper; } |
| 146 | |
| 147 | ScreenPointKeeper* getScreenPointKeeper() const { return mScreenPointKeeper; } |
| 148 | |
| 149 | HitReactionKeeper* getHitReactionKeeper() const { return mHitReactionKeeper; } |
| 150 | |
| 151 | RailKeeper* getRailKeeper() const { return mRailKeeper; } |
| 152 | |
| 153 | ShadowKeeper* getShadowKeeper() const { return mShadowKeeper; } |
| 154 | |
| 155 | ActorPrePassLightKeeper* getActorPrePassLightKeeper() const { return mPrePassLightKeeper; } |
| 156 | |
| 157 | ActorOcclusionKeeper* getActorOcclusionKeeper() const { return mOcclusionKeeper; } |
| 158 | |
| 159 | SubActorKeeper* getSubActorKeeper() const { return mSubActorKeeper; } |
| 160 | |
| 161 | ActorParamHolder* getActorParamHolder() const { return mParamHolder; } |
| 162 | |
| 163 | void setName(const char* newName) { mName = newName; } |
| 164 | |
| 165 | protected: |
| 166 | friend class alActorFunction; |
| 167 | |
| 168 | private: |
| 169 | const char* mName = nullptr; |
| 170 | ActorPoseKeeperBase* mPoseKeeper = nullptr; |
| 171 | ActorExecuteInfo* mExecuteInfo = nullptr; |
| 172 | ActorActionKeeper* mActionKeeper = nullptr; |
| 173 | ActorItemKeeper* mItemKeeper = nullptr; |
| 174 | ActorScoreKeeper* mScoreKeeper = nullptr; |
| 175 | Collider* mCollider = nullptr; |
| 176 | CollisionParts* mCollisionParts = nullptr; |
| 177 | ModelKeeper* mModelKeeper = nullptr; |
| 178 | NerveKeeper* mNerveKeeper = nullptr; |
| 179 | HitSensorKeeper* mHitSensorKeeper = nullptr; |
| 180 | ScreenPointKeeper* mScreenPointKeeper = nullptr; |
| 181 | EffectKeeper* mEffectKeeper = nullptr; |
| 182 | AudioKeeper* mAudioKeeper = nullptr; |
| 183 | HitReactionKeeper* mHitReactionKeeper = nullptr; |
| 184 | StageSwitchKeeper* mStageSwitchKeeper = nullptr; |
| 185 | RailKeeper* mRailKeeper = nullptr; |
| 186 | ShadowKeeper* mShadowKeeper = nullptr; |
| 187 | ActorPrePassLightKeeper* mPrePassLightKeeper = nullptr; |
| 188 | ActorOcclusionKeeper* mOcclusionKeeper = nullptr; |
| 189 | SubActorKeeper* mSubActorKeeper = nullptr; |
| 190 | ActorParamHolder* mParamHolder = nullptr; |
| 191 | ActorSceneInfo* mSceneInfo = nullptr; |
| 192 | LiveActorFlag* mFlags = nullptr; |
| 193 | }; |
| 194 | } // namespace al |
| 195 | |