diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /sp/src/public/ispatialpartition.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'sp/src/public/ispatialpartition.h')
| -rw-r--r-- | sp/src/public/ispatialpartition.h | 432 |
1 files changed, 216 insertions, 216 deletions
diff --git a/sp/src/public/ispatialpartition.h b/sp/src/public/ispatialpartition.h index 090b0e68..6b6678f7 100644 --- a/sp/src/public/ispatialpartition.h +++ b/sp/src/public/ispatialpartition.h @@ -1,216 +1,216 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $Revision: $
-// $NoKeywords: $
-//=============================================================================//
-
-#ifndef ISPATIALPARTITION_H
-#define ISPATIALPARTITION_H
-
-#include "interface.h"
-
-//-----------------------------------------------------------------------------
-// forward declarations
-//-----------------------------------------------------------------------------
-
-class Vector;
-struct Ray_t;
-class IHandleEntity;
-
-
-#define INTERFACEVERSION_SPATIALPARTITION "SpatialPartition001"
-
-//-----------------------------------------------------------------------------
-// These are the various partition lists. Note some are server only, some
-// are client only
-//-----------------------------------------------------------------------------
-
-enum
-{
- PARTITION_ENGINE_SOLID_EDICTS = (1 << 0), // every edict_t that isn't SOLID_TRIGGER or SOLID_NOT (and static props)
- PARTITION_ENGINE_TRIGGER_EDICTS = (1 << 1), // every edict_t that IS SOLID_TRIGGER
- PARTITION_CLIENT_SOLID_EDICTS = (1 << 2),
- PARTITION_CLIENT_RESPONSIVE_EDICTS = (1 << 3), // these are client-side only objects that respond to being forces, etc.
- PARTITION_ENGINE_NON_STATIC_EDICTS = (1 << 4), // everything in solid & trigger except the static props, includes SOLID_NOTs
- PARTITION_CLIENT_STATIC_PROPS = (1 << 5),
- PARTITION_ENGINE_STATIC_PROPS = (1 << 6),
- PARTITION_CLIENT_NON_STATIC_EDICTS = (1 << 7), // everything except the static props
-};
-
-// Use this to look for all client edicts.
-#define PARTITION_ALL_CLIENT_EDICTS ( \
- PARTITION_CLIENT_NON_STATIC_EDICTS | \
- PARTITION_CLIENT_STATIC_PROPS | \
- PARTITION_CLIENT_RESPONSIVE_EDICTS | \
- PARTITION_CLIENT_SOLID_EDICTS \
- )
-
-
-// These are the only handles in the spatial partition that the game is controlling (everything but static props)
-// These masks are used to handle updating the dirty spatial partition list in each game DLL
-#define PARTITION_CLIENT_GAME_EDICTS (PARTITION_ALL_CLIENT_EDICTS & ~PARTITION_CLIENT_STATIC_PROPS)
-#define PARTITION_SERVER_GAME_EDICTS (PARTITION_ENGINE_SOLID_EDICTS|PARTITION_ENGINE_TRIGGER_EDICTS|PARTITION_ENGINE_NON_STATIC_EDICTS)
-
-//-----------------------------------------------------------------------------
-// Clients that want to know about all elements within a particular
-// volume must inherit from this
-//-----------------------------------------------------------------------------
-
-enum IterationRetval_t
-{
- ITERATION_CONTINUE = 0,
- ITERATION_STOP,
-};
-
-
-typedef unsigned short SpatialPartitionHandle_t;
-
-// A combination of the PARTITION_ flags above.
-typedef int SpatialPartitionListMask_t;
-
-typedef int SpatialTempHandle_t;
-
-
-//-----------------------------------------------------------------------------
-// Any search in the CSpatialPartition must use this to filter out entities it doesn't want.
-// You're forced to use listMasks because it can filter by listMasks really fast. Any other
-// filtering can be done by EnumElement.
-//-----------------------------------------------------------------------------
-
-class IPartitionEnumerator
-{
-public:
- virtual IterationRetval_t EnumElement( IHandleEntity *pHandleEntity ) = 0;
-};
-
-
-//-----------------------------------------------------------------------------
-// Installs a callback to call right before a spatial partition query occurs
-//-----------------------------------------------------------------------------
-class IPartitionQueryCallback
-{
-public:
- virtual void OnPreQuery_V1() = 0;
- virtual void OnPreQuery( SpatialPartitionListMask_t listMask ) = 0;
- virtual void OnPostQuery( SpatialPartitionListMask_t listMask ) = 0;
-};
-
-
-//-----------------------------------------------------------------------------
-// This is the spatial partition manager, groups objects into buckets
-//-----------------------------------------------------------------------------
-enum
-{
- PARTITION_INVALID_HANDLE = (SpatialPartitionHandle_t)~0
-};
-
-
-abstract_class ISpatialPartition
-{
-public:
- // Add a virtual destructor to silence the clang warning.
- // This is harmless but not important since the only derived class
- // doesn't have a destructor.
- virtual ~ISpatialPartition() {}
-
- // Create/destroy a handle for this dude in our system. Destroy
- // will also remove it from all lists it happens to be in
- virtual SpatialPartitionHandle_t CreateHandle( IHandleEntity *pHandleEntity ) = 0;
-
- // A fast method of creating a handle + inserting into the tree in the right place
- virtual SpatialPartitionHandle_t CreateHandle( IHandleEntity *pHandleEntity,
- SpatialPartitionListMask_t listMask, const Vector& mins, const Vector& maxs ) = 0;
-
- virtual void DestroyHandle( SpatialPartitionHandle_t handle ) = 0;
-
- // Adds, removes an handle from a particular spatial partition list
- // There can be multiple partition lists; each has a unique id
- virtual void Insert( SpatialPartitionListMask_t listMask,
- SpatialPartitionHandle_t handle ) = 0;
- virtual void Remove( SpatialPartitionListMask_t listMask,
- SpatialPartitionHandle_t handle ) = 0;
-
- // Same as calling Remove() then Insert(). For performance-sensitive areas where you want to save a call.
- virtual void RemoveAndInsert( SpatialPartitionListMask_t removeMask, SpatialPartitionListMask_t insertMask,
- SpatialPartitionHandle_t handle ) = 0;
-
- // This will remove a particular handle from all lists
- virtual void Remove( SpatialPartitionHandle_t handle ) = 0;
-
- // Call this when an entity moves...
- virtual void ElementMoved( SpatialPartitionHandle_t handle,
- const Vector& mins, const Vector& maxs ) = 0;
-
- // A fast method to insert + remove a handle from the tree...
- // This is used to suppress collision of a single model..
- virtual SpatialTempHandle_t HideElement( SpatialPartitionHandle_t handle ) = 0;
- virtual void UnhideElement( SpatialPartitionHandle_t handle, SpatialTempHandle_t tempHandle ) = 0;
-
- // Installs callbacks to get called right before a query occurs
- virtual void InstallQueryCallback_V1( IPartitionQueryCallback *pCallback ) = 0;
- virtual void RemoveQueryCallback( IPartitionQueryCallback *pCallback ) = 0;
-
- // Gets all entities in a particular volume...
- // if coarseTest == true, it'll return all elements that are in
- // spatial partitions that intersect the box
- // if coarseTest == false, it'll return only elements that truly intersect
- virtual void EnumerateElementsInBox(
- SpatialPartitionListMask_t listMask,
- const Vector& mins,
- const Vector& maxs,
- bool coarseTest,
- IPartitionEnumerator* pIterator
- ) = 0;
-
- virtual void EnumerateElementsInSphere(
- SpatialPartitionListMask_t listMask,
- const Vector& origin,
- float radius,
- bool coarseTest,
- IPartitionEnumerator* pIterator
- ) = 0;
-
- virtual void EnumerateElementsAlongRay(
- SpatialPartitionListMask_t listMask,
- const Ray_t& ray,
- bool coarseTest,
- IPartitionEnumerator* pIterator
- ) = 0;
-
- virtual void EnumerateElementsAtPoint(
- SpatialPartitionListMask_t listMask,
- const Vector& pt,
- bool coarseTest,
- IPartitionEnumerator* pIterator
- ) = 0;
-
- // For debugging.... suppress queries on particular lists
- virtual void SuppressLists( SpatialPartitionListMask_t nListMask, bool bSuppress ) = 0;
- virtual SpatialPartitionListMask_t GetSuppressedLists() = 0;
-
- virtual void RenderAllObjectsInTree( float flTime ) = 0;
- virtual void RenderObjectsInPlayerLeafs( const Vector &vecPlayerMin, const Vector &vecPlayerMax, float flTime ) = 0;
- virtual void RenderLeafsForRayTraceStart( float flTime ) = 0;
- virtual void RenderLeafsForRayTraceEnd( void ) = 0;
- virtual void RenderLeafsForHullTraceStart( float flTime ) = 0;
- virtual void RenderLeafsForHullTraceEnd( void ) = 0;
- virtual void RenderLeafsForBoxStart( float flTime ) = 0;
- virtual void RenderLeafsForBoxEnd( void ) = 0;
- virtual void RenderLeafsForSphereStart( float flTime ) = 0;
- virtual void RenderLeafsForSphereEnd( void ) = 0;
-
- virtual void RenderObjectsInBox( const Vector &vecMin, const Vector &vecMax, float flTime ) = 0;
- virtual void RenderObjectsInSphere( const Vector &vecCenter, float flRadius, float flTime ) = 0;
- virtual void RenderObjectsAlongRay( const Ray_t& ray, float flTime ) = 0;
-
- virtual void ReportStats( const char *pFileName ) = 0;
-
- virtual void InstallQueryCallback( IPartitionQueryCallback *pCallback ) = 0;
-};
-
-#endif
-
-
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Revision: $ +// $NoKeywords: $ +//=============================================================================// + +#ifndef ISPATIALPARTITION_H +#define ISPATIALPARTITION_H + +#include "interface.h" + +//----------------------------------------------------------------------------- +// forward declarations +//----------------------------------------------------------------------------- + +class Vector; +struct Ray_t; +class IHandleEntity; + + +#define INTERFACEVERSION_SPATIALPARTITION "SpatialPartition001" + +//----------------------------------------------------------------------------- +// These are the various partition lists. Note some are server only, some +// are client only +//----------------------------------------------------------------------------- + +enum +{ + PARTITION_ENGINE_SOLID_EDICTS = (1 << 0), // every edict_t that isn't SOLID_TRIGGER or SOLID_NOT (and static props) + PARTITION_ENGINE_TRIGGER_EDICTS = (1 << 1), // every edict_t that IS SOLID_TRIGGER + PARTITION_CLIENT_SOLID_EDICTS = (1 << 2), + PARTITION_CLIENT_RESPONSIVE_EDICTS = (1 << 3), // these are client-side only objects that respond to being forces, etc. + PARTITION_ENGINE_NON_STATIC_EDICTS = (1 << 4), // everything in solid & trigger except the static props, includes SOLID_NOTs + PARTITION_CLIENT_STATIC_PROPS = (1 << 5), + PARTITION_ENGINE_STATIC_PROPS = (1 << 6), + PARTITION_CLIENT_NON_STATIC_EDICTS = (1 << 7), // everything except the static props +}; + +// Use this to look for all client edicts. +#define PARTITION_ALL_CLIENT_EDICTS ( \ + PARTITION_CLIENT_NON_STATIC_EDICTS | \ + PARTITION_CLIENT_STATIC_PROPS | \ + PARTITION_CLIENT_RESPONSIVE_EDICTS | \ + PARTITION_CLIENT_SOLID_EDICTS \ + ) + + +// These are the only handles in the spatial partition that the game is controlling (everything but static props) +// These masks are used to handle updating the dirty spatial partition list in each game DLL +#define PARTITION_CLIENT_GAME_EDICTS (PARTITION_ALL_CLIENT_EDICTS & ~PARTITION_CLIENT_STATIC_PROPS) +#define PARTITION_SERVER_GAME_EDICTS (PARTITION_ENGINE_SOLID_EDICTS|PARTITION_ENGINE_TRIGGER_EDICTS|PARTITION_ENGINE_NON_STATIC_EDICTS) + +//----------------------------------------------------------------------------- +// Clients that want to know about all elements within a particular +// volume must inherit from this +//----------------------------------------------------------------------------- + +enum IterationRetval_t +{ + ITERATION_CONTINUE = 0, + ITERATION_STOP, +}; + + +typedef unsigned short SpatialPartitionHandle_t; + +// A combination of the PARTITION_ flags above. +typedef int SpatialPartitionListMask_t; + +typedef int SpatialTempHandle_t; + + +//----------------------------------------------------------------------------- +// Any search in the CSpatialPartition must use this to filter out entities it doesn't want. +// You're forced to use listMasks because it can filter by listMasks really fast. Any other +// filtering can be done by EnumElement. +//----------------------------------------------------------------------------- + +class IPartitionEnumerator +{ +public: + virtual IterationRetval_t EnumElement( IHandleEntity *pHandleEntity ) = 0; +}; + + +//----------------------------------------------------------------------------- +// Installs a callback to call right before a spatial partition query occurs +//----------------------------------------------------------------------------- +class IPartitionQueryCallback +{ +public: + virtual void OnPreQuery_V1() = 0; + virtual void OnPreQuery( SpatialPartitionListMask_t listMask ) = 0; + virtual void OnPostQuery( SpatialPartitionListMask_t listMask ) = 0; +}; + + +//----------------------------------------------------------------------------- +// This is the spatial partition manager, groups objects into buckets +//----------------------------------------------------------------------------- +enum +{ + PARTITION_INVALID_HANDLE = (SpatialPartitionHandle_t)~0 +}; + + +abstract_class ISpatialPartition +{ +public: + // Add a virtual destructor to silence the clang warning. + // This is harmless but not important since the only derived class + // doesn't have a destructor. + virtual ~ISpatialPartition() {} + + // Create/destroy a handle for this dude in our system. Destroy + // will also remove it from all lists it happens to be in + virtual SpatialPartitionHandle_t CreateHandle( IHandleEntity *pHandleEntity ) = 0; + + // A fast method of creating a handle + inserting into the tree in the right place + virtual SpatialPartitionHandle_t CreateHandle( IHandleEntity *pHandleEntity, + SpatialPartitionListMask_t listMask, const Vector& mins, const Vector& maxs ) = 0; + + virtual void DestroyHandle( SpatialPartitionHandle_t handle ) = 0; + + // Adds, removes an handle from a particular spatial partition list + // There can be multiple partition lists; each has a unique id + virtual void Insert( SpatialPartitionListMask_t listMask, + SpatialPartitionHandle_t handle ) = 0; + virtual void Remove( SpatialPartitionListMask_t listMask, + SpatialPartitionHandle_t handle ) = 0; + + // Same as calling Remove() then Insert(). For performance-sensitive areas where you want to save a call. + virtual void RemoveAndInsert( SpatialPartitionListMask_t removeMask, SpatialPartitionListMask_t insertMask, + SpatialPartitionHandle_t handle ) = 0; + + // This will remove a particular handle from all lists + virtual void Remove( SpatialPartitionHandle_t handle ) = 0; + + // Call this when an entity moves... + virtual void ElementMoved( SpatialPartitionHandle_t handle, + const Vector& mins, const Vector& maxs ) = 0; + + // A fast method to insert + remove a handle from the tree... + // This is used to suppress collision of a single model.. + virtual SpatialTempHandle_t HideElement( SpatialPartitionHandle_t handle ) = 0; + virtual void UnhideElement( SpatialPartitionHandle_t handle, SpatialTempHandle_t tempHandle ) = 0; + + // Installs callbacks to get called right before a query occurs + virtual void InstallQueryCallback_V1( IPartitionQueryCallback *pCallback ) = 0; + virtual void RemoveQueryCallback( IPartitionQueryCallback *pCallback ) = 0; + + // Gets all entities in a particular volume... + // if coarseTest == true, it'll return all elements that are in + // spatial partitions that intersect the box + // if coarseTest == false, it'll return only elements that truly intersect + virtual void EnumerateElementsInBox( + SpatialPartitionListMask_t listMask, + const Vector& mins, + const Vector& maxs, + bool coarseTest, + IPartitionEnumerator* pIterator + ) = 0; + + virtual void EnumerateElementsInSphere( + SpatialPartitionListMask_t listMask, + const Vector& origin, + float radius, + bool coarseTest, + IPartitionEnumerator* pIterator + ) = 0; + + virtual void EnumerateElementsAlongRay( + SpatialPartitionListMask_t listMask, + const Ray_t& ray, + bool coarseTest, + IPartitionEnumerator* pIterator + ) = 0; + + virtual void EnumerateElementsAtPoint( + SpatialPartitionListMask_t listMask, + const Vector& pt, + bool coarseTest, + IPartitionEnumerator* pIterator + ) = 0; + + // For debugging.... suppress queries on particular lists + virtual void SuppressLists( SpatialPartitionListMask_t nListMask, bool bSuppress ) = 0; + virtual SpatialPartitionListMask_t GetSuppressedLists() = 0; + + virtual void RenderAllObjectsInTree( float flTime ) = 0; + virtual void RenderObjectsInPlayerLeafs( const Vector &vecPlayerMin, const Vector &vecPlayerMax, float flTime ) = 0; + virtual void RenderLeafsForRayTraceStart( float flTime ) = 0; + virtual void RenderLeafsForRayTraceEnd( void ) = 0; + virtual void RenderLeafsForHullTraceStart( float flTime ) = 0; + virtual void RenderLeafsForHullTraceEnd( void ) = 0; + virtual void RenderLeafsForBoxStart( float flTime ) = 0; + virtual void RenderLeafsForBoxEnd( void ) = 0; + virtual void RenderLeafsForSphereStart( float flTime ) = 0; + virtual void RenderLeafsForSphereEnd( void ) = 0; + + virtual void RenderObjectsInBox( const Vector &vecMin, const Vector &vecMax, float flTime ) = 0; + virtual void RenderObjectsInSphere( const Vector &vecCenter, float flRadius, float flTime ) = 0; + virtual void RenderObjectsAlongRay( const Ray_t& ray, float flTime ) = 0; + + virtual void ReportStats( const char *pFileName ) = 0; + + virtual void InstallQueryCallback( IPartitionQueryCallback *pCallback ) = 0; +}; + +#endif + + + |