bool pdrawn[1024 * 768]; void Game::DrawTanks() { memset(pdrawn,0,sizeof(bool) * 1024 * 768); Pixel *pixel = m_Surface->GetBuffer(); for ( unsigned int i = 0; i < (MAXP1 + MAXP2); i++ ) { Tank* t = m_Tank[i]; float x = t->pos.x, y = t->pos.y; //float2 p1( x + 70 * t->speed.x + 22 * t->speed.y, y + 70 * t->speed.y - 22 * t->speed.x ); //float2 p2( x + 70 * t->speed.x - 22 * t->speed.y, y + 70 * t->speed.y + 22 * t->speed.x ); if (!(m_Tank[i]->flags & Tank::ACTIVE)) m_PXSprite->Draw( (int)x - 4, (int)y - 4, m_Surface ); // draw dead tank else if (t->flags & Tank::P1) // draw blue tank { m_P1Sprite->Draw( (int)x - 4, (int)y - 4, m_Surface ); m_Surface->Line( x, y, x + 8 * t->speed.x, y + 8 * t->speed.y, 0x4444ff ); } else // draw red tank { m_P2Sprite->Draw( (int)x - 4, (int)y - 4, m_Surface ); m_Surface->Line( x, y, x + 8 * t->speed.x, y + 8 * t->speed.y, 0xff4444 ); } if ((x >= 0) && (x < SCRWIDTH) && (y >= 0) && (y < SCRHEIGHT)) m_Backdrop->GetBuffer()[(int)x + (int)y * SCRWIDTH] = SubBlend( m_Backdrop->GetBuffer()[(int)x + (int)y * SCRWIDTH], 0x030303 ); // tracks if(i < MAXP1) { Tank* t = m_Tank[i]; if (!(t->flags & Tank::ACTIVE)) continue; for ( int x = -20; x < 20; x++ ) for ( int y = -20; y < 20; y++ ) // draw player army glow { int dx = (int)t->pos.x + x, dy = (int)t->pos.y + y; if(dx < 0 || dx > SCRWIDTH || dy < 0 || dy > SCRHEIGHT || pdrawn[dx + dy * SCRWIDTH]) continue; int dist = x * x + y * y; if (dist < 400) { pixel[dx + dy * SCRWIDTH] |= 0x660000; pdrawn[dx + dy * SCRWIDTH] = true; } } } } }