예제 #1
0
//
// set the destination of this unit to that
// of the passed building
//
void CAIUnit::SetDestination( CAIUnit *pCAIBldg )
{
	ASSERT_VALID( this );

	EnterCriticalSection (&cs);

	// BUGBUG get current location of the unit for which
	// the destination is being set to make sure the unit
	// is not being requested to go to its current location
	CHexCoord hexVeh;
	CVehicle *pVehicle = 
		pGameData->GetVehicleData( m_iOwner, m_dwID );
	if( pVehicle != NULL )
		hexVeh = pVehicle->GetHexHead();

	CBuilding *pBldg = 
		pGameData->GetBuildingData( 
		pCAIBldg->GetOwner(), pCAIBldg->GetID() );
	if( pBldg != NULL )
	{
		// this should be the entrance to the building?
		//CHexCoord hex = pBldg->GetHex();
		CHexCoord hex = pBldg->GetExitHex();

		//CMsgVehSetDest (DWORD dwID, CHexCoord const & hex, int iMode);
		//pMsg = new CMsgVehSetDest( m_dwID, hex, CVehicle::_goto );
		CMsgVehSetDest msg( m_dwID, hex, CVehicle::moving );
		LeaveCriticalSection (&cs);

		// don't bother if current location is the same as destination
		if( hex == hexVeh )
			return;

#ifdef _LOGOUT

	logPrintf(LOG_PRI_ALWAYS, LOG_AI_MISC, 
	"\nCAIUnit::SetDestination() player %d unit %ld going to %d,%d \n", 
		m_iOwner, m_dwID, hex.X(), hex.Y() );
#endif
		theGame.PostToServer( (CNetCmd *)&msg, sizeof(CMsgVehSetDest) );
		return;
	}

	LeaveCriticalSection (&cs);
}
예제 #2
0
//
// set the destination of this unit to the passed hex
//
void CAIUnit::SetDestination( CHexCoord& m_hex )
{
	ASSERT_VALID( this );

	// if we gave it this dest in the last minute - don't repeat
	if ( m_hex == m_hexLastDest )
		if ( theGame.GettimeGetTime() < m_timeLastDest + 30 * 1000 )
			return;
	m_hexLastDest = m_hex;
	m_timeLastDest = theGame.GettimeGetTime ();

	// BUGBUG get current location of the unit for which
	// the destination is being set to make sure the unit
	// is not being requested to go to its current location
	EnterCriticalSection (&cs);
	CHexCoord hexVeh;
	CVehicle *pVehicle = 
		pGameData->GetVehicleData( m_iOwner, m_dwID );
	if( pVehicle != NULL )
		hexVeh = pVehicle->GetHexHead();
	LeaveCriticalSection (&cs);

	// don't bother if current location is the same as destination
	if( m_hex == hexVeh )
		return;

#ifdef _LOGOUT
	logPrintf(LOG_PRI_ALWAYS, LOG_AI_MISC, 
	"\nCAIUnit::SetDestination() player %d unit %ld going to %d,%d \n", 
		m_iOwner, m_dwID, m_hex.X(), m_hex.Y() );
#endif

	//CMsgVehSetDest (DWORD dwID, CHexCoord const & hex, int iMode);
	CMsgVehSetDest msg( m_dwID, m_hex, CVehicle::moving );
	theGame.PostToServer( (CNetCmd *)&msg, sizeof(CMsgVehSetDest) );
}