public void Recalculate(DateTime now) { m_ship.Recalculate(now); //Баллистика собственных снарядов foreach (Bullet b in m_ship.GetAmmunition) { if (!b.IsCharged) { b.Fly(); } if (b.Ypoint < 0 || b.Xpoint < 0 || b.Xpoint > m_width) { b.IsCharged = true; } } //Баллистика снарядов врагов for (int i = 0; i < m_enemyBullets.Count; i++) { m_enemyBullets[i].Fly(); if (m_enemyBullets[i].Ypoint > GetHeight) { m_enemyBullets.RemoveAt(i); } } //Враги и бонусы for (int i = 0; i < m_aliens.Count; i++) { if (m_aliens[i].GetHealth == 0) { #warning !!!!!!!!!!! if (now.Subtract(m_aliens[i].TimeOfExplosion).Milliseconds > 500) { m_ship.AddCash(m_aliens[i].GetCash); m_aliens.RemoveAt(i); m_counterBonus++; //pl.URL = "Sound\\explosion.wav"; } } else { if (m_aliens[i].Ypoint > m_height) { m_aliens.RemoveAt(i); } else { m_aliens[i].Shoot(now, m_enemyBullets); m_aliens[i].Move(m_width, m_height); } } } //Проверка на попадание в алиенов и возвращение пули в магазин for (int i = 0; i < m_aliens.Count; i++) { foreach (Bullet b in m_ship.GetAmmunition) { if (!b.IsCharged && m_aliens[i].GetHealth > 0) { if (Collision(b, m_aliens[i])) { m_aliens[i].Damaged(b, now); b.IsCharged = true; } } } } //Повреждение корабля снарядами for (int i = 0; i < m_enemyBullets.Count; i++) { if (Collision(m_ship, m_enemyBullets[i])) { m_ship.Damaged(m_enemyBullets[i]); if (m_ship.GetArmor == 0) { m_ship.Collapse(m_width / 2, m_height - m_ship.GetHeight / 2, now); } m_enemyBullets.RemoveAt(i); } } //Столкновения корабля и противников foreach (Alien a in m_aliens) { if (Collision(m_ship, a)) { m_ship.Collapse(m_width / 2, m_height - m_ship.GetHeight / 2, now); break; } } //Расчет падения бонусов if (m_bonus != null) { m_bonus.Fall(); if (m_bonus.Ypoint > m_height) { m_bonus = null; } else { if (Collision(m_ship, m_bonus)) { m_bonus.Improve(m_ship); m_bonus = null; } } } else { if (m_counterBonus >= m_needForDrop) { m_counterBonus = 0; m_bonus = m_bonuses[m_rnd.Next(m_bonuses.Count)]; m_bonus.Drop(m_rnd.Next(20, m_width - 20), 0); } } }