Beispiel #1
0
// ---------------------------------------------------------------------
// 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);
}
Beispiel #2
0
// ---------------------------------------------------------------------
// 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);
}
Beispiel #3
0
// ---------------------------------------------------------------------
// 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));
}
Beispiel #4
0
// ---------------------------------------------------------------------
// 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);
}
Beispiel #5
0
//-----------------------------------------------------------------------------------
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;
    }
}
Beispiel #6
0
// ---------------------------------------------------------------------
// 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);
				}
			}
		}
	}
}
Beispiel #7
0
//-----------------------------------------------------------------------------------
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;
}
Beispiel #8
0
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;
}