1#pragma once
2
3#include <basis/seadTypes.h>
4
5#include "Library/HostIO/HioNode.h"
6#include "Library/LiveActor/LiveActor.h"
7
8namespace al {
9class LiveActor;
10
11class LiveActorGroup : public HioNode {
12public:
13 LiveActorGroup(const char*, s32);
14
15 virtual s32 registerActor(LiveActor*);
16
17 void removeActor(const LiveActor*);
18 void removeActorAll();
19 bool isExistActor(const LiveActor*) const;
20 bool isFull() const;
21 s32 calcAliveActorNum() const;
22 LiveActor* getDeadActor() const;
23 LiveActor* tryFindDeadActor() const;
24 void appearAll();
25 void killAll();
26 void makeActorAliveAll();
27 void makeActorDeadAll();
28
29 s32 getMaxActorCount() const { return mMaxActorCount; }
30
31 s32 getActorCount() const { return mActorCount; }
32
33 LiveActor* getActor(s32 idx) const { return mActors[idx]; }
34
35private:
36 const char* mGroupName;
37 s32 mMaxActorCount;
38 s32 mActorCount;
39 LiveActor** mActors;
40};
41
42template <class T>
43class DeriveActorGroup : public LiveActorGroup {
44public:
45 DeriveActorGroup(const char* groupName, s32 groupCount)
46 : LiveActorGroup(groupName, groupCount) {}
47
48 T* getDeriveActor(s32 idx) const { return (T*)LiveActorGroup::getActor(idx); }
49
50 T* tryFindDeadDeriveActor() const { return (T*)LiveActorGroup::tryFindDeadActor(); }
51};
52} // namespace al
53