mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-09 06:59:47 +03:00
60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
/*
|
|
by korenkonder
|
|
GitHub/GitLab: korenkonder
|
|
*/
|
|
|
|
#include "glitter.hpp"
|
|
|
|
namespace Glitter {
|
|
Effect::Data::Data(GLT) : appear_time(), life_time(), start_time(), ext_anim(),
|
|
flags(), emission(), seed(), ext_anim_end_time() {
|
|
color = 0xFFFFFFFF;
|
|
name_hash = GLT_VAL != Glitter::FT
|
|
? hash_murmurhash_empty : hash_fnv1a64m_empty;
|
|
ext_anim_is_x = GLT_VAL == Glitter::X;
|
|
}
|
|
|
|
Effect::Effect(GLT) : data(GLT_VAL) {
|
|
version = GLT_VAL == Glitter::X ? 0x0C : 0x07;
|
|
}
|
|
|
|
Effect::~Effect() {
|
|
for (Emitter*& i : emitters)
|
|
delete i;
|
|
|
|
if (data.ext_anim)
|
|
free(data.ext_anim);
|
|
}
|
|
|
|
Effect& Effect::operator=(const Effect& eff) {
|
|
Node::operator=(eff);
|
|
if (data.ext_anim)
|
|
free(data.ext_anim);
|
|
|
|
data = eff.data;
|
|
version = eff.version;
|
|
|
|
if (eff.data.ext_anim)
|
|
if (!data.ext_anim_is_x) {
|
|
data.ext_anim = force_malloc<Effect::ExtAnim>();
|
|
*data.ext_anim = *eff.data.ext_anim;
|
|
}
|
|
else {
|
|
data.ext_anim_x = force_malloc<Effect::ExtAnimX>();
|
|
*data.ext_anim_x = *eff.data.ext_anim_x;
|
|
}
|
|
|
|
for (Emitter*& i : emitters)
|
|
delete i;
|
|
emitters.clear();
|
|
|
|
emitters.reserve(eff.emitters.size());
|
|
for (Emitter* i : eff.emitters) {
|
|
Emitter* emit = new Emitter(i->version > 0x02 ? Glitter::X : Glitter::F2);
|
|
*emit = *i;
|
|
emitters.push_back(emit);
|
|
}
|
|
return *this;
|
|
}
|
|
}
|