コード例 #1
0
CASW_Marine* CASW_Game_Resource::FindMarineByVoiceType( ASW_Voice_Type voice )
{
	int m = GetMaxMarineResources();	
	for (int i=0;i<m;i++)
	{
		if (GetMarineResource(i) && GetMarineResource(i)->GetProfile() && GetMarineResource(i)->GetProfile()->m_VoiceType == voice)
		{
			return GetMarineResource(i)->GetMarineEntity();
		}
	}
	return NULL;
}
コード例 #2
0
// returns how many marines this player has selected
int CASW_Game_Resource::GetNumMarines(CASW_Player *pPlayer, bool bAliveOnly)
{
	int m = GetMaxMarineResources();
	int iMarines = 0;
	for (int i=0;i<m;i++)
	{
		if (GetMarineResource(i) && (GetMarineResource(i)->GetCommander() == pPlayer || pPlayer == NULL) )
		{
			if (!bAliveOnly || GetMarineResource(i)->GetHealthPercent() > 0)
				iMarines++;
		}
	}
	return iMarines;
}
コード例 #3
0
void CASW_Game_Resource::RemoveAMarineFor(CASW_Player *pPlayer)
{
	if (!pPlayer || !ASWGameRules())
		return;

	// find this player's first marine and remove it
	int m = GetMaxMarineResources();
	for (int i=0;i<m;i++)
	{
		if (GetMarineResource(i) && GetMarineResource(i)->GetCommander() == pPlayer)
		{
			ASWGameRules()->RosterDeselect(pPlayer, GetMarineResource(i)->GetProfileIndex());
			return;
		}
	}
}
コード例 #4
0
// uses the marine list to quickly find all marines within a box
int CASW_Game_Resource::EnumerateMarinesInBox(Vector &mins, Vector &maxs)
{
	m_iNumEnumeratedMarines = 0;
	for (int i=0;i<GetMaxMarineResources();i++)
	{
		CASW_Marine_Resource *pMR = GetMarineResource(i);
		if (!pMR)
			continue;

		CASW_Marine *pMarine = pMR->GetMarineEntity();
		if (!pMarine)
			continue;

#ifdef CLIENT_DLL
		if (asw_debug_clientside_avoidance.GetBool())
		{
			Vector mid = (pMarine->WorldAlignMins() + pMarine->WorldAlignMaxs()) / 2.0f;
			Vector omin = pMarine->WorldAlignMins() - mid;
			Vector omax = pMarine->WorldAlignMaxs() - mid;
			debugoverlay->AddBoxOverlay( mid, omin, omax, vec3_angle, 0, 0, 255, true, 0 );
		}
#endif

		Vector omins = pMarine->WorldAlignMins() + pMarine->GetAbsOrigin();
		Vector omaxs = pMarine->WorldAlignMaxs() + pMarine->GetAbsOrigin();
		if (IsBoxIntersectingBox(mins, maxs, omins, omaxs))
		{
			m_pEnumeratedMarines[m_iNumEnumeratedMarines] = pMR->GetMarineEntity();
			m_iNumEnumeratedMarines++;
			if (m_iNumEnumeratedMarines >=12)
				break;
		}
	}
	return m_iNumEnumeratedMarines;
}
コード例 #5
0
int C_ASW_Game_Resource::GetNumMarineResources()
{
	int iNum = 0;
	for (int i=0;i<ASW_MAX_MARINE_RESOURCES;i++)
	{
		if (GetMarineResource(i))
			iNum++;
	}
	return iNum;
}
コード例 #6
0
int CASW_Game_Resource::GetMarineResourceIndex( CASW_Marine_Resource *pMR )
{
	if ( !pMR )
		return -1; 

	for ( int i=0; i < GetMaxMarineResources(); i++ )
	{
		if ( pMR == GetMarineResource( i ) )
			return i;
	}
	return -1;
}
コード例 #7
0
// returns true if at least one marine has been selected
bool CASW_Game_Resource::AtLeastOneMarine()
{
	int m = GetMaxMarineResources();
	for (int i=0;i<m;i++)
	{
		if (GetMarineResource(i))
		{				
			return true;
		}
	}
	return false;
}
コード例 #8
0
CASW_Marine_Resource* CASW_Game_Resource::GetFirstMarineResourceForPlayer( CASW_Player *pPlayer )
{
	for ( int i=0; i < GetMaxMarineResources(); i++ )
	{
		CASW_Marine_Resource *pMR = GetMarineResource(i);
		if (!pMR)
			continue;

		if ( pMR->GetCommander() == pPlayer )
			return pMR;
	}
	return NULL;
}
コード例 #9
0
int CASW_Game_Resource::GetAliensKilledInThisMission()
{
	int nCount = 0;
	int m = GetMaxMarineResources();	
	for ( int i = 0; i < m; i++ )
	{
		CASW_Marine_Resource *pMR = GetMarineResource( i );
		if ( !pMR )
			continue;

		nCount += pMR->m_iAliensKilled.Get();
	}
	return nCount;
}
コード例 #10
0
void CASW_Game_Resource::DeleteMarineResource(CASW_Marine_Resource *m)
{
	for (int i=0;i<ASW_MAX_MARINE_RESOURCES;i++)
	{
		if (GetMarineResource(i) == m)
		{
			m_MarineResources.Set(i, NULL);
			UTIL_Remove(m);
			// need to shuffle all others up
			for (int k=i;k<(ASW_MAX_MARINE_RESOURCES-1);k++)
			{
				CASW_Marine_Resource *other = GetMarineResource(k+1);
				m_MarineResources.Set(k, other);
				m_MarineResources.Set(k+1, NULL);
			}
		}
	}
	// the above causes strange cases where the client copy of this networked array is incorrect
	// so we flag each element dirty to cause a complete update, which seems to fix the problem
	for (int i=0;i<ASW_MAX_MARINE_RESOURCES;i++)
	{
		m_MarineResources.GetForModify(i);
	}
}
コード例 #11
0
int CASW_Game_Resource::CountAllAliveMarines( void )
{
	int m = GetMaxMarineResources();
	int iMarines = 0;
	for ( int i = 0; i < m; i++ )
	{
		CASW_Marine_Resource *pMR = GetMarineResource( i );
		if ( !pMR )
			continue;

		CASW_Marine *pMarine = pMR->GetMarineEntity();
		if ( !pMarine )
			continue;

		if ( pMR->GetHealthPercent() > 0 )
		{
			iMarines++;
		}
	}
	return iMarines;
}