mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-08 06:38:27 +03:00
84 lines
2.0 KiB
C++
84 lines
2.0 KiB
C++
/*
|
|
by korenkonder
|
|
GitHub/GitLab: korenkonder
|
|
*/
|
|
|
|
#include "glitter.hpp"
|
|
#include "../../KKdLib/prj/algorithm.hpp"
|
|
#include "../object.hpp"
|
|
#include "../texture.hpp"
|
|
|
|
namespace Glitter {
|
|
EffectGroup::EffectGroup(GLT) : load_count(), resources_count(),
|
|
resources(), scene(), not_loaded(), scene_init(), buffer_init(), hash() {
|
|
emission = 1.0f;
|
|
version = GLT_VAL == Glitter::X ? 0x0C : 0x09;
|
|
type = GLT_VAL;
|
|
#if SHARED_GLITTER_BUFFER
|
|
buffer = 0;
|
|
#endif
|
|
}
|
|
|
|
EffectGroup::~EffectGroup() {
|
|
#if SHARED_GLITTER_BUFFER
|
|
ebo.Destroy();
|
|
vbo.Destroy();
|
|
|
|
free_def(buffer);
|
|
#endif
|
|
|
|
for (Mesh& i : meshes)
|
|
if (i.object_set_hash != hash_murmurhash_empty) {
|
|
objset_info_storage_unload_set(i.object_set_hash);
|
|
i.load = false;
|
|
}
|
|
|
|
meshes.clear();
|
|
|
|
if (resources) {
|
|
texture_array_free(resources);
|
|
resources = 0;
|
|
}
|
|
|
|
for (Effect*& i : effects)
|
|
if (i) {
|
|
delete i;
|
|
i = 0;
|
|
}
|
|
effects.clear();
|
|
|
|
if (scene) {
|
|
delete scene;
|
|
scene = 0;
|
|
}
|
|
}
|
|
|
|
void EffectGroup::GetStartEndFrame(int32_t& start_frame, int32_t& end_frame) {
|
|
start_frame = INT32_MAX;
|
|
end_frame = 0;
|
|
|
|
for (Effect*& i : effects) {
|
|
if (!i)
|
|
continue;
|
|
|
|
Effect* effect = i;
|
|
int32_t life_time = effect->data.life_time;
|
|
start_frame = min_def(start_frame, effect->data.appear_time);
|
|
|
|
for (Emitter*& j : effect->emitters) {
|
|
if (!j)
|
|
continue;
|
|
|
|
Emitter* emitter = j;
|
|
life_time = max_def(life_time, emitter->data.life_time);
|
|
}
|
|
|
|
life_time += effect->data.appear_time;
|
|
|
|
end_frame = max_def(end_frame, life_time);
|
|
}
|
|
|
|
start_frame = min_def(start_frame, end_frame);
|
|
}
|
|
}
|