/** ** Sort visible missiles on map for display. ** ** @param vp Viewport pointer. ** @param table OUT : array of missile to display sorted by DrawLevel. */ void FindAndSortMissiles(const CViewport &vp, std::vector<Missile *> &table) { typedef std::vector<Missile *>::const_iterator MissilePtrConstiterator; // Loop through global missiles, then through locals. for (MissilePtrConstiterator i = GlobalMissiles.begin(); i != GlobalMissiles.end(); ++i) { Missile &missile = *(*i); if (missile.Delay || missile.Hidden) { continue; // delayed or hidden -> aren't shown } // Draw only visible missiles if (MissileVisibleInViewport(vp, missile)) { table.push_back(&missile); } } for (MissilePtrConstiterator i = LocalMissiles.begin(); i != LocalMissiles.end(); ++i) { Missile &missile = *(*i); if (missile.Delay || missile.Hidden) { continue; // delayed or hidden -> aren't shown } // Local missile are visible. table.push_back(&missile); } std::sort(table.begin(), table.end(), MissileDrawLevelCompare); }
/** ** Sort visible missiles on map for display. ** ** @param vp Viewport pointer. ** @param table OUT : array of missile to display sorted by DrawLevel. ** @param tablesize Size of table array ** ** @return number of missiles returned in table */ int FindAndSortMissiles(const CViewport *vp, Missile **table, int tablesize) { int nmissiles; std::vector<Missile *>::const_iterator i; // // Loop through global missiles, then through locals. // nmissiles = 0; for (i = GlobalMissiles.begin(); i != GlobalMissiles.end() && nmissiles < tablesize; ++i) { if ((*i)->Delay || (*i)->Hidden) { continue; // delayed or hidden -> aren't shown } // Draw only visible missiles if (MissileVisibleInViewport(vp, *i)) { table[nmissiles++] = *i; } } for (i = LocalMissiles.begin(); i != LocalMissiles.end() && nmissiles < tablesize; ++i) { if ((*i)->Delay || (*i)->Hidden) { continue; // delayed or hidden -> aren't shown } // Local missile are visible. table[nmissiles++] = *i; } if (nmissiles) { qsort((void *)table, nmissiles, sizeof(Missile *), MissileDrawLevelCompare); } return nmissiles; }