From b52acdf44e3ae4cd52e57b0b8299092fbd8f07dd Mon Sep 17 00:00:00 2001 From: korenkonder Date: Thu, 12 Dec 2024 17:35:54 +0300 Subject: [PATCH] Glitter Editor: Fixed displaying of Selected Mesh Particles --- src/CRE/Glitter/render_scene.cpp | 25 +++++++++++++++++++++---- src/CRE/Glitter/scene.cpp | 7 ++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/CRE/Glitter/render_scene.cpp b/src/CRE/Glitter/render_scene.cpp index 008e4ba4..cd004553 100644 --- a/src/CRE/Glitter/render_scene.cpp +++ b/src/CRE/Glitter/render_scene.cpp @@ -1137,7 +1137,6 @@ namespace Glitter { disp_quad = 0; disp_line = 0; disp_locus = 0; - disp_mesh = 0; Effect* eff = GPM_VAL->selected_effect; Emitter* emit = GPM_VAL->selected_emitter; @@ -1889,7 +1888,7 @@ namespace Glitter { Effect* eff = GPM_VAL->selected_effect; Emitter* emit = GPM_VAL->selected_emitter; Particle* ptcl = GPM_VAL->selected_particle; - for (XRenderGroup* i : groups) { + for (XRenderGroup*& i : groups) { if (!i) continue; @@ -2082,18 +2081,36 @@ namespace Glitter { void XRenderScene::DispMesh(GPM) { disp_mesh = 0; + Effect* eff = GPM_VAL->selected_effect; + Emitter* emit = GPM_VAL->selected_emitter; + Particle* ptcl = GPM_VAL->selected_particle; for (XRenderGroup*& i : groups) { if (!i) continue; XRenderGroup* rend_group = i; - if (rend_group->CannotDisp()) + if (rend_group->CannotDisp() && !GPM_VAL->draw_all) continue; switch (rend_group->type) { case PARTICLE_MESH: rend_group->disp = 0; - DispMesh(GPM_VAL, rend_group); + if (!GPM_VAL->draw_selected || !eff) { + DispMesh(GPM_VAL, rend_group); + } + else if ((eff && ptcl) || (eff && !emit)) { + if (!ptcl || rend_group->particle->particle == ptcl) + DispMesh(GPM_VAL, rend_group); + } + else if (emit) + for (Particle*& j : emit->particles) { + if (!j) + continue; + + Particle* particle = j; + if (rend_group->particle->particle == particle) + DispMesh(GPM_VAL, rend_group); + } disp_mesh += rend_group->disp; break; } diff --git a/src/CRE/Glitter/scene.cpp b/src/CRE/Glitter/scene.cpp index 04247a69..5299d3e7 100644 --- a/src/CRE/Glitter/scene.cpp +++ b/src/CRE/Glitter/scene.cpp @@ -182,8 +182,13 @@ namespace Glitter { return; for (SceneEffect& i : effects) - if (i.ptr && i.disp) + if (i.ptr && i.disp) { + if (GPM_VAL->draw_selected && GPM_VAL->selected_effect + && GPM_VAL->selected_effect != i.ptr->effect) + continue; + i.ptr->DispMesh(GPM_VAL); + } } size_t Scene::GetCtrlCount(ParticleType ptcl_type) {