mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-26 18:44:33 +00:00
68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
#include "Library/Event/BalloonOrderGroup.h"
|
|
|
|
#include "Library/Event/EventFlowUtil.h"
|
|
#include "Library/Placement/PlacementId.h"
|
|
|
|
namespace al {
|
|
BalloonOrderGroup::BalloonOrderGroup(const PlacementInfo& info) {
|
|
mPlacementId = createPlacementId(info);
|
|
mRequesters = new Requester*[8];
|
|
}
|
|
|
|
bool BalloonOrderGroup::isEqual(const PlacementInfo& info) const {
|
|
PlacementId placementId;
|
|
if (!tryGetPlacementId(&placementId, info))
|
|
return false;
|
|
|
|
return PlacementId::isEqual(placementId, *mPlacementId);
|
|
}
|
|
|
|
void BalloonOrderGroup::registerRequester(const LiveActor* actor, const IUseEventFlowData* user,
|
|
const ActorInitInfo& info) {
|
|
Requester* requester = new Requester(actor, user, info);
|
|
|
|
for (s32 i = 0; i < mRequesterCount; i++) {
|
|
Requester* requesterTmp = mRequesters[i];
|
|
if (requester->ballonOrder < requesterTmp->ballonOrder) {
|
|
mRequesters[i] = requester;
|
|
requester = requesterTmp;
|
|
}
|
|
}
|
|
|
|
mRequesters[mRequesterCount] = requester;
|
|
mRequesterCount++;
|
|
}
|
|
|
|
bool BalloonOrderGroup::isEnableAppearBalloon(const LiveActor* actor) const {
|
|
if (!mIsActive)
|
|
return false;
|
|
|
|
Requester** requesters = mRequesters;
|
|
|
|
return requesters[mActiveRequesterIdx]->actor == actor;
|
|
}
|
|
|
|
void BalloonOrderGroup::update(const sead::Vector3f& position) {
|
|
mIsActive = false;
|
|
|
|
for (s32 i = 0; i < mRequesterCount; i++) {
|
|
if (checkInsideTerritoryPos(mRequesters[i]->user, mRequesters[i]->actor, position, 0.0f)) {
|
|
mIsActive = true;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!mIsActive)
|
|
return;
|
|
|
|
mShowStep++;
|
|
|
|
if (mRequesters[mActiveRequesterIdx]->ballonShowStep <= mShowStep) {
|
|
mShowStep = 0;
|
|
mActiveRequesterIdx =
|
|
mRequesterCount > mActiveRequesterIdx + 1 ? mActiveRequesterIdx + 1 : 0;
|
|
}
|
|
}
|
|
} // namespace al
|