// // 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); }
// // 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) ); }