bool CObjectTeleporter::CheckUpgradeOnHit( CTFPlayer *pPlayer ) { bool bUpgradeSuccesful = false; if ( BaseClass::CheckUpgradeOnHit( pPlayer ) ) { CObjectTeleporter *pMatch = GetMatchingTeleporter(); if ( pMatch ) { //pMatch->m_iUpgradeMetal = m_iUpgradeMetal; if ( pMatch && pMatch->CanBeUpgraded( pPlayer ) && GetUpgradeLevel() > pMatch->GetUpgradeLevel() ) { // This end just got upgraded so make another end play upgrade anim if possible. pMatch->StartUpgrading(); } // Other end still needs to keep up even while hauled etc. CopyUpgradeStateToMatch( pMatch, false ); } bUpgradeSuccesful = true; } return bUpgradeSuccesful; }
void CObjectTeleporter::InitializeMapPlacedObject( void ) { BaseClass::InitializeMapPlacedObject(); CObjectTeleporter *pMatch = dynamic_cast<CObjectTeleporter*> ( gEntList.FindEntityByName( NULL, m_szMatchingTeleporterName ) ) ; if ( pMatch ) { // Copy upgrade state from higher level end. bool bCopyFrom = pMatch->GetUpgradeLevel() > GetUpgradeLevel(); if ( pMatch->GetUpgradeLevel() == GetUpgradeLevel() ) { // If same level use it if it has more metal. bCopyFrom = pMatch->m_iUpgradeMetal > m_iUpgradeMetal; } CopyUpgradeStateToMatch( pMatch, bCopyFrom ); m_hMatchingTeleporter = pMatch; } }
CObjectTeleporter* CObjectTeleporter::FindMatch( void ) { int iObjMode = GetObjectMode(); int iOppositeMode = ( iObjMode == TELEPORTER_TYPE_ENTRANCE ) ? TELEPORTER_TYPE_EXIT : TELEPORTER_TYPE_ENTRANCE; CObjectTeleporter *pMatch = NULL; CTFPlayer *pBuilder = GetBuilder(); if ( !pBuilder ) { return NULL; } int i; int iNumObjects = pBuilder->GetObjectCount(); for ( i=0;i<iNumObjects;i++ ) { CBaseObject *pObj = pBuilder->GetObject(i); if ( pObj && pObj->GetType() == GetType() && pObj->GetObjectMode() == iOppositeMode && !pObj->IsDisabled() ) { pMatch = ( CObjectTeleporter * )pObj; // Copy upgrade state from higher level end. bool bCopyFrom = pMatch->GetUpgradeLevel() > GetUpgradeLevel(); if ( pMatch->GetUpgradeLevel() == GetUpgradeLevel() ) { // If same level use it if it has more metal. bCopyFrom = pMatch->m_iUpgradeMetal > m_iUpgradeMetal; } CopyUpgradeStateToMatch( pMatch, bCopyFrom ); break; } } return pMatch; }