Pyrogenesis HEAD
Pyrogenesis, a RTS Engine
CCmpRangeManager Class Referencefinal

Range manager implementation. More...

Inheritance diagram for CCmpRangeManager:
Collaboration diagram for CCmpRangeManager:

Public Types

using LosRegion = std::pair< u16, u16 >
 
- Public Types inherited from ICmpRangeManager
typedef u32 tag_t
 External identifiers for active queries. More...
 
- Public Types inherited from IComponent
using AllocFunc = IComponent *(*)(const ScriptInterface &scriptInterface, JS::HandleValue ctor)
 
using DeallocFunc = void(*)(IComponent *)
 

Public Member Functions

int GetComponentTypeId () const override
 
void Init (const CParamNode &paramNode) override
 
void Deinit () override
 
template<typename S >
void SerializeCommon (S &serialize)
 
void Serialize (ISerializer &serialize) override
 
void Deserialize (const CParamNode &paramNode, IDeserializer &deserialize) override
 
void HandleMessage (const CMessage &msg, bool global) override
 
void SetBounds (entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1) override
 Set the bounds of the world. More...
 
void Verify () override
 Perform some internal consistency checks for testing/debugging. More...
 
FastSpatialSubdivisionGetSubdivision () override
 Access the spatial subdivision kept by the range manager. More...
 
void ResetDerivedData ()
 
void ResetSubdivisions (entity_pos_t x1, entity_pos_t z1)
 
tag_t CreateActiveQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, const std::vector< int > &owners, int requiredInterface, u8 flags, bool accountForSize) override
 Construct an active query. More...
 
tag_t CreateActiveParabolicQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, entity_pos_t yOrigin, const std::vector< int > &owners, int requiredInterface, u8 flags) override
 Construct an active query of a paraboloic form around the unit. More...
 
void DestroyActiveQuery (tag_t tag) override
 Destroy a query and clean up resources. More...
 
void EnableActiveQuery (tag_t tag) override
 Re-enable the processing of a query. More...
 
void DisableActiveQuery (tag_t tag) override
 Disable the processing of a query (no RangeUpdate messages will be sent). More...
 
bool IsActiveQueryEnabled (tag_t tag) const override
 Check if the processing of a query is enabled. More...
 
std::vector< entity_id_tExecuteQueryAroundPos (const CFixedVector2D &pos, entity_pos_t minRange, entity_pos_t maxRange, const std::vector< int > &owners, int requiredInterface, bool accountForSize) override
 Execute a passive query. More...
 
std::vector< entity_id_tExecuteQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, const std::vector< int > &owners, int requiredInterface, bool accountForSize) override
 Execute a passive query. More...
 
std::vector< entity_id_tResetActiveQuery (tag_t tag) override
 Immediately execute a query, and re-enable it if disabled. More...
 
std::vector< entity_id_tGetEntitiesByPlayer (player_id_t player) const override
 Returns a list of all entities for a specific player. More...
 
std::vector< entity_id_tGetNonGaiaEntities () const override
 Returns a list of all entities of all players except gaia. More...
 
std::vector< entity_id_tGetGaiaAndNonGaiaEntities () const override
 Returns a list of all entities owned by a player or gaia. More...
 
std::vector< entity_id_tGetEntitiesByMask (u32 ownerMask) const
 
void SetDebugOverlay (bool enabled) override
 Toggle the rendering of debug info. More...
 
void ExecuteActiveQueries ()
 Update all currently-enabled active queries. More...
 
bool TestEntityQuery (const Query &q, entity_id_t id, const EntityData &entity) const
 Returns whether the given entity matches the given query (ignoring maxRange) More...
 
void PerformQuery (const Query &q, std::vector< entity_id_t > &r, CFixedVector2D pos)
 Returns a list of distinct entity IDs that match the given query, sorted by ID. More...
 
entity_pos_t GetEffectiveParabolicRange (entity_id_t source, entity_id_t target, entity_pos_t range, entity_pos_t yOrigin) const override
 Get the effective range in a parablic range query. More...
 
entity_pos_t GetElevationAdaptedRange (const CFixedVector3D &pos1, const CFixedVector3D &rot, entity_pos_t range, entity_pos_t yOrigin, entity_pos_t angle) const override
 Get the average elevation over 8 points on distance range around the entity. More...
 
virtual std::vector< entity_pos_tgetParabolicRangeForm (CFixedVector3D pos, entity_pos_t maxRange, entity_pos_t cutoff, entity_pos_t minAngle, entity_pos_t maxAngle, int numberOfSteps) const
 
Query ConstructQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, const std::vector< int > &owners, int requiredInterface, u8 flagsMask, bool accountForSize) const
 
Query ConstructParabolicQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, entity_pos_t yOrigin, const std::vector< int > &owners, int requiredInterface, u8 flagsMask, bool accountForSize) const
 
void RenderSubmit (SceneCollector &collector)
 
u8 GetEntityFlagMask (const std::string &identifier) const override
 Returns the mask for the specified identifier. More...
 
void SetEntityFlag (entity_id_t ent, const std::string &identifier, bool value) override
 Set the flag specified by the identifier to the supplied value for the entity. More...
 
CLosQuerier GetLosQuerier (player_id_t player) const override
 Returns a CLosQuerier for checking whether vertex positions are visible to the given player (or other players it shares LOS with). More...
 
void ActivateScriptedVisibility (entity_id_t ent, bool status) override
 Toggle the scripted Visibility component activation for entity ent. More...
 
LosVisibility ComputeLosVisibility (CEntityHandle ent, player_id_t player) const
 
LosVisibility ComputeLosVisibility (entity_id_t ent, player_id_t player) const
 
LosVisibility GetLosVisibility (CEntityHandle ent, player_id_t player) const override
 Returns the visibility status of the given entity, with respect to the given player. More...
 
LosVisibility GetLosVisibility (entity_id_t ent, player_id_t player) const override
 
LosVisibility GetLosVisibilityPosition (entity_pos_t x, entity_pos_t z, player_id_t player) const override
 Returns the visibility status of the given position, with respect to the given player. More...
 
size_t GetVerticesPerSide () const override
 
LosRegion LosVertexToLosRegionsHelper (u16 x, u16 z) const
 
LosRegion PosToLosRegionsHelper (entity_pos_t x, entity_pos_t z) const
 
void AddToRegion (LosRegion region, entity_id_t ent)
 
void RemoveFromRegion (LosRegion region, entity_id_t ent)
 
void UpdateVisibilityData ()
 
void RequestVisibilityUpdate (entity_id_t ent) override
 Request the update of the visibility cache of ent at next turn. More...
 
void UpdateVisibility (entity_id_t ent, player_id_t player)
 
void UpdateVisibility (entity_id_t ent)
 
void SetLosRevealAll (player_id_t player, bool enabled) override
 Set whether the whole map should be made visible to the given player. More...
 
bool GetLosRevealAll (player_id_t player) const override
 Returns whether the whole map has been made visible to the given player. More...
 
void SetLosCircular (bool enabled) override
 Set the LOS to be restricted to a circular map. More...
 
bool GetLosCircular () const override
 Returns whether the LOS is restricted to a circular map. More...
 
void SetSharedLos (player_id_t player, const std::vector< player_id_t > &players) override
 Sets shared LOS data for player to the given list of players. More...
 
u32 GetSharedLosMask (player_id_t player) const override
 Returns shared LOS mask for player. More...
 
void ExploreMap (player_id_t p) override
 Explore the map (but leave it in the FoW) for player p. More...
 
void ExploreTerritories () override
 Explore the tiles inside each player's territory. More...
 
void SeeExploredEntities (player_id_t p) const
 Force any entity in explored territory to appear for player p. More...
 
void RevealShore (player_id_t p, bool enable) override
 Reveal the shore for specified player p. More...
 
bool LosIsOffWorld (ssize_t i, ssize_t j) const
 Returns whether the given vertex is outside the normal bounds of the world (i.e. More...
 
void LosAddStripHelper (u8 owner, i32 i0, i32 i1, i32 j, Grid< u16 > &counts)
 Update the LOS state of tiles within a given horizontal strip (i0,j) to (i1,j) (inclusive). More...
 
void LosRemoveStripHelper (u8 owner, i32 i0, i32 i1, i32 j, Grid< u16 > &counts)
 Update the LOS state of tiles within a given horizontal strip (i0,j) to (i1,j) (inclusive). More...
 
void MarkVisibilityDirtyAroundTile (u8 owner, i32 i, i32 j)
 
template<bool adding>
void LosUpdateHelper (u8 owner, entity_pos_t visionRange, CFixedVector2D pos)
 Update the LOS state of tiles within a given circular range, either adding or removing visibility depending on the template parameter. More...
 
void LosUpdateHelperIncremental (u8 owner, entity_pos_t visionRange, CFixedVector2D from, CFixedVector2D to)
 Update the LOS state of tiles within a given circular range, by removing visibility around the 'from' position and then adding visibility around the 'to' position. More...
 
void LosAdd (player_id_t owner, entity_pos_t visionRange, CFixedVector2D pos)
 
void SharingLosAdd (u16 visionSharing, entity_pos_t visionRange, CFixedVector2D pos)
 
void LosRemove (player_id_t owner, entity_pos_t visionRange, CFixedVector2D pos)
 
void SharingLosRemove (u16 visionSharing, entity_pos_t visionRange, CFixedVector2D pos)
 
void LosMove (player_id_t owner, entity_pos_t visionRange, CFixedVector2D from, CFixedVector2D to)
 
void SharingLosMove (u16 visionSharing, entity_pos_t visionRange, CFixedVector2D from, CFixedVector2D to)
 
u8 GetPercentMapExplored (player_id_t player) const override
 Get percent map explored statistics for specified player. More...
 
u8 GetUnionPercentMapExplored (const std::vector< player_id_t > &players) const override
 Get percent map explored statistics for specified set of players. More...
 
- Public Member Functions inherited from ICmpRangeManager
virtual FastSpatialSubdivisionGetSubdivision ()=0
 Access the spatial subdivision kept by the range manager. More...
 
virtual void SetBounds (entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1)=0
 Set the bounds of the world. More...
 
virtual std::vector< entity_id_tExecuteQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, const std::vector< int > &owners, int requiredInterface, bool accountForSize)=0
 Execute a passive query. More...
 
virtual std::vector< entity_id_tExecuteQueryAroundPos (const CFixedVector2D &pos, entity_pos_t minRange, entity_pos_t maxRange, const std::vector< int > &owners, int requiredInterface, bool accountForSize)=0
 Execute a passive query. More...
 
virtual tag_t CreateActiveQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, const std::vector< int > &owners, int requiredInterface, u8 flags, bool accountForSize)=0
 Construct an active query. More...
 
virtual tag_t CreateActiveParabolicQuery (entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, entity_pos_t yOrigin, const std::vector< int > &owners, int requiredInterface, u8 flags)=0
 Construct an active query of a paraboloic form around the unit. More...
 
virtual entity_pos_t GetEffectiveParabolicRange (entity_id_t source, entity_id_t target, entity_pos_t range, entity_pos_t yOrigin) const =0
 Get the effective range in a parablic range query. More...
 
virtual entity_pos_t GetElevationAdaptedRange (const CFixedVector3D &pos, const CFixedVector3D &rot, entity_pos_t range, entity_pos_t yOrigin, entity_pos_t angle) const =0
 Get the average elevation over 8 points on distance range around the entity. More...
 
virtual void DestroyActiveQuery (tag_t tag)=0
 Destroy a query and clean up resources. More...
 
virtual void EnableActiveQuery (tag_t tag)=0
 Re-enable the processing of a query. More...
 
virtual void DisableActiveQuery (tag_t tag)=0
 Disable the processing of a query (no RangeUpdate messages will be sent). More...
 
virtual bool IsActiveQueryEnabled (tag_t tag) const =0
 Check if the processing of a query is enabled. More...
 
virtual std::vector< entity_id_tResetActiveQuery (tag_t tag)=0
 Immediately execute a query, and re-enable it if disabled. More...
 
virtual std::vector< entity_id_tGetEntitiesByPlayer (player_id_t player) const =0
 Returns a list of all entities for a specific player. More...
 
virtual std::vector< entity_id_tGetNonGaiaEntities () const =0
 Returns a list of all entities of all players except gaia. More...
 
virtual std::vector< entity_id_tGetGaiaAndNonGaiaEntities () const =0
 Returns a list of all entities owned by a player or gaia. More...
 
virtual void SetDebugOverlay (bool enabled)=0
 Toggle the rendering of debug info. More...
 
virtual u8 GetEntityFlagMask (const std::string &identifier) const =0
 Returns the mask for the specified identifier. More...
 
virtual void SetEntityFlag (entity_id_t ent, const std::string &identifier, bool value)=0
 Set the flag specified by the identifier to the supplied value for the entity. More...
 
virtual CLosQuerier GetLosQuerier (player_id_t player) const =0
 Returns a CLosQuerier for checking whether vertex positions are visible to the given player (or other players it shares LOS with). More...
 
virtual void ActivateScriptedVisibility (entity_id_t ent, bool status)=0
 Toggle the scripted Visibility component activation for entity ent. More...
 
virtual LosVisibility GetLosVisibility (CEntityHandle ent, player_id_t player) const =0
 Returns the visibility status of the given entity, with respect to the given player. More...
 
virtual LosVisibility GetLosVisibility (entity_id_t ent, player_id_t player) const =0
 
virtual LosVisibility GetLosVisibilityPosition (entity_pos_t x, entity_pos_t z, player_id_t player) const =0
 Returns the visibility status of the given position, with respect to the given player. More...
 
virtual void RequestVisibilityUpdate (entity_id_t ent)=0
 Request the update of the visibility cache of ent at next turn. More...
 
std::string GetLosVisibility_wrapper (entity_id_t ent, player_id_t player) const
 GetLosVisibility wrapped for script calls. More...
 
std::string GetLosVisibilityPosition_wrapper (entity_pos_t x, entity_pos_t z, player_id_t player) const
 GetLosVisibilityPosition wrapped for script calls. More...
 
virtual void ExploreMap (player_id_t p)=0
 Explore the map (but leave it in the FoW) for player p. More...
 
virtual void ExploreTerritories ()=0
 Explore the tiles inside each player's territory. More...
 
virtual void RevealShore (player_id_t p, bool enable)=0
 Reveal the shore for specified player p. More...
 
virtual void SetLosRevealAll (player_id_t player, bool enabled)=0
 Set whether the whole map should be made visible to the given player. More...
 
virtual bool GetLosRevealAll (player_id_t player) const =0
 Returns whether the whole map has been made visible to the given player. More...
 
virtual void SetLosCircular (bool enabled)=0
 Set the LOS to be restricted to a circular map. More...
 
virtual bool GetLosCircular () const =0
 Returns whether the LOS is restricted to a circular map. More...
 
virtual void SetSharedLos (player_id_t player, const std::vector< player_id_t > &players)=0
 Sets shared LOS data for player to the given list of players. More...
 
virtual u32 GetSharedLosMask (player_id_t player) const =0
 Returns shared LOS mask for player. More...
 
virtual u8 GetPercentMapExplored (player_id_t player) const =0
 Get percent map explored statistics for specified player. More...
 
virtual u8 GetUnionPercentMapExplored (const std::vector< player_id_t > &players) const =0
 Get percent map explored statistics for specified set of players. More...
 
virtual size_t GetVerticesPerSide () const =0
 
virtual void Verify ()=0
 Perform some internal consistency checks for testing/debugging. More...
 
- Public Member Functions inherited from IComponent
virtual ~IComponent ()
 
virtual void Init (const CParamNode &paramNode)=0
 
virtual void Deinit ()=0
 
virtual void HandleMessage (const CMessage &msg, bool global)
 
CEntityHandle GetEntityHandle () const
 
void SetEntityHandle (CEntityHandle ent)
 
entity_id_t GetEntityId () const
 
CEntityHandle GetSystemEntity () const
 
const CSimContextGetSimContext () const
 
void SetSimContext (const CSimContext &context)
 
virtual void Serialize (ISerializer &serialize)=0
 
virtual void Deserialize (const CParamNode &paramNode, IDeserializer &deserialize)=0
 
virtual bool NewJSObject (const ScriptInterface &scriptInterface, JS::MutableHandleObject out) const
 Returns false by default, indicating that a scripted wrapper of this IComponent is not supported. More...
 
virtual JS::Value GetJSInstance () const
 
virtual int GetComponentTypeId () const =0
 

Static Public Member Functions

static void ClassInit (CComponentManager &componentManager)
 
static IComponentAllocate (const ScriptInterface &, JS::HandleValue)
 
static void Deallocate (IComponent *cmp)
 
static std::string GetSchema ()
 
- Static Public Member Functions inherited from IComponent
static std::string GetSchema ()
 
static void RegisterComponentType (CComponentManager &mgr, EInterfaceId iid, EComponentTypeId cid, AllocFunc alloc, DeallocFunc dealloc, const char *name, const std::string &schema)
 
static void RegisterComponentTypeScriptWrapper (CComponentManager &mgr, EInterfaceId iid, EComponentTypeId cid, AllocFunc alloc, DeallocFunc dealloc, const char *name, const std::string &schema)
 
static u8 GetSerializationVersion ()
 

Public Attributes

bool m_DebugOverlayEnabled
 
bool m_DebugOverlayDirty
 
std::vector< SOverlayLinem_DebugOverlayLines
 
bool m_Deserializing
 
entity_pos_t m_WorldX0
 
entity_pos_t m_WorldZ0
 
entity_pos_t m_WorldX1
 
entity_pos_t m_WorldZ1
 
tag_t m_QueryNext
 
std::map< tag_t, Query > m_Queries
 
EntityMap< EntityData > m_EntityData
 
FastSpatialSubdivision m_Subdivision
 
std::vector< entity_id_tm_SubdivisionResults
 
std::array< bool, MAX_LOS_PLAYER_ID+2 > m_LosRevealAll
 
bool m_LosCircular
 
i32 m_LosVerticesPerSide
 
i32 m_LosRegionsPerSide
 
bool m_GlobalVisibilityUpdate
 
std::array< bool, MAX_LOS_PLAYER_IDm_GlobalPlayerVisibilityUpdate
 
Grid< u16m_DirtyVisibility
 
Grid< std::set< entity_id_t > > m_LosRegions
 
std::vector< entity_id_tm_ModifiedEntities
 
std::array< Grid< u16 >, MAX_LOS_PLAYER_IDm_LosPlayerCounts
 
Grid< u32m_LosState
 
Grid< u32m_LosStateRevealed
 
std::array< u32, MAX_LOS_PLAYER_ID+2 > m_SharedLosMasks
 
std::array< u16, MAX_LOS_PLAYER_ID+2 > m_SharedDirtyVisibilityMasks
 
u32 m_TotalInworldVertices
 
std::vector< u32m_ExploredVertices
 

Static Public Attributes

static const player_id_t MAX_LOS_PLAYER_ID = 16
 

Detailed Description

Range manager implementation.

Maintains a list of all entities (and their positions and owners), which is used for queries.

LOS implementation is based on the model described in GPG2. (TODO: would be nice to make it cleverer, so e.g. mountains and walls can block vision)

Member Typedef Documentation

◆ LosRegion

using CCmpRangeManager::LosRegion = std::pair<u16, u16>

Member Function Documentation

◆ ActivateScriptedVisibility()

void CCmpRangeManager::ActivateScriptedVisibility ( entity_id_t  ent,
bool  status 
)
inlineoverridevirtual

Toggle the scripted Visibility component activation for entity ent.

Implements ICmpRangeManager.

◆ AddToRegion()

void CCmpRangeManager::AddToRegion ( LosRegion  region,
entity_id_t  ent 
)
inline

◆ Allocate()

static IComponent * CCmpRangeManager::Allocate ( const ScriptInterface ,
JS::HandleValue   
)
inlinestatic

◆ ClassInit()

static void CCmpRangeManager::ClassInit ( CComponentManager componentManager)
inlinestatic

◆ ComputeLosVisibility() [1/2]

LosVisibility CCmpRangeManager::ComputeLosVisibility ( CEntityHandle  ent,
player_id_t  player 
) const
inline

◆ ComputeLosVisibility() [2/2]

LosVisibility CCmpRangeManager::ComputeLosVisibility ( entity_id_t  ent,
player_id_t  player 
) const
inline

◆ ConstructParabolicQuery()

Query CCmpRangeManager::ConstructParabolicQuery ( entity_id_t  source,
entity_pos_t  minRange,
entity_pos_t  maxRange,
entity_pos_t  yOrigin,
const std::vector< int > &  owners,
int  requiredInterface,
u8  flagsMask,
bool  accountForSize 
) const
inline

◆ ConstructQuery()

Query CCmpRangeManager::ConstructQuery ( entity_id_t  source,
entity_pos_t  minRange,
entity_pos_t  maxRange,
const std::vector< int > &  owners,
int  requiredInterface,
u8  flagsMask,
bool  accountForSize 
) const
inline

◆ CreateActiveParabolicQuery()

tag_t CCmpRangeManager::CreateActiveParabolicQuery ( entity_id_t  source,
entity_pos_t  minRange,
entity_pos_t  maxRange,
entity_pos_t  yOrigin,
const std::vector< int > &  owners,
int  requiredInterface,
u8  flags 
)
inlineoverridevirtual

Construct an active query of a paraboloic form around the unit.

The query will be disabled by default.

Parameters
sourcethe entity around which the range will be computed.
minRangenon-negative minimum horizontal distance in metres (inclusive). MinRange doesn't do parabolic checks.
maxRangenon-negative maximum distance in metres (inclusive) for units on the same elevation; or -1.0 to ignore distance. For units on a different height positions, a physical correct paraboloid with height=maxRange/2 above the unit is used to query them
yOriginextra bonus so the source can be placed higher and shoot further
ownerslist of player IDs that matching entities may have; -1 matches entities with no owner.
requiredInterfaceif non-zero, an interface ID that matching entities must implement.
flagsif a entity in range has one of the flags set it will show up. NB: this one has no accountForSize parameter (assumed true), because we currently can only have 7 arguments for JS functions.
Returns
unique non-zero identifier of query.

Implements ICmpRangeManager.

◆ CreateActiveQuery()

tag_t CCmpRangeManager::CreateActiveQuery ( entity_id_t  source,
entity_pos_t  minRange,
entity_pos_t  maxRange,
const std::vector< int > &  owners,
int  requiredInterface,
u8  flags,
bool  accountForSize 
)
inlineoverridevirtual

Construct an active query.

The query will be disabled by default.

Parameters
sourcethe entity around which the range will be computed.
minRangenon-negative minimum distance in metres (inclusive).
maxRangenon-negative maximum distance in metres (inclusive); or -1.0 to ignore distance.
ownerslist of player IDs that matching entities may have; -1 matches entities with no owner.
requiredInterfaceif non-zero, an interface ID that matching entities must implement.
flagsif a entity in range has one of the flags set it will show up.
accountForSizeif true, compensate for source/target entity sizes.
Returns
unique non-zero identifier of query.

Implements ICmpRangeManager.

◆ Deallocate()

static void CCmpRangeManager::Deallocate ( IComponent cmp)
inlinestatic

◆ Deinit()

void CCmpRangeManager::Deinit ( )
inlineoverridevirtual

Implements IComponent.

◆ Deserialize()

void CCmpRangeManager::Deserialize ( const CParamNode paramNode,
IDeserializer deserialize 
)
inlineoverridevirtual

Implements IComponent.

◆ DestroyActiveQuery()

void CCmpRangeManager::DestroyActiveQuery ( tag_t  tag)
inlineoverridevirtual

Destroy a query and clean up resources.

This must be called when an entity no longer needs its query (e.g. when the entity is destroyed).

Parameters
tagidentifier of query.

Implements ICmpRangeManager.

◆ DisableActiveQuery()

void CCmpRangeManager::DisableActiveQuery ( tag_t  tag)
inlineoverridevirtual

Disable the processing of a query (no RangeUpdate messages will be sent).

Parameters
tagidentifier of query.

Implements ICmpRangeManager.

◆ EnableActiveQuery()

void CCmpRangeManager::EnableActiveQuery ( tag_t  tag)
inlineoverridevirtual

Re-enable the processing of a query.

Parameters
tagidentifier of query.

Implements ICmpRangeManager.

◆ ExecuteActiveQueries()

void CCmpRangeManager::ExecuteActiveQueries ( )
inline

Update all currently-enabled active queries.

◆ ExecuteQuery()

std::vector< entity_id_t > CCmpRangeManager::ExecuteQuery ( entity_id_t  source,
entity_pos_t  minRange,
entity_pos_t  maxRange,
const std::vector< int > &  owners,
int  requiredInterface,
bool  accountForSize 
)
inlineoverridevirtual

Execute a passive query.

Parameters
sourcethe entity around which the range will be computed.
minRangenon-negative minimum distance in metres (inclusive).
maxRangenon-negative maximum distance in metres (inclusive); or -1.0 to ignore distance.
ownerslist of player IDs that matching entities may have; -1 matches entities with no owner.
requiredInterfaceif non-zero, an interface ID that matching entities must implement.
accountForSizeif true, compensate for source/target entity sizes.
Returns
list of entities matching the query, ordered by increasing distance from the source entity.

Implements ICmpRangeManager.

◆ ExecuteQueryAroundPos()

std::vector< entity_id_t > CCmpRangeManager::ExecuteQueryAroundPos ( const CFixedVector2D pos,
entity_pos_t  minRange,
entity_pos_t  maxRange,
const std::vector< int > &  owners,
int  requiredInterface,
bool  accountForSize 
)
inlineoverridevirtual

Execute a passive query.

Parameters
posthe position around which the range will be computed.
minRangenon-negative minimum distance in metres (inclusive).
maxRangenon-negative maximum distance in metres (inclusive); or -1.0 to ignore distance.
ownerslist of player IDs that matching entities may have; -1 matches entities with no owner.
requiredInterfaceif non-zero, an interface ID that matching entities must implement.
accountForSizeif true, compensate for source/target entity sizes.
Returns
list of entities matching the query, ordered by increasing distance from the source entity.

Implements ICmpRangeManager.

◆ ExploreMap()

void CCmpRangeManager::ExploreMap ( player_id_t  p)
inlineoverridevirtual

Explore the map (but leave it in the FoW) for player p.

Implements ICmpRangeManager.

◆ ExploreTerritories()

void CCmpRangeManager::ExploreTerritories ( )
inlineoverridevirtual

Explore the tiles inside each player's territory.

This is done only at the beginning of the game.

Implements ICmpRangeManager.

◆ GetComponentTypeId()

int CCmpRangeManager::GetComponentTypeId ( ) const
inlineoverridevirtual

Implements IComponent.

◆ GetEffectiveParabolicRange()

entity_pos_t CCmpRangeManager::GetEffectiveParabolicRange ( entity_id_t  source,
entity_id_t  target,
entity_pos_t  range,
entity_pos_t  yOrigin 
) const
inlineoverridevirtual

Get the effective range in a parablic range query.

Parameters
sourceThe entity id at the origin of the query.
targetA target entity id.
rangeThe distance to compare terrain height with.
yOriginHeight the source gains over the target by default.
Returns
a fixed number representing the effective range correcting parabolicly for the height difference. Returns -1 when the target is too high compared to the source to be in range.

Implements ICmpRangeManager.

◆ GetElevationAdaptedRange()

entity_pos_t CCmpRangeManager::GetElevationAdaptedRange ( const CFixedVector3D pos,
const CFixedVector3D rot,
entity_pos_t  range,
entity_pos_t  yOrigin,
entity_pos_t  angle 
) const
inlineoverridevirtual

Get the average elevation over 8 points on distance range around the entity.

Parameters
idthe entity id to look around
rangethe distance to compare terrain height with
Returns
a fixed number representing the average difference. It's positive when the entity is on average higher than the terrain surrounding it.

Implements ICmpRangeManager.

◆ GetEntitiesByMask()

std::vector< entity_id_t > CCmpRangeManager::GetEntitiesByMask ( u32  ownerMask) const
inline

◆ GetEntitiesByPlayer()

std::vector< entity_id_t > CCmpRangeManager::GetEntitiesByPlayer ( player_id_t  player) const
inlineoverridevirtual

Returns a list of all entities for a specific player.

(This is on this interface because it shares a lot of the implementation. Maybe it should be extended to be more like ExecuteQuery without the range parameter.)

Implements ICmpRangeManager.

◆ GetEntityFlagMask()

u8 CCmpRangeManager::GetEntityFlagMask ( const std::string &  identifier) const
inlineoverridevirtual

Returns the mask for the specified identifier.

Implements ICmpRangeManager.

◆ GetGaiaAndNonGaiaEntities()

std::vector< entity_id_t > CCmpRangeManager::GetGaiaAndNonGaiaEntities ( ) const
inlineoverridevirtual

Returns a list of all entities owned by a player or gaia.

Implements ICmpRangeManager.

◆ GetLosCircular()

bool CCmpRangeManager::GetLosCircular ( ) const
inlineoverridevirtual

Returns whether the LOS is restricted to a circular map.

Implements ICmpRangeManager.

◆ GetLosQuerier()

CLosQuerier CCmpRangeManager::GetLosQuerier ( player_id_t  player) const
inlineoverridevirtual

Returns a CLosQuerier for checking whether vertex positions are visible to the given player (or other players it shares LOS with).

Implements ICmpRangeManager.

◆ GetLosRevealAll()

bool CCmpRangeManager::GetLosRevealAll ( player_id_t  player) const
inlineoverridevirtual

Returns whether the whole map has been made visible to the given player.

Implements ICmpRangeManager.

◆ GetLosVisibility() [1/2]

LosVisibility CCmpRangeManager::GetLosVisibility ( CEntityHandle  ent,
player_id_t  player 
) const
inlineoverridevirtual

Returns the visibility status of the given entity, with respect to the given player.

Returns LosVisibility::HIDDEN if the entity doesn't exist or is not in the world. This respects the GetLosRevealAll flag.

Implements ICmpRangeManager.

◆ GetLosVisibility() [2/2]

LosVisibility CCmpRangeManager::GetLosVisibility ( entity_id_t  ent,
player_id_t  player 
) const
inlineoverridevirtual

Implements ICmpRangeManager.

◆ GetLosVisibilityPosition()

LosVisibility CCmpRangeManager::GetLosVisibilityPosition ( entity_pos_t  x,
entity_pos_t  z,
player_id_t  player 
) const
inlineoverridevirtual

Returns the visibility status of the given position, with respect to the given player.

This respects the GetLosRevealAll flag.

Implements ICmpRangeManager.

◆ GetNonGaiaEntities()

std::vector< entity_id_t > CCmpRangeManager::GetNonGaiaEntities ( ) const
inlineoverridevirtual

Returns a list of all entities of all players except gaia.

Implements ICmpRangeManager.

◆ getParabolicRangeForm()

virtual std::vector< entity_pos_t > CCmpRangeManager::getParabolicRangeForm ( CFixedVector3D  pos,
entity_pos_t  maxRange,
entity_pos_t  cutoff,
entity_pos_t  minAngle,
entity_pos_t  maxAngle,
int  numberOfSteps 
) const
inlinevirtual

◆ GetPercentMapExplored()

u8 CCmpRangeManager::GetPercentMapExplored ( player_id_t  player) const
inlineoverridevirtual

Get percent map explored statistics for specified player.

Implements ICmpRangeManager.

◆ GetSchema()

static std::string CCmpRangeManager::GetSchema ( )
inlinestatic

◆ GetSharedLosMask()

u32 CCmpRangeManager::GetSharedLosMask ( player_id_t  player) const
inlineoverridevirtual

Returns shared LOS mask for player.

Implements ICmpRangeManager.

◆ GetSubdivision()

FastSpatialSubdivision * CCmpRangeManager::GetSubdivision ( )
inlineoverridevirtual

Access the spatial subdivision kept by the range manager.

Returns
pointer to spatial subdivision structure.

Implements ICmpRangeManager.

◆ GetUnionPercentMapExplored()

u8 CCmpRangeManager::GetUnionPercentMapExplored ( const std::vector< player_id_t > &  players) const
inlineoverridevirtual

Get percent map explored statistics for specified set of players.

Note: this function computes statistics from scratch and should not be called too often.

Implements ICmpRangeManager.

◆ GetVerticesPerSide()

size_t CCmpRangeManager::GetVerticesPerSide ( ) const
inlineoverridevirtual
Returns
The number of LOS vertices.

Implements ICmpRangeManager.

◆ HandleMessage()

void CCmpRangeManager::HandleMessage ( const CMessage msg,
bool  global 
)
inlineoverridevirtual

Reimplemented from IComponent.

◆ Init()

void CCmpRangeManager::Init ( const CParamNode paramNode)
inlineoverridevirtual

Implements IComponent.

◆ IsActiveQueryEnabled()

bool CCmpRangeManager::IsActiveQueryEnabled ( tag_t  tag) const
inlineoverridevirtual

Check if the processing of a query is enabled.

Parameters
tagidentifier of a query.

Implements ICmpRangeManager.

◆ LosAdd()

void CCmpRangeManager::LosAdd ( player_id_t  owner,
entity_pos_t  visionRange,
CFixedVector2D  pos 
)
inline

◆ LosAddStripHelper()

void CCmpRangeManager::LosAddStripHelper ( u8  owner,
i32  i0,
i32  i1,
i32  j,
Grid< u16 > &  counts 
)
inline

Update the LOS state of tiles within a given horizontal strip (i0,j) to (i1,j) (inclusive).

◆ LosIsOffWorld()

bool CCmpRangeManager::LosIsOffWorld ( ssize_t  i,
ssize_t  j 
) const
inline

Returns whether the given vertex is outside the normal bounds of the world (i.e.

outside the range of a circular map)

◆ LosMove()

void CCmpRangeManager::LosMove ( player_id_t  owner,
entity_pos_t  visionRange,
CFixedVector2D  from,
CFixedVector2D  to 
)
inline

◆ LosRemove()

void CCmpRangeManager::LosRemove ( player_id_t  owner,
entity_pos_t  visionRange,
CFixedVector2D  pos 
)
inline

◆ LosRemoveStripHelper()

void CCmpRangeManager::LosRemoveStripHelper ( u8  owner,
i32  i0,
i32  i1,
i32  j,
Grid< u16 > &  counts 
)
inline

Update the LOS state of tiles within a given horizontal strip (i0,j) to (i1,j) (inclusive).

◆ LosUpdateHelper()

template<bool adding>
void CCmpRangeManager::LosUpdateHelper ( u8  owner,
entity_pos_t  visionRange,
CFixedVector2D  pos 
)
inline

Update the LOS state of tiles within a given circular range, either adding or removing visibility depending on the template parameter.

Assumes owner is in the valid range.

◆ LosUpdateHelperIncremental()

void CCmpRangeManager::LosUpdateHelperIncremental ( u8  owner,
entity_pos_t  visionRange,
CFixedVector2D  from,
CFixedVector2D  to 
)
inline

Update the LOS state of tiles within a given circular range, by removing visibility around the 'from' position and then adding visibility around the 'to' position.

◆ LosVertexToLosRegionsHelper()

LosRegion CCmpRangeManager::LosVertexToLosRegionsHelper ( u16  x,
u16  z 
) const
inline

◆ MarkVisibilityDirtyAroundTile()

void CCmpRangeManager::MarkVisibilityDirtyAroundTile ( u8  owner,
i32  i,
i32  j 
)
inline

◆ PerformQuery()

void CCmpRangeManager::PerformQuery ( const Query &  q,
std::vector< entity_id_t > &  r,
CFixedVector2D  pos 
)
inline

Returns a list of distinct entity IDs that match the given query, sorted by ID.

◆ PosToLosRegionsHelper()

LosRegion CCmpRangeManager::PosToLosRegionsHelper ( entity_pos_t  x,
entity_pos_t  z 
) const
inline

◆ RemoveFromRegion()

void CCmpRangeManager::RemoveFromRegion ( LosRegion  region,
entity_id_t  ent 
)
inline

◆ RenderSubmit()

void CCmpRangeManager::RenderSubmit ( SceneCollector collector)
inline

◆ RequestVisibilityUpdate()

void CCmpRangeManager::RequestVisibilityUpdate ( entity_id_t  ent)
inlineoverridevirtual

Request the update of the visibility cache of ent at next turn.

Typically used for fogging.

Implements ICmpRangeManager.

◆ ResetActiveQuery()

std::vector< entity_id_t > CCmpRangeManager::ResetActiveQuery ( tag_t  tag)
inlineoverridevirtual

Immediately execute a query, and re-enable it if disabled.

The next RangeUpdate message will say who has entered/left since this call, so you won't miss any notifications.

Parameters
tagidentifier of query.
Returns
list of entities matching the query, ordered by increasing distance from the source entity.

Implements ICmpRangeManager.

◆ ResetDerivedData()

void CCmpRangeManager::ResetDerivedData ( )
inline

◆ ResetSubdivisions()

void CCmpRangeManager::ResetSubdivisions ( entity_pos_t  x1,
entity_pos_t  z1 
)
inline

◆ RevealShore()

void CCmpRangeManager::RevealShore ( player_id_t  p,
bool  enable 
)
inlineoverridevirtual

Reveal the shore for specified player p.

This works like for entities: if RevealShore is called multiple times with enabled, it will be necessary to call it the same number of times with !enabled to make the shore fall back into the FoW.

Implements ICmpRangeManager.

◆ SeeExploredEntities()

void CCmpRangeManager::SeeExploredEntities ( player_id_t  p) const
inline

Force any entity in explored territory to appear for player p.

This is useful for miraging entities inside the territory borders at the beginning of a game, or if the "Explore Map" option has been set.

◆ Serialize()

void CCmpRangeManager::Serialize ( ISerializer serialize)
inlineoverridevirtual

Implements IComponent.

◆ SerializeCommon()

template<typename S >
void CCmpRangeManager::SerializeCommon ( S &  serialize)
inline

◆ SetBounds()

void CCmpRangeManager::SetBounds ( entity_pos_t  x0,
entity_pos_t  z0,
entity_pos_t  x1,
entity_pos_t  z1 
)
inlineoverridevirtual

Set the bounds of the world.

Entities should not be outside the bounds (else efficiency will suffer).

Parameters
x0,z0,x1,z1Coordinates of the corners of the world

Implements ICmpRangeManager.

◆ SetDebugOverlay()

void CCmpRangeManager::SetDebugOverlay ( bool  enabled)
inlineoverridevirtual

Toggle the rendering of debug info.

Implements ICmpRangeManager.

◆ SetEntityFlag()

void CCmpRangeManager::SetEntityFlag ( entity_id_t  ent,
const std::string &  identifier,
bool  value 
)
inlineoverridevirtual

Set the flag specified by the identifier to the supplied value for the entity.

Parameters
entthe entity whose flags will be modified.
identifierthe flag to be modified.
valueto which the flag will be set.

Implements ICmpRangeManager.

◆ SetLosCircular()

void CCmpRangeManager::SetLosCircular ( bool  enabled)
inlineoverridevirtual

Set the LOS to be restricted to a circular map.

Implements ICmpRangeManager.

◆ SetLosRevealAll()

void CCmpRangeManager::SetLosRevealAll ( player_id_t  player,
bool  enabled 
)
inlineoverridevirtual

Set whether the whole map should be made visible to the given player.

If player is -1, the map will be made visible to all players.

Implements ICmpRangeManager.

◆ SetSharedLos()

void CCmpRangeManager::SetSharedLos ( player_id_t  player,
const std::vector< player_id_t > &  players 
)
inlineoverridevirtual

Sets shared LOS data for player to the given list of players.

Implements ICmpRangeManager.

◆ SharingLosAdd()

void CCmpRangeManager::SharingLosAdd ( u16  visionSharing,
entity_pos_t  visionRange,
CFixedVector2D  pos 
)
inline

◆ SharingLosMove()

void CCmpRangeManager::SharingLosMove ( u16  visionSharing,
entity_pos_t  visionRange,
CFixedVector2D  from,
CFixedVector2D  to 
)
inline

◆ SharingLosRemove()

void CCmpRangeManager::SharingLosRemove ( u16  visionSharing,
entity_pos_t  visionRange,
CFixedVector2D  pos 
)
inline

◆ TestEntityQuery()

bool CCmpRangeManager::TestEntityQuery ( const Query &  q,
entity_id_t  id,
const EntityData &  entity 
) const
inline

Returns whether the given entity matches the given query (ignoring maxRange)

◆ UpdateVisibility() [1/2]

void CCmpRangeManager::UpdateVisibility ( entity_id_t  ent)
inline

◆ UpdateVisibility() [2/2]

void CCmpRangeManager::UpdateVisibility ( entity_id_t  ent,
player_id_t  player 
)
inline

◆ UpdateVisibilityData()

void CCmpRangeManager::UpdateVisibilityData ( )
inline

◆ Verify()

void CCmpRangeManager::Verify ( )
inlineoverridevirtual

Perform some internal consistency checks for testing/debugging.

Implements ICmpRangeManager.

Member Data Documentation

◆ m_DebugOverlayDirty

bool CCmpRangeManager::m_DebugOverlayDirty

◆ m_DebugOverlayEnabled

bool CCmpRangeManager::m_DebugOverlayEnabled

◆ m_DebugOverlayLines

std::vector<SOverlayLine> CCmpRangeManager::m_DebugOverlayLines

◆ m_Deserializing

bool CCmpRangeManager::m_Deserializing

◆ m_DirtyVisibility

Grid<u16> CCmpRangeManager::m_DirtyVisibility

◆ m_EntityData

EntityMap<EntityData> CCmpRangeManager::m_EntityData

◆ m_ExploredVertices

std::vector<u32> CCmpRangeManager::m_ExploredVertices

◆ m_GlobalPlayerVisibilityUpdate

std::array<bool, MAX_LOS_PLAYER_ID> CCmpRangeManager::m_GlobalPlayerVisibilityUpdate

◆ m_GlobalVisibilityUpdate

bool CCmpRangeManager::m_GlobalVisibilityUpdate

◆ m_LosCircular

bool CCmpRangeManager::m_LosCircular

◆ m_LosPlayerCounts

std::array<Grid<u16>, MAX_LOS_PLAYER_ID> CCmpRangeManager::m_LosPlayerCounts

◆ m_LosRegions

Grid<std::set<entity_id_t> > CCmpRangeManager::m_LosRegions

◆ m_LosRegionsPerSide

i32 CCmpRangeManager::m_LosRegionsPerSide

◆ m_LosRevealAll

std::array<bool, MAX_LOS_PLAYER_ID+2> CCmpRangeManager::m_LosRevealAll

◆ m_LosState

Grid<u32> CCmpRangeManager::m_LosState

◆ m_LosStateRevealed

Grid<u32> CCmpRangeManager::m_LosStateRevealed

◆ m_LosVerticesPerSide

i32 CCmpRangeManager::m_LosVerticesPerSide

◆ m_ModifiedEntities

std::vector<entity_id_t> CCmpRangeManager::m_ModifiedEntities

◆ m_Queries

std::map<tag_t, Query> CCmpRangeManager::m_Queries

◆ m_QueryNext

tag_t CCmpRangeManager::m_QueryNext

◆ m_SharedDirtyVisibilityMasks

std::array<u16, MAX_LOS_PLAYER_ID+2> CCmpRangeManager::m_SharedDirtyVisibilityMasks

◆ m_SharedLosMasks

std::array<u32, MAX_LOS_PLAYER_ID+2> CCmpRangeManager::m_SharedLosMasks

◆ m_Subdivision

FastSpatialSubdivision CCmpRangeManager::m_Subdivision

◆ m_SubdivisionResults

std::vector<entity_id_t> CCmpRangeManager::m_SubdivisionResults

◆ m_TotalInworldVertices

u32 CCmpRangeManager::m_TotalInworldVertices

◆ m_WorldX0

entity_pos_t CCmpRangeManager::m_WorldX0

◆ m_WorldX1

entity_pos_t CCmpRangeManager::m_WorldX1

◆ m_WorldZ0

entity_pos_t CCmpRangeManager::m_WorldZ0

◆ m_WorldZ1

entity_pos_t CCmpRangeManager::m_WorldZ1

◆ MAX_LOS_PLAYER_ID

const player_id_t CCmpRangeManager::MAX_LOS_PLAYER_ID = 16
static

The documentation for this class was generated from the following file: