Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by Hollywood ( 15 years ago )
void Game::UpdateParticles()
{
for ( unsigned int i = 0; i < PARTICLES/4; i++ ) if (m_Particle[i]->alive) // For each particle that is alive
{ // AKA: Loop 1. Update the positions
for(unsigned int j = 0; j < 4; i++)
{
if (!((m_Particle[i]->x.m_Float[j] < (2 * SCRWIDTH)) && (m_Particle[i]->x.m_Float[j] > -SCRWIDTH) &&
(m_Particle[i]->y.m_Float[j] < (2 * SCRHEIGHT)) && (m_Particle[i]->y.m_Float[j] > -SCRHEIGHT)))
{
SpawnParticle(i*4+j);
continue;
}
}
for ( unsigned int h = 0; h < HOLES; h++ )
{
float4 dx, dy, sd, dist;
//float dx = m_Hole[h]->x - m_Particle[i]->x;
dx.m_Float4 = _mm_sub_ps(_mm_set_ps1(m_Hole[h]->x), m_Particle[i]->x.m_Float4);
//float dy = m_Hole[h]->y - m_Particle[i]->y;
dy.m_Float4 = _mm_sub_ps(_mm_set_ps1(m_Hole[h]->y), m_Particle[i]->y.m_Float4);
//float sd = dx * dx + dy * dy;
sd.m_Float4 = _mm_add_ps(_mm_mul_ps(dx.m_Float4, dx.m_Float4), _mm_mul_ps(dy.m_Float4, dy.m_Float4));
//float dist = 1.0f / sqrtf( sd );
dist.m_Float4 = _mm_div_ps(_mm_set_ps1(1.0f), _mm_sqrt_ps(sd.m_Float4));
//dx *= dist, dy *= dist;
dx.m_Float4 = _mm_mul_ps(dx.m_Float4, dist.m_Float4), dy.m_Float4 = _mm_mul_ps(dy.m_Float4, dist.m_Float4);
}
}
for ( unsigned int i = 0; i < PARTICLES/4; i++ ) if (m_Particle[i]->alive)
{
float4 g;
//float g = (250.0f * m_Hole[h]->g * m_Particle[i]->m) / sd;
g.m_Float4 = _mm_div_ps(_mm_set_ps1(250.0f * m_Hole[h]->g * m_Particle[i]->m), sd.m_Float4);
for(unsigned int j = 0; j < 4; i++)
{
if (g[j] >= 1)
{
SpawnParticle(i*4+j);
break;
}
}
}
for ( unsigned int i = 0; i < PARTICLES/4; i++ ) if (m_Particle[i]->alive)
{
m_Particle[i]->vx += 0.5f * g * dx;
m_Particle[i]->vy += 0.5f * g * dy;
int x = (int)m_Particle[i]->x, y = (int)m_Particle[i]->y;
if ((x >= 0) && (x < SCRWIDTH) && (y >= 0) && (y < SCRHEIGHT))
{
Pixel* dst = m_Surface->GetBuffer();
dst[x + y * m_Surface->GetPitch()] = m_Particle[i]->c;
}
m_Particle[i]->x += m_Particle[i]->vx;
m_Particle[i]->y += m_Particle[i]->vy;
}
}
Revise this Paste
Children: 30080