MCPcopy Create free account
hub / github.com/defold/defold / UpdateParticleRenderState

Function UpdateParticleRenderState

engine/particle/src/particle.cpp:1976–2027  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1974 }
1975
1976 static void UpdateParticleRenderState(Particle& particle, const AnimationData& anim_data, const ParticleRenderContext& render_context)
1977 {
1978 ParticleRenderState& render_state = particle.m_RenderState;
1979 uint32_t tile = render_context.m_StartTile;
1980 if (render_context.m_AnimPlaying)
1981 {
1982 float anim_cursor = particle.GetMaxLifeTime() - particle.GetTimeLeft() - render_context.m_HalfDt;
1983 float anim_t = render_context.m_AnimOnce ? anim_cursor * particle.GetooMaxLifeTime() : anim_cursor * render_context.m_InvAnimLength;
1984 tile = ((uint32_t)(render_context.m_TileCount * anim_t)) % render_context.m_TileCount;
1985 if (tile >= render_context.m_Interval)
1986 {
1987 tile = (render_context.m_Interval - 1) * 2 - tile;
1988 }
1989 if (render_context.m_AnimBackward)
1990 {
1991 tile = render_context.m_TileCount - tile - 1;
1992 }
1993 tile += render_context.m_StartTile;
1994 }
1995
1996 float half_width = render_context.m_BaseHalfWidth;
1997 float half_height = render_context.m_BaseHalfHeight;
1998 Vector3 size = particle.GetScale();
1999 if (render_context.m_AnimAutoSize)
2000 {
2001 const float* tex_dims = &anim_data.m_TexDims[tile << 1];
2002 half_width = tex_dims[0] * 0.5f;
2003 half_height = tex_dims[1] * 0.5f;
2004 }
2005 else
2006 {
2007 size *= particle.GetSourceSize();
2008 }
2009
2010 dmTransform::Transform particle_transform;
2011 particle_transform.SetIdentity();
2012 particle_transform.SetTranslation(Vector3(particle.GetPosition()));
2013 particle_transform.SetRotation(particle.GetRotation());
2014 particle_transform.SetScale(size);
2015 particle_transform.SetRotation(render_context.m_EmissionTransform.GetRotation() * particle_transform.GetRotation());
2016 particle_transform.SetTranslation(Vector3(Apply(render_context.m_EmissionTransform, Point3(particle_transform.GetTranslation()))));
2017 particle_transform.SetScale(render_context.m_EmissionTransform.GetScale() * particle_transform.GetScale());
2018 particle_transform = dmTransform::Mul(particle_transform, render_context.m_PivotTransform);
2019
2020 const Vector3 scale = particle_transform.GetScale();
2021 render_state.m_WorldTransform.SetTranslation(particle_transform.GetTranslation());
2022 render_state.m_WorldTransform.SetRotation(particle_transform.GetRotation());
2023 render_state.m_WorldTransform.SetScale(1.0f);
2024 render_state.m_HalfWidth = half_width * scale.getX();
2025 render_state.m_HalfHeight = half_height * scale.getY();
2026 render_state.m_Tile = tile;
2027 }
2028
2029 static void UpdateEmitterRenderState(Instance* inst, Emitter* emitter, dmParticleDDF::Emitter* ddf, float dt)
2030 {

Callers 1

UpdateEmitterRenderStateFunction · 0.85

Calls 13

Vector3Class · 0.50
ApplyFunction · 0.50
Point3Class · 0.50
MulFunction · 0.50
GetScaleMethod · 0.45
SetIdentityMethod · 0.45
SetTranslationMethod · 0.45
SetRotationMethod · 0.45
GetRotationMethod · 0.45
SetScaleMethod · 0.45
GetTranslationMethod · 0.45
getXMethod · 0.45

Tested by

no test coverage detected