From 4038665d08eaea63d59b91979838a1616327a80b Mon Sep 17 00:00:00 2001 From: Xottab-DUTY Date: Sat, 21 Apr 2018 21:50:11 +0500 Subject: [PATCH] Layers/xrRender: code refactoring and cleanup Minor cleanup for other files --- src/Layers/xrRender/ParticleGroup.cpp | 262 ++++++++++++++------------ src/Layers/xrRender/ParticleGroup.h | 7 +- src/xrCore/Threading/ScopeLock.hpp | 2 + src/xrEngine/xr_object_list.cpp | 6 +- src/xrGame/ParticlesObject.cpp | 4 - src/xrGame/ParticlesObject.h | 7 +- 6 files changed, 147 insertions(+), 141 deletions(-) diff --git a/src/Layers/xrRender/ParticleGroup.cpp b/src/Layers/xrRender/ParticleGroup.cpp index 27b3fda8c8b..9ca6ca4ddd5 100644 --- a/src/Layers/xrRender/ParticleGroup.cpp +++ b/src/Layers/xrRender/ParticleGroup.cpp @@ -1,5 +1,4 @@ #include "stdafx.h" -#pragma hdrstop #include "xrParticles/psystem.h" @@ -22,8 +21,8 @@ CPGDef::CPGDef() CPGDef::~CPGDef() { - for (auto it = m_Effects.begin(); it != m_Effects.end(); it++) - xr_delete(*it); + for (auto& it : m_Effects) + xr_delete(it); m_Effects.clear(); } @@ -66,23 +65,23 @@ BOOL CPGDef::Load(IReader& F) else m_fTimeLimit = 0.0f; - bool dont_calc_timelimit = m_fTimeLimit > 0.0f; + const bool dontCalcTimeLimit = m_fTimeLimit > 0.0f; if (F.find_chunk(PGD_CHUNK_EFFECTS)) { m_Effects.resize(F.r_u32()); - for (auto it = m_Effects.begin(); it != m_Effects.end(); it++) + for (auto& it : m_Effects) { - *it = new SEffect(); - F.r_stringZ((*it)->m_EffectName); - F.r_stringZ((*it)->m_OnPlayChildName); - F.r_stringZ((*it)->m_OnBirthChildName); - F.r_stringZ((*it)->m_OnDeadChildName); - (*it)->m_Time0 = F.r_float(); - (*it)->m_Time1 = F.r_float(); - (*it)->m_Flags.assign(F.r_u32()); - - if (!dont_calc_timelimit) - m_fTimeLimit = _max(m_fTimeLimit, (*it)->m_Time1); + it = new SEffect(); + F.r_stringZ(it->m_EffectName); + F.r_stringZ(it->m_OnPlayChildName); + F.r_stringZ(it->m_OnBirthChildName); + F.r_stringZ(it->m_OnDeadChildName); + it->m_Time0 = F.r_float(); + it->m_Time1 = F.r_float(); + it->m_Flags.assign(F.r_u32()); + + if (!dontCalcTimeLimit) + m_fTimeLimit = _max(m_fTimeLimit, it->m_Time1); } } return TRUE; @@ -90,27 +89,28 @@ BOOL CPGDef::Load(IReader& F) BOOL CPGDef::Load2(CInifile& ini) { - //. u16 version = ini.r_u16("_group", "version"); + //u16 version = ini.r_u16("_group", "version"); m_Flags.assign(ini.r_u32("_group", "flags")); m_Effects.resize(ini.r_u32("_group", "effects_count")); u32 counter = 0; string256 buff; - for (auto it = m_Effects.begin(); it != m_Effects.end(); ++it, ++counter) + for (auto& it : m_Effects) { - *it = new SEffect(); + it = new SEffect(); xr_sprintf(buff, sizeof(buff), "effect_%04d", counter); - (*it)->m_EffectName = ini.r_string(buff, "effect_name"); - (*it)->m_OnPlayChildName = ini.r_string(buff, "on_play_child"); - (*it)->m_OnBirthChildName = ini.r_string(buff, "on_birth_child"); - (*it)->m_OnDeadChildName = ini.r_string(buff, "on_death_child"); + it->m_EffectName = ini.r_string(buff, "effect_name"); + it->m_OnPlayChildName = ini.r_string(buff, "on_play_child"); + it->m_OnBirthChildName = ini.r_string(buff, "on_birth_child"); + it->m_OnDeadChildName = ini.r_string(buff, "on_death_child"); - (*it)->m_Time0 = ini.r_float(buff, "time0"); - (*it)->m_Time1 = ini.r_float(buff, "time1"); - (*it)->m_Flags.assign(ini.r_u32(buff, "flags")); + it->m_Time0 = ini.r_float(buff, "time0"); + it->m_Time1 = ini.r_float(buff, "time1"); + it->m_Flags.assign(ini.r_u32(buff, "flags")); + ++counter; } m_fTimeLimit = ini.r_float("_group", "timelimit"); return TRUE; @@ -130,15 +130,15 @@ void CPGDef::Save(IWriter& F) F.open_chunk(PGD_CHUNK_EFFECTS); F.w_u32(m_Effects.size()); - for (auto it = m_Effects.begin(); it != m_Effects.end(); it++) + for (auto& it : m_Effects) { - F.w_stringZ((*it)->m_EffectName); - F.w_stringZ((*it)->m_OnPlayChildName); - F.w_stringZ((*it)->m_OnBirthChildName); - F.w_stringZ((*it)->m_OnDeadChildName); - F.w_float((*it)->m_Time0); - F.w_float((*it)->m_Time1); - F.w_u32((*it)->m_Flags.get()); + F.w_stringZ(it->m_EffectName); + F.w_stringZ(it->m_OnPlayChildName); + F.w_stringZ(it->m_OnBirthChildName); + F.w_stringZ(it->m_OnDeadChildName); + F.w_float(it->m_Time0); + F.w_float(it->m_Time1); + F.w_u32(it->m_Flags.get()); } F.close_chunk(); @@ -157,20 +157,21 @@ void CPGDef::Save2(CInifile& ini) u32 counter = 0; string256 buff; - for (auto it = m_Effects.begin(); it != m_Effects.end(); ++it, ++counter) + + for (auto& it : m_Effects) { xr_sprintf(buff, sizeof(buff), "effect_%04d", counter); - ini.w_string(buff, "effect_name", (*it)->m_EffectName.c_str()); + ini.w_string(buff, "effect_name", it->m_EffectName.c_str()); ini.w_string( - buff, "on_play_child", (*it)->m_Flags.test(SEffect::flOnPlayChild) ? (*it)->m_OnPlayChildName.c_str() : ""); + buff, "on_play_child", it->m_Flags.test(SEffect::flOnPlayChild) ? it->m_OnPlayChildName.c_str() : ""); ini.w_string(buff, "on_birth_child", - (*it)->m_Flags.test(SEffect::flOnBirthChild) ? (*it)->m_OnBirthChildName.c_str() : ""); + it->m_Flags.test(SEffect::flOnBirthChild) ? it->m_OnBirthChildName.c_str() : ""); ini.w_string(buff, "on_death_child", - (*it)->m_Flags.test(SEffect::flOnDeadChild) ? (*it)->m_OnDeadChildName.c_str() : ""); - ini.w_float(buff, "time0", (*it)->m_Time0); - ini.w_float(buff, "time1", (*it)->m_Time1); - ini.w_u32(buff, "flags", (*it)->m_Flags.get()); + it->m_Flags.test(SEffect::flOnDeadChild) ? it->m_OnDeadChildName.c_str() : ""); + ini.w_float(buff, "time0", it->m_Time0); + ini.w_float(buff, "time1", it->m_Time1); + ini.w_u32(buff, "flags", it->m_Flags.get()); } ini.w_float("_group", "timelimit", m_fTimeLimit); @@ -183,12 +184,12 @@ void CParticleGroup::SItem::Clear() { VisualVec visuals; GetVisuals(visuals); - for (auto it = visuals.begin(); it != visuals.end(); it++) + for (auto& it : visuals) { - // GEnv.Render->model_Delete(*it); - IRenderVisual* pVisual = smart_cast(*it); + // GEnv.Render->model_Delete(it); + IRenderVisual* pVisual = smart_cast(it); GEnv.Render->model_Delete(pVisual); - *it = nullptr; + it = nullptr; } // Igor: zero all pointers! Previous code didn't zero _source_ pointers, @@ -274,28 +275,31 @@ void CParticleGroup::SItem::Stop(BOOL def_stop) if (E) E->Stop(def_stop); - for (auto it = _children_related.begin(); it != _children_related.end(); it++) - static_cast(*it)->Stop(def_stop); - for (auto it = _children_free.begin(); it != _children_free.end(); it++) - static_cast(*it)->Stop(def_stop); + for (auto& it : _children_related) + static_cast(it)->Stop(def_stop); + + for (auto& it : _children_free) + static_cast(it)->Stop(def_stop); // and delete if !deffered if (!def_stop) { - for (auto it = _children_related.begin(); it != _children_related.end(); it++) + for (auto& it : _children_related) { - // GEnv.Render->model_Delete(*it); - IRenderVisual* pVisual = smart_cast(*it); + // GEnv.Render->model_Delete(it); + IRenderVisual* pVisual = smart_cast(it); GEnv.Render->model_Delete(pVisual); - *it = nullptr; + it = nullptr; } - for (auto it = _children_free.begin(); it != _children_free.end(); it++) + + for (auto& it : _children_free) { - // GEnv.Render->model_Delete(*it); - IRenderVisual* pVisual = smart_cast(*it); + // GEnv.Render->model_Delete(it); + IRenderVisual* pVisual = smart_cast(it); GEnv.Render->model_Delete(pVisual); - *it = nullptr; + it = nullptr; } + _children_related.clear(); _children_free.clear(); } @@ -319,14 +323,19 @@ void OnGroupParticleBirth(void* owner, u32 param, PAPI::Particle& m, u32 idx) { CParticleGroup* PG = static_cast(owner); VERIFY(PG); + CParticleEffect* PE = static_cast(PG->items[param]._effect); PS::OnEffectParticleBirth(PE, param, m, idx); + // if have child const CPGDef* PGD = PG->GetDefinition(); VERIFY(PGD); + const CPGDef::SEffect* eff = PGD->m_Effects[param]; + if (eff->m_Flags.is(CPGDef::SEffect::flOnBirthChild)) PG->items[param].StartFreeChild(PE, *eff->m_OnBirthChildName, m); + if (eff->m_Flags.is(CPGDef::SEffect::flOnPlayChild)) PG->items[param].StartRelatedChild(PE, *eff->m_OnPlayChildName, m); } @@ -334,14 +343,19 @@ void OnGroupParticleDead(void* owner, u32 param, PAPI::Particle& m, u32 idx) { CParticleGroup* PG = static_cast(owner); VERIFY(PG); + CParticleEffect* PE = static_cast(PG->items[param]._effect); PS::OnEffectParticleDead(PE, param, m, idx); + // if have child const CPGDef* PGD = PG->GetDefinition(); VERIFY(PGD); + const CPGDef::SEffect* eff = PGD->m_Effects[param]; + if (eff->m_Flags.is(CPGDef::SEffect::flOnPlayChild)) PG->items[param].StopRelatedChild(idx); + if (eff->m_Flags.is(CPGDef::SEffect::flOnDeadChild)) PG->items[param].StartFreeChild(PE, *eff->m_OnDeadChildName, m); } @@ -387,24 +401,22 @@ void CParticleGroup::SItem::OnFrame(u32 u_dt, const CPGDef::SEffect& def, Fbox& if (!_children_related.empty()) { - for (auto it = _children_related.begin(); it != _children_related.end(); it++) + for (auto& it : _children_related) { - CParticleEffect* E = static_cast(*it); - if (E) + CParticleEffect* effect = static_cast(it); + if (effect) { - E->OnFrame(u_dt); - if (E->IsPlaying()) + effect->OnFrame(u_dt); + if (effect->IsPlaying()) { bPlaying = true; - if (E->vis.box.is_valid()) - box.merge(E->vis.box); + if (effect->vis.box.is_valid()) + box.merge(effect->vis.box); } else { if (def.m_Flags.is(CPGDef::SEffect::flOnPlayChildRewind)) - { - E->Play(); - } + effect->Play(); } } } @@ -412,9 +424,9 @@ void CParticleGroup::SItem::OnFrame(u32 u_dt, const CPGDef::SEffect& def, Fbox& if (!_children_free.empty()) { u32 rem_cnt = 0; - for (auto it = _children_free.begin(); it != _children_free.end(); it++) + for (auto it : _children_free) { - CParticleEffect* E = static_cast(*it); + CParticleEffect* E = static_cast(it); if (E) { E->OnFrame(u_dt); @@ -427,10 +439,10 @@ void CParticleGroup::SItem::OnFrame(u32 u_dt, const CPGDef::SEffect& def, Fbox& else { rem_cnt++; - // GEnv.Render->model_Delete(*it); - IRenderVisual* pVisual = smart_cast(*it); + // GEnv.Render->model_Delete(it); + IRenderVisual* pVisual = smart_cast(it); GEnv.Render->model_Delete(pVisual); - *it = nullptr; + it = nullptr; } } } @@ -447,23 +459,23 @@ void CParticleGroup::SItem::OnDeviceCreate() { VisualVec visuals; GetVisuals(visuals); - for (auto it = visuals.begin(); it != visuals.end(); it++) - static_cast(*it)->OnDeviceCreate(); + for (auto& it : visuals) + static_cast(it)->OnDeviceCreate(); } void CParticleGroup::SItem::OnDeviceDestroy() { VisualVec visuals; GetVisuals(visuals); - for (auto it = visuals.begin(); it != visuals.end(); it++) - static_cast(*it)->OnDeviceDestroy(); + for (auto& it : visuals) + static_cast(it)->OnDeviceDestroy(); } u32 CParticleGroup::SItem::ParticlesCount() { u32 p_count = 0; VisualVec visuals; GetVisuals(visuals); - for (auto it = visuals.begin(); it != visuals.end(); it++) - p_count += static_cast(*it)->ParticlesCount(); + for (auto& it : visuals) + p_count += static_cast(it)->ParticlesCount(); return p_count; } @@ -478,9 +490,9 @@ CParticleGroup::CParticleGroup() CParticleGroup::~CParticleGroup() { - // Msg ("!!! destroy PG"); - for (u32 i = 0; i < items.size(); i++) - items[i].Clear(); + for (auto& item : items) + item.Clear(); + items.clear(); } @@ -488,42 +500,45 @@ void CParticleGroup::OnFrame(u32 u_dt) { if (m_Def && m_RT_Flags.is(flRT_Playing)) { - float ct = m_CurrentTime; - float f_dt = float(u_dt) / 1000.f; - for (CPGDef::EffectVec::const_iterator e_it = m_Def->m_Effects.begin(); e_it != m_Def->m_Effects.end(); e_it++) + const float ct = m_CurrentTime; + const float f_dt = float(u_dt) / 1000.f; + for (auto e_it = m_Def->m_Effects.cbegin(); e_it != m_Def->m_Effects.cend(); ++e_it) { - if ((*e_it)->m_Flags.is(CPGDef::SEffect::flEnabled)) + const auto particleEffect = *e_it; + + if (particleEffect->m_Flags.is(CPGDef::SEffect::flEnabled)) { VERIFY(items.size() == m_Def->m_Effects.size()); - SItem& I = items[e_it - m_Def->m_Effects.begin()]; - if (I.IsPlaying()) + SItem& item = items[e_it - m_Def->m_Effects.begin()]; + + if (item.IsPlaying()) { - if ((ct <= (*e_it)->m_Time1) && (ct + f_dt >= (*e_it)->m_Time1)) - I.Stop((*e_it)->m_Flags.is(CPGDef::SEffect::flDefferedStop)); + if (ct <= particleEffect->m_Time1 && ct + f_dt >= particleEffect->m_Time1) + item.Stop(particleEffect->m_Flags.is(CPGDef::SEffect::flDefferedStop)); } else { if (!m_RT_Flags.is(flRT_DefferedStop)) - if ((ct <= (*e_it)->m_Time0) && (ct + f_dt >= (*e_it)->m_Time0)) - I.Play(); + if (ct <= particleEffect->m_Time0 && ct + f_dt >= particleEffect->m_Time0) + item.Play(); } } } m_CurrentTime += f_dt; - if ((m_CurrentTime > m_Def->m_fTimeLimit) && (m_Def->m_fTimeLimit > 0.f)) + if (m_CurrentTime > m_Def->m_fTimeLimit && m_Def->m_fTimeLimit > 0.f) if (!m_RT_Flags.is(flRT_DefferedStop)) Stop(true); - bool bPlaying = false; + bool isPlaying = false; Fbox box; box.invalidate(); - for (auto i_it = items.begin(); i_it != items.end(); i_it++) - i_it->OnFrame(u_dt, *m_Def->m_Effects[i_it - items.begin()], box, bPlaying); - if (m_RT_Flags.is(flRT_DefferedStop) && !bPlaying) - { - m_RT_Flags.set(flRT_Playing | flRT_DefferedStop, FALSE); - } + for (auto item = items.begin(); item != items.end(); ++item) + item->OnFrame(u_dt, *m_Def->m_Effects[item - items.begin()], box, isPlaying); + + if (m_RT_Flags.is(flRT_DefferedStop) && !isPlaying) + m_RT_Flags.set(flRT_Playing | flRT_DefferedStop, false); + if (box.is_valid()) { vis.box.set(box); @@ -541,22 +556,26 @@ void CParticleGroup::OnFrame(u32 u_dt) void CParticleGroup::UpdateParent(const Fmatrix& m, const Fvector& velocity, BOOL bXFORM) { m_InitialPosition = m.c; - for (auto i_it = items.begin(); i_it != items.end(); i_it++) - i_it->UpdateParent(m, velocity, bXFORM); + + for (auto& item : items) + item.UpdateParent(m, velocity, bXFORM); } BOOL CParticleGroup::Compile(CPGDef* def) { m_Def = def; + // destroy existing - for (auto i_it = items.begin(); i_it != items.end(); i_it++) - i_it->Clear(); + for (auto& item : items) + item.Clear(); + items.clear(); + // create new if (m_Def) { items.resize(m_Def->m_Effects.size()); - for (CPGDef::EffectVec::const_iterator e_it = m_Def->m_Effects.begin(); e_it != m_Def->m_Effects.end(); e_it++) + for (auto e_it = m_Def->m_Effects.cbegin(); e_it != m_Def->m_Effects.cend(); ++e_it) { CParticleEffect* eff = (CParticleEffect*)RImplementation.model_CreatePE(*(*e_it)->m_EffectName); eff->SetBirthDeadCB(OnGroupParticleBirth, OnGroupParticleDead, this, u32(e_it - m_Def->m_Effects.begin())); @@ -569,49 +588,46 @@ BOOL CParticleGroup::Compile(CPGDef* def) void CParticleGroup::Play() { m_CurrentTime = 0; - m_RT_Flags.set(flRT_DefferedStop, FALSE); - m_RT_Flags.set(flRT_Playing, TRUE); + m_RT_Flags.set(flRT_DefferedStop, false); + m_RT_Flags.set(flRT_Playing, true); } void CParticleGroup::Stop(BOOL bDefferedStop) { if (bDefferedStop) - { - m_RT_Flags.set(flRT_DefferedStop, TRUE); - } + m_RT_Flags.set(flRT_DefferedStop, true); else - { - m_RT_Flags.set(flRT_Playing, FALSE); - } - for (auto i_it = items.begin(); i_it != items.end(); i_it++) - i_it->Stop(bDefferedStop); + m_RT_Flags.set(flRT_Playing, false); + + for (auto& item : items) + item.Stop(bDefferedStop); } void CParticleGroup::OnDeviceCreate() { - for (auto i_it = items.begin(); i_it != items.end(); i_it++) - i_it->OnDeviceCreate(); + for (auto& item : items) + item.OnDeviceCreate(); } void CParticleGroup::OnDeviceDestroy() { - for (auto i_it = items.begin(); i_it != items.end(); i_it++) - i_it->OnDeviceDestroy(); + for (auto& item : items) + item.OnDeviceDestroy(); } u32 CParticleGroup::ParticlesCount() { int p_count = 0; - for (auto i_it = items.begin(); i_it != items.end(); i_it++) - p_count += i_it->ParticlesCount(); + for (auto& item : items) + p_count += item.ParticlesCount(); return p_count; } void CParticleGroup::SetHudMode(BOOL b) { - for (auto i_it = items.begin(); i_it != items.end(); ++i_it) + for (auto& item : items) { - CParticleEffect* E = static_cast(i_it->_effect); + CParticleEffect* E = static_cast(item._effect); E->SetHudMode(b); } } diff --git a/src/Layers/xrRender/ParticleGroup.h b/src/Layers/xrRender/ParticleGroup.h index 0942bd8a95c..5da59ed1d41 100644 --- a/src/Layers/xrRender/ParticleGroup.h +++ b/src/Layers/xrRender/ParticleGroup.h @@ -1,6 +1,4 @@ -//--------------------------------------------------------------------------- -#ifndef ParticleGroupH -#define ParticleGroupH +#pragma once #include "Layers/xrRender/dxParticleCustom.h" @@ -168,6 +166,3 @@ class ECORE_API CParticleGroup : public dxParticleCustom #define PGD_CHUNK_EFFECTS 0x0004 // obsolete #define PGD_CHUNK_TIME_LIMIT 0x0005 #define PGD_CHUNK_EFFECTS2 0x0007 - -//--------------------------------------------------------------------------- -#endif diff --git a/src/xrCore/Threading/ScopeLock.hpp b/src/xrCore/Threading/ScopeLock.hpp index 77328cfc670..6aec89bdac2 100644 --- a/src/xrCore/Threading/ScopeLock.hpp +++ b/src/xrCore/Threading/ScopeLock.hpp @@ -2,6 +2,8 @@ #include "Common/Noncopyable.hpp" +class Lock; + class XRCORE_API ScopeLock : Noncopyable { Lock* syncObject; diff --git a/src/xrEngine/xr_object_list.cpp b/src/xrEngine/xr_object_list.cpp index 5919881c5d9..304c68a26a8 100644 --- a/src/xrEngine/xr_object_list.cpp +++ b/src/xrEngine/xr_object_list.cpp @@ -201,10 +201,10 @@ void CObjectList::SingleUpdate(IGameObject* O) void CObjectList::clear_crow_vec(Objects& o) { - for (u32 _it = 0; _it < o.size(); _it++) + for (auto& it : o) { - // Msg ("[%d][0x%08x]IAmNotACrowAnyMore (clear_crow_vec)", Device.dwFrame, dynamic_cast(o[_it])); - o[_it]->IAmNotACrowAnyMore(); + // Msg ("[%d][0x%08x]IAmNotACrowAnyMore (clear_crow_vec)", Device.dwFrame, dynamic_cast(it)); + it->IAmNotACrowAnyMore(); } o.clear(); } diff --git a/src/xrGame/ParticlesObject.cpp b/src/xrGame/ParticlesObject.cpp index 09e831629ed..c1a068a405f 100644 --- a/src/xrGame/ParticlesObject.cpp +++ b/src/xrGame/ParticlesObject.cpp @@ -1,8 +1,4 @@ -//---------------------------------------------------- -// file: PSObject.cpp -//---------------------------------------------------- #include "stdafx.h" -#pragma hdrstop #include "ParticlesObject.h" #include "xrEngine/defines.h" diff --git a/src/xrGame/ParticlesObject.h b/src/xrGame/ParticlesObject.h index ffd172e57dc..7044b0d4bc7 100644 --- a/src/xrGame/ParticlesObject.h +++ b/src/xrGame/ParticlesObject.h @@ -1,5 +1,4 @@ -#ifndef ParticlesObjectH -#define ParticlesObjectH +#pragma once #include "xrEngine/PS_instance.h" @@ -7,7 +6,7 @@ extern const Fvector zero_vel; class CParticlesObject : public CPS_Instance { - typedef CPS_Instance inherited; + using inherited = CPS_Instance; u32 dwLastTime; void Init(LPCSTR p_name, IRender_Sector* S, BOOL bAutoRemove); @@ -63,5 +62,3 @@ class CParticlesObject : public CPS_Instance } } }; - -#endif /*ParticlesObjectH*/