// checks if the spot is clear of players bool CSDKGameRules::IsSpawnPointValid( CBaseEntity *pSpot, CBasePlayer *pPlayer ) { if ( !pSpot->IsTriggered( pPlayer ) ) { return false; } // Check if it is disabled by Enable/Disable CSpawnPoint *pSpawnPoint = dynamic_cast< CSpawnPoint * >( pSpot ); if ( pSpawnPoint ) { if ( pSpawnPoint->IsDisabled() ) { return false; } } for (int i = 0; i < gpGlobals->maxClients; i++) { CBasePlayer *pOtherPlayer = UTIL_PlayerByIndex( i ); if (!pOtherPlayer) continue; if (PlayerRelationship(pPlayer, pOtherPlayer) == GR_TEAMMATE) continue; if ((pSpot->GetAbsOrigin() - pOtherPlayer->GetAbsOrigin()).LengthSqr() > 512*512) continue; CSDKPlayer* pOtherSDKPlayer = ToSDKPlayer(pOtherPlayer); trace_t tr; UTIL_TraceLine( pSpot->WorldSpaceCenter(), pOtherSDKPlayer->WorldSpaceCenter(), MASK_VISIBLE_AND_NPCS, pPlayer, COLLISION_GROUP_NONE, &tr ); if (tr.m_pEnt == pOtherPlayer) return false; } CBaseEntity* pGrenade = gEntList.FindEntityByClassname( NULL, "weapon_grenade" ); while (pGrenade) { if ((pSpot->GetAbsOrigin() - pGrenade->GetAbsOrigin()).LengthSqr() < 500*500) return false; pGrenade = gEntList.FindEntityByClassname( pGrenade, "weapon_grenade" ); } Vector mins = GetViewVectors()->m_vHullMin; Vector maxs = GetViewVectors()->m_vHullMax; Vector vTestMins = pSpot->GetAbsOrigin() + mins; Vector vTestMaxs = pSpot->GetAbsOrigin() + maxs; // First test the starting origin. return UTIL_IsSpaceEmpty( pPlayer, vTestMins, vTestMaxs ); }
//----------------------------------------------------------------------------- // Purpose: Draw any debug text overlays // Input : // Output : Current text offset from the top //----------------------------------------------------------------------------- int CTFTeamSpawn::DrawDebugTextOverlays(void) { int text_offset = BaseClass::DrawDebugTextOverlays(); if (m_debugOverlays & OVERLAY_TEXT_BIT) { char tempstr[512]; Q_snprintf(tempstr,sizeof(tempstr),"TeamNumber: %d", GetTeamNumber() ); EntityText(text_offset,tempstr,0); text_offset++; color32 teamcolor = g_aTeamColors[ GetTeamNumber() ]; teamcolor.a = 0; if ( m_bDisabled ) { Q_snprintf(tempstr,sizeof(tempstr),"DISABLED" ); EntityText(text_offset,tempstr,0); text_offset++; teamcolor.a = 255; } // Make sure it's empty Vector mins = g_pGameRules->GetViewVectors()->m_vHullMin; Vector maxs = g_pGameRules->GetViewVectors()->m_vHullMax; Vector vTestMins = GetAbsOrigin() + mins; Vector vTestMaxs = GetAbsOrigin() + maxs; // First test the starting origin. if ( UTIL_IsSpaceEmpty( NULL, vTestMins, vTestMaxs ) ) { NDebugOverlay::Box( GetAbsOrigin(), mins, maxs, teamcolor.r, teamcolor.g, teamcolor.b, teamcolor.a, 0.1); } else { NDebugOverlay::Box( GetAbsOrigin(), mins, maxs, 0,255,0, 0, 0.1); } if ( m_hControlPoint ) { NDebugOverlay::Line( GetAbsOrigin(), m_hControlPoint->GetAbsOrigin(), teamcolor.r, teamcolor.g, teamcolor.b, false, 0.1 ); } } return text_offset; }
static int luasrc_UTIL_IsSpaceEmpty (lua_State *L) { lua_pushboolean(L, UTIL_IsSpaceEmpty(luaL_checkentity(L, 1), luaL_checkvector(L, 2), luaL_checkvector(L, 3))); return 1; }