2023-12-13 00:40:16 -05:00
|
|
|
#include "Game/Effect/EffectSystem.hpp"
|
|
|
|
|
#include "Game/Effect/SingleEmitter.hpp"
|
|
|
|
|
#include "Game/Util/EffectUtil.hpp"
|
2023-03-02 18:11:22 -05:00
|
|
|
|
|
|
|
|
SingleEmitter::SingleEmitter() {
|
|
|
|
|
mEmitter = nullptr;
|
|
|
|
|
_4 = 0;
|
|
|
|
|
mGroupId = 0;
|
|
|
|
|
mSpawn = SINGLE_EMITTER_UNDEF_SPAWN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SingleEmitter::init(u16 unk) {
|
|
|
|
|
_4 = unk;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SingleEmitter::deleteEmitter() {
|
|
|
|
|
if (isValid()) {
|
|
|
|
|
MR::Effect::deleteParticleEmitter(mEmitter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-02 18:26:23 -05:00
|
|
|
void SingleEmitter::scanParticleEmitter(EffectSystem *pSystem) {
|
2023-03-02 18:11:22 -05:00
|
|
|
ParticleEmitter* emitter;
|
|
|
|
|
if (mSpawn == SINGLE_EMITTER_UNDEF_SPAWN) {
|
|
|
|
|
emitter = pSystem->createEmitter(_4, mGroupId, 0);
|
|
|
|
|
mSpawn = emitter->isContinuousParticle() ? SINGLE_EMITTER_CONTINUOUS_SPAWN : SINGLE_EMITTER_ONE_TIME_SPAWN;
|
|
|
|
|
pSystem->forceDeleteEmitter(emitter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SingleEmitter::isOneTime() const {
|
|
|
|
|
if (mEmitter) {
|
|
|
|
|
return !mEmitter->isContinuousParticle();
|
|
|
|
|
} else {
|
|
|
|
|
return !mSpawn;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SingleEmitter::isValid() const {
|
|
|
|
|
if (mEmitter == nullptr) {
|
|
|
|
|
return false;
|
2023-03-02 18:25:34 -05:00
|
|
|
} else {
|
|
|
|
|
return mEmitter->mManager;
|
2023-03-02 18:11:22 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SingleEmitter::link(ParticleEmitter *pEmitter) {
|
|
|
|
|
mEmitter = pEmitter;
|
|
|
|
|
MR::Effect::setLinkSingleEmitter(pEmitter, this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SingleEmitter::unlink() {
|
|
|
|
|
MR::Effect::setLinkSingleEmitter(mEmitter, nullptr);
|
|
|
|
|
mEmitter = nullptr;
|
|
|
|
|
}
|