Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef QUERYCACHE_H
#define QUERYCACHE_H
#ifdef _WIN32
#pragma once
#endif
#include "tier0/platform.h"
#include "mathlib/vector.h"
// this system provides several piece of functionality to ai or other systems which wish to do
// traces and other trace-like queries.
// a. By maintaining a set of incrementally updated trace results, it makes it simple to have ai
// code use hyteresis on traces as an optimization method.
// b. By updating the cache entries outside of the entity think functions, the update is done in a
// fully multi-threaded fashion
enum EQueryType_t { EQUERY_INVALID = 0, // an invalid or unused entry
EQUERY_TRACELINE, EQUERY_ENTITY_LOS_CHECK,
};
enum EEntityOffsetMode_t { EOFFSET_MODE_WORLDSPACE_CENTER, EOFFSET_MODE_EYEPOSITION, EOFFSET_MODE_NONE, // nop
};
#define QCACHE_MAXPNTS 3 // maximum number of points/entities
// involved in a query
struct QueryCacheKey_t { EQueryType_t m_Type; int m_nNumValidPoints; Vector m_Points[QCACHE_MAXPNTS]; EHANDLE m_pEntities[QCACHE_MAXPNTS]; EEntityOffsetMode_t m_nOffsetMode[QCACHE_MAXPNTS]; unsigned int m_nTraceMask; unsigned int m_nHashIdx; int m_nCollisionGroup; ShouldHitFunc_t m_pTraceFilterFunction;
float m_flMinimumUpdateInterval;
void ComputeHashIndex( void );
bool Matches( QueryCacheKey_t const *pNode ) const ; };
struct QueryCacheEntry_t { QueryCacheEntry_t *m_pNext; QueryCacheEntry_t *m_pPrev; QueryCacheKey_t m_QueryParams; float m_flLastUpdateTime; bool m_bUsedSinceUpdated; // was this cell referenced?
bool m_bSpeculativelyDone; bool m_bResult; // for queries with a boolean result
void IssueQuery( void );
};
bool IsLineOfSightBetweenTwoEntitiesClear( CBaseEntity *pSrcEntity, EEntityOffsetMode_t nSrcOffsetMode, CBaseEntity *pDestEntity, EEntityOffsetMode_t nDestOffsetMode, CBaseEntity *pSkipEntity, int nCollisionGroup, unsigned int nTraceMask, ShouldHitFunc_t pTraceFilterCallback, float flMinimumUpdateInterval = 0.2 );
// call during main loop for threaded update of the query cache
void UpdateQueryCache( void );
// call on level transition or other significant step-functions
void InvalidateQueryCache( void );
#endif // querycache_h
|