OdysseyDecomp/lib/al/Library/LiveActor/LiveActorGroup.cpp

96 lines
2.2 KiB
C++

#include "Library/LiveActor/LiveActorGroup.h"
#include "Library/LiveActor/ActorFlagFunction.h"
namespace al {
LiveActorGroup::LiveActorGroup(const char* groupName, s32 maxActors)
: mGroupName(groupName), mMaxActorCount(maxActors) {
mActorCount = 0;
mActors = new LiveActor*[maxActors];
}
s32 LiveActorGroup::registerActor(LiveActor* pActor) {
mActors[mActorCount] = pActor;
s32 count = mActorCount;
mActorCount = count + 1;
return count;
}
void LiveActorGroup::removeActor(const LiveActor* pActor) {
for (s32 i = 0; i < mActorCount; i++) {
if (mActors[i] == pActor) {
mActors[i] = mActors[mActorCount - 1];
mActorCount--;
break;
}
}
}
void LiveActorGroup::removeActorAll() {
mActorCount = 0;
}
bool LiveActorGroup::isExistActor(const LiveActor* pActor) const {
if (mActorCount < 1)
return false;
for (s32 i = 0; i < mActorCount; i++)
if (mActors[i] == pActor)
return true;
return false;
}
bool LiveActorGroup::isFull() const {
return mActorCount >= mMaxActorCount;
}
s32 LiveActorGroup::calcAliveActorNum() const {
s32 count = 0;
for (s32 i = 0; i < mActorCount; i++)
if (!isDead(mActors[i]))
count++;
return count;
}
LiveActor* LiveActorGroup::getDeadActor() const {
for (s32 i = 0; i < mActorCount; i++)
if (isDead(mActors[i]))
return mActors[i];
return nullptr;
}
LiveActor* LiveActorGroup::tryFindDeadActor() const {
for (s32 i = 0; i < mActorCount; i++)
if (isDead(mActors[i]))
return mActors[i];
return nullptr;
}
void LiveActorGroup::appearAll() {
for (s32 i = 0; i < mActorCount; i++)
if (isDead(mActors[i]))
mActors[i]->appear();
}
void LiveActorGroup::killAll() {
for (s32 i = 0; i < mActorCount; i++)
if (isAlive(mActors[i]))
mActors[i]->kill();
}
void LiveActorGroup::makeActorAliveAll() {
for (s32 i = 0; i < mActorCount; i++)
mActors[i]->makeActorAlive();
}
void LiveActorGroup::makeActorDeadAll() {
for (s32 i = 0; i < mActorCount; i++)
mActors[i]->makeActorDead();
}
} // namespace al