// --------------------------------------------------------------------- // Selects all units owned by the player that have a weapon. On screen // toggle. UDWORD selSelectAllCombat( UDWORD player, BOOL bOnScreen) { DROID *psDroid; UDWORD count; selDroidDeselect(player); for(psDroid = apsDroidLists[player], count = 0; psDroid; psDroid = psDroid->psNext) { /* Does it have a weapon? */ //if(psDroid->numWeaps) if(psDroid->asWeaps[0].nStat > 0) { /* Is on screen relevant? */ if(bOnScreen ? droidOnScreen(psDroid,0) : true) { //we don't want to get the Transporter if(psDroid->droidType != DROID_TRANSPORTER) { psDroid->selected = true; count ++; } } } } return(count); }
// --------------------------------------------------------------------- // Selects all damaged units - on screen toggle. UDWORD selSelectAllDamaged( UDWORD player, BOOL bOnScreen) { DROID *psDroid; UDWORD damage; UDWORD count; selDroidDeselect(player); for(psDroid = apsDroidLists[player], count = 0; psDroid; psDroid = psDroid->psNext) { /* Get present percent of damage level */ damage = PERCENT(psDroid->body,psDroid->originalBody); /* Less than threshold? */ if(damage<REPAIRLEV_LOW) { /* Is on screen relevant? */ if(bOnScreen ? droidOnScreen(psDroid,0) : true) { //we don't want to get the Transporter if(psDroid->droidType != DROID_TRANSPORTER) { // psDroid->selected = true; SelectDroid(psDroid); count ++; } } } } return(count); }
// --------------------------------------------------------------------- // Selects all units owned by the player of a certain propulsion type. // On Screen toggle. UDWORD selSelectAllSameProp( UDWORD player, PROPULSION_TYPE propType, BOOL bOnScreen ) { PROPULSION_STATS *psPropStats; DROID *psDroid; UDWORD count; selDroidDeselect(player); /* Go thru' them all */ for(psDroid = apsDroidLists[player], count = 0; psDroid; psDroid = psDroid->psNext) { /* Is on screen important */ if(bOnScreen ? droidOnScreen(psDroid,0) : true) { /* Get the propulsion type */ psPropStats = asPropulsionStats + psDroid->asBits[COMP_PROPULSION].nStat; ASSERT( psPropStats != NULL, "moveUpdateUnit: invalid propulsion stats pointer" ); /* Same as that asked for - don't want Transporters*/ if ( psPropStats->propulsionType == propType && psDroid->droidType != DROID_TRANSPORTER) { psDroid->selected = true; count++; } } } return(selNumSelected(player)); }
// --------------------------------------------------------------------- // Selects all units owned by the player - onscreen toggle. UDWORD selSelectAllUnits( UDWORD player, BOOL bOnScreen ) { DROID *psDroid; UDWORD count; selDroidDeselect(player); /* Go thru' all */ for(psDroid = apsDroidLists[player],count = 0; psDroid; psDroid = psDroid->psNext) { /* Do we care about them being on screen? */ if(bOnScreen ? droidOnScreen(psDroid,0) : true) { /* can select everything except transporters */ if(psDroid->droidType != DROID_TRANSPORTER) { // psDroid->selected = true; SelectDroid(psDroid); count++; } } } return(count); }
//----------------------------------------------------------------------------------- static void getTrackingConcerns(SDWORD *x, SDWORD *y, SDWORD *z, UDWORD groupNumber, BOOL bOnScreen) { SDWORD xTotals = 0, yTotals = 0, zTotals = 0; DROID *psDroid; UDWORD count; for (count = 0, psDroid = apsDroidLists[selectedPlayer]; psDroid; psDroid = psDroid->psNext) { if (groupNumber == GROUP_SELECTED ? psDroid->selected : psDroid->group == groupNumber) { if (!bOnScreen || droidOnScreen(psDroid, pie_GetVideoBufferWidth() / 4)) { count++; xTotals += psDroid->pos.x; yTotals += psDroid->pos.z; // note the flip zTotals += psDroid->pos.y; } } } if (count) // necessary!!!!!!! { *x = xTotals / count; *y = yTotals / count; *z = zTotals / count; } }
// --------------------------------------------------------------------- // sub-function - selects all units with same name as one passed in static void selNameSelect(char *droidName, unsigned int player, bool bOnScreen) { for (DROID *psDroid = apsDroidLists[player]; psDroid; psDroid = psDroid->psNext) { if (!psDroid->selected) { if (!bOnScreen || droidOnScreen(psDroid, 0)) { if (!strcmp(droidName, psDroid->aName)) { SelectDroid(psDroid); } } } } }
//----------------------------------------------------------------------------------- static uint16_t getAverageTrackAngle(unsigned groupNumber, bool bCheckOnScreen) { DROID *psDroid; int32_t xTotal = 0, yTotal = 0; /* Got thru' all droids */ for (psDroid = apsDroidLists[selectedPlayer]; psDroid; psDroid = psDroid->psNext) { /* Is he worth selecting? */ if (groupNumber == GROUP_SELECTED ? psDroid->selected : psDroid->group == groupNumber) { if (bCheckOnScreen ? droidOnScreen(psDroid, pie_GetVideoBufferWidth() / 6) : true) { xTotal += iSin(psDroid->rot.direction); yTotal += iCos(psDroid->rot.direction); } } } presAvAngle = iAtan2(xTotal, yTotal); return presAvAngle; }
static unsigned selSelectUnitsIf(unsigned player, T condition, bool onlyOnScreen) { unsigned count = 0; selDroidDeselect(player); // Go through all. for (DROID *psDroid = apsDroidLists[player]; psDroid != nullptr; psDroid = psDroid->psNext) { bool shouldSelect = (!onlyOnScreen || droidOnScreen(psDroid, 0)) && condition(psDroid); count += shouldSelect; if (shouldSelect && !psDroid->selected) { SelectDroid(psDroid); } else if (!shouldSelect && psDroid->selected) { DeSelectDroid(psDroid); } } return count; }