Pyrogenesis  trunk
Public Member Functions | Static Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
CCmpObstructionManager Class Reference
Inheritance diagram for CCmpObstructionManager:
Inheritance graph
[legend]
Collaboration diagram for CCmpObstructionManager:
Collaboration graph
[legend]

Public Member Functions

virtual int GetComponentTypeId () const
 
virtual void Init (const CParamNode &paramNode)
 
virtual void Deinit ()
 
template<typename S >
void SerializeCommon (S &serialize)
 
virtual void Serialize (ISerializer &serialize)
 
virtual void Deserialize (const CParamNode &paramNode, IDeserializer &deserialize)
 
virtual void HandleMessage (const CMessage &msg, bool global)
 
virtual void SetBounds (entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1)
 Set the bounds of the world. More...
 
void ResetSubdivisions (entity_pos_t x1, entity_pos_t z1)
 
virtual tag_t AddUnitShape (entity_id_t ent, entity_pos_t x, entity_pos_t z, entity_pos_t clearance, flags_t flags, entity_id_t group)
 Register a unit shape. More...
 
virtual tag_t AddStaticShape (entity_id_t ent, entity_pos_t x, entity_pos_t z, entity_angle_t a, entity_pos_t w, entity_pos_t h, flags_t flags, entity_id_t group, entity_id_t group2)
 Register a static shape. More...
 
virtual ObstructionSquare GetUnitShapeObstruction (entity_pos_t x, entity_pos_t z, entity_pos_t clearance) const
 
virtual ObstructionSquare GetStaticShapeObstruction (entity_pos_t x, entity_pos_t z, entity_angle_t a, entity_pos_t w, entity_pos_t h) const
 
virtual void MoveShape (tag_t tag, entity_pos_t x, entity_pos_t z, entity_angle_t a)
 Adjust the position and angle of an existing shape. More...
 
virtual void SetUnitMovingFlag (tag_t tag, bool moving)
 Set whether a unit shape is moving or stationary. More...
 
virtual void SetUnitControlGroup (tag_t tag, entity_id_t group)
 Set the control group of a unit shape. More...
 
virtual void SetStaticControlGroup (tag_t tag, entity_id_t group, entity_id_t group2)
 Sets the control group of a static shape. More...
 
virtual void RemoveShape (tag_t tag)
 Remove an existing shape. More...
 
virtual ObstructionSquare GetObstruction (tag_t tag) const
 Get the obstruction square representing the given shape. More...
 
virtual bool TestLine (const IObstructionTestFilter &filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, bool relaxClearanceForUnits=false) const
 Collision test a flat-ended thick line against the current set of shapes. More...
 
virtual bool TestStaticShape (const IObstructionTestFilter &filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, std::vector< entity_id_t > *out) const
 Collision test a static square shape against the current set of shapes. More...
 
virtual bool TestUnitShape (const IObstructionTestFilter &filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, std::vector< entity_id_t > *out) const
 Collision test a unit shape against the current set of registered shapes, and optionally writes a list of the colliding shapes' entities to an output list. More...
 
virtual void Rasterize (Grid< NavcellData > &grid, const std::vector< PathfinderPassability > &passClasses, bool fullUpdate)
 Convert the current set of shapes onto a navcell grid, for all passability classes contained in passClasses. More...
 
virtual void GetObstructionsInRange (const IObstructionTestFilter &filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector< ObstructionSquare > &squares) const
 Find all the obstructions that are inside (or partially inside) the given range. More...
 
virtual void GetUnitObstructionsInRange (const IObstructionTestFilter &filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector< ObstructionSquare > &squares) const
 
virtual void GetStaticObstructionsInRange (const IObstructionTestFilter &filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector< ObstructionSquare > &squares) const
 
virtual void GetUnitsOnObstruction (const ObstructionSquare &square, std::vector< entity_id_t > &out, const IObstructionTestFilter &filter, bool strict=false) const
 Returns the entity IDs of all unit shapes that intersect the given obstruction square, filtering out using the given filter. More...
 
virtual void SetPassabilityCircular (bool enabled)
 Set the passability to be restricted to a circular map. More...
 
virtual bool GetPassabilityCircular () const
 
virtual void SetDebugOverlay (bool enabled)
 Toggle the rendering of debug info. More...
 
void RenderSubmit (SceneCollector &collector)
 
virtual void UpdateInformations (GridUpdateInformation &informations)
 Gets dirtiness information and resets it afterwards. More...
 
- Public Member Functions inherited from IComponent
virtual ~IComponent ()
 
CEntityHandle GetEntityHandle () const
 
void SetEntityHandle (CEntityHandle ent)
 
entity_id_t GetEntityId () const
 
CEntityHandle GetSystemEntity () const
 
const CSimContextGetSimContext () const
 
void SetSimContext (const CSimContext &context)
 
virtual bool NewJSObject (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
 

Static Public Member Functions

static void ClassInit (CComponentManager &componentManager)
 
static IComponentAllocate (ScriptInterface &, JS::HandleValue)
 
static void Deallocate (IComponent *cmp)
 
static std::string GetSchema ()
 
- Static Public Member Functions inherited from IComponent
static std::string GetSchema ()
 
static u8 GetSerializationVersion ()
 

Public Attributes

bool m_DebugOverlayEnabled
 
bool m_DebugOverlayDirty
 
std::vector< SOverlayLinem_DebugOverlayLines
 
SpatialSubdivision m_UnitSubdivision
 
SpatialSubdivision m_StaticSubdivision
 
std::map< u32, UnitShapem_UnitShapes
 
std::map< u32, StaticShapem_StaticShapes
 
u32 m_UnitShapeNext
 
u32 m_StaticShapeNext
 
entity_pos_t m_MaxClearance
 
bool m_PassabilityCircular
 
entity_pos_t m_WorldX0
 
entity_pos_t m_WorldZ0
 
entity_pos_t m_WorldX1
 
entity_pos_t m_WorldZ1
 
u16 m_TerrainTiles
 

Private Member Functions

void MakeDirtyAll ()
 Mark all previous Rasterize()d grids as dirty, and the debug display. More...
 
void MakeDirtyDebug ()
 Mark the debug display as dirty. More...
 
void MarkDirtinessGrid (const entity_pos_t &x, const entity_pos_t &z, const entity_pos_t &r)
 
void MarkDirtinessGrid (const entity_pos_t &x, const entity_pos_t &z, const CFixedVector2D &hbox)
 
void MakeDirtyStatic (flags_t flags, u32 index, const StaticShape &shape)
 Mark all previous Rasterize()d grids as dirty, if they depend on this shape. More...
 
void MakeDirtyUnit (flags_t flags, u32 index, const UnitShape &shape)
 Mark all previous Rasterize()d grids as dirty, if they depend on this shape. More...
 
bool IsInWorld (entity_pos_t x, entity_pos_t z, entity_pos_t r) const
 Return whether the given point is within the world bounds by at least r. More...
 
bool IsInWorld (const CFixedVector2D &p) const
 Return whether the given point is within the world bounds. More...
 
void RasterizeHelper (Grid< NavcellData > &grid, ICmpObstructionManager::flags_t requireMask, bool fullUpdate, pass_class_t appliedMask, entity_pos_t clearance=fixed::Zero()) const
 

Private Attributes

GridUpdateInformation m_UpdateInformations
 
std::vector< u32m_DirtyStaticShapes
 
std::vector< u32m_DirtyUnitShapes
 

Additional Inherited Members

- Public Types inherited from ICmpObstructionManager
enum  EFlags {
  FLAG_BLOCK_MOVEMENT = (1 << 0), FLAG_BLOCK_FOUNDATION = (1 << 1), FLAG_BLOCK_CONSTRUCTION = (1 << 2), FLAG_BLOCK_PATHFINDING = (1 << 3),
  FLAG_MOVING = (1 << 4)
}
 Boolean flags affecting the obstruction behaviour of a shape. More...
 
typedef u8 flags_t
 Bitmask of EFlag values. More...
 

Member Function Documentation

virtual tag_t CCmpObstructionManager::AddStaticShape ( entity_id_t  ent,
entity_pos_t  x,
entity_pos_t  z,
entity_angle_t  a,
entity_pos_t  w,
entity_pos_t  h,
flags_t  flags,
entity_id_t  group,
entity_id_t  group2 
)
inlinevirtual

Register a static shape.

Parameters
ententity ID associated with this shape (or INVALID_ENTITY if none)
x,zcoordinates of center, in world space
aangle of rotation (clockwise from +Z direction)
wwidth (size along X axis)
hheight (size along Z axis)
flagsa set of EFlags values
groupprimary control group of the shape. Must be a valid control group ID.
group2Optional; secondary control group of the shape. Defaults to INVALID_ENTITY.
Returns
a valid tag for manipulating the shape
See also
StaticShape

Implements ICmpObstructionManager.

virtual tag_t CCmpObstructionManager::AddUnitShape ( entity_id_t  ent,
entity_pos_t  x,
entity_pos_t  z,
entity_pos_t  clearance,
flags_t  flags,
entity_id_t  group 
)
inlinevirtual

Register a unit shape.

Parameters
ententity ID associated with this shape (or INVALID_ENTITY if none)
x,zcoordinates of center, in world space
clearancepathfinding clearance of the unit (works as a radius)
flagsa set of EFlags values
groupcontrol group (typically the owner entity, or a formation controller entity
  • units ignore collisions with others in the same group)
Returns
a valid tag for manipulating the shape
See also
UnitShape

Implements ICmpObstructionManager.

static IComponent* CCmpObstructionManager::Allocate ( ScriptInterface ,
JS::HandleValue   
)
inlinestatic
static void CCmpObstructionManager::ClassInit ( CComponentManager componentManager)
inlinestatic
static void CCmpObstructionManager::Deallocate ( IComponent cmp)
inlinestatic
virtual void CCmpObstructionManager::Deinit ( )
inlinevirtual

Implements IComponent.

virtual void CCmpObstructionManager::Deserialize ( const CParamNode paramNode,
IDeserializer deserialize 
)
inlinevirtual

Implements IComponent.

virtual int CCmpObstructionManager::GetComponentTypeId ( ) const
inlinevirtual

Implements IComponent.

virtual ObstructionSquare CCmpObstructionManager::GetObstruction ( tag_t  tag) const
inlinevirtual

Get the obstruction square representing the given shape.

Parameters
tagtag of shape (must be valid)

Implements ICmpObstructionManager.

void CCmpObstructionManager::GetObstructionsInRange ( const IObstructionTestFilter filter,
entity_pos_t  x0,
entity_pos_t  z0,
entity_pos_t  x1,
entity_pos_t  z1,
std::vector< ObstructionSquare > &  squares 
) const
virtual

Find all the obstructions that are inside (or partially inside) the given range.

Parameters
filterfilter to restrict the shapes that are counted
x0X coordinate of left edge of range
z0Z coordinate of bottom edge of range
x1X coordinate of right edge of range
z1Z coordinate of top edge of range
squaresoutput list of obstructions

Implements ICmpObstructionManager.

virtual bool CCmpObstructionManager::GetPassabilityCircular ( ) const
inlinevirtual
static std::string CCmpObstructionManager::GetSchema ( )
inlinestatic
void CCmpObstructionManager::GetStaticObstructionsInRange ( const IObstructionTestFilter filter,
entity_pos_t  x0,
entity_pos_t  z0,
entity_pos_t  x1,
entity_pos_t  z1,
std::vector< ObstructionSquare > &  squares 
) const
virtual
virtual ObstructionSquare CCmpObstructionManager::GetStaticShapeObstruction ( entity_pos_t  x,
entity_pos_t  z,
entity_angle_t  a,
entity_pos_t  w,
entity_pos_t  h 
) const
inlinevirtual
void CCmpObstructionManager::GetUnitObstructionsInRange ( const IObstructionTestFilter filter,
entity_pos_t  x0,
entity_pos_t  z0,
entity_pos_t  x1,
entity_pos_t  z1,
std::vector< ObstructionSquare > &  squares 
) const
virtual
virtual ObstructionSquare CCmpObstructionManager::GetUnitShapeObstruction ( entity_pos_t  x,
entity_pos_t  z,
entity_pos_t  clearance 
) const
inlinevirtual
void CCmpObstructionManager::GetUnitsOnObstruction ( const ObstructionSquare square,
std::vector< entity_id_t > &  out,
const IObstructionTestFilter filter,
bool  strict = false 
) const
virtual

Returns the entity IDs of all unit shapes that intersect the given obstruction square, filtering out using the given filter.

Parameters
squarethe Obstruction squre we want to compare with.
outoutput list of obstructions
filterfilter for the obstructing units
strictwhether to be strict in the check or more permissive (ie rasterize more or less). Default false.

Implements ICmpObstructionManager.

virtual void CCmpObstructionManager::HandleMessage ( const CMessage msg,
bool  global 
)
inlinevirtual

Reimplemented from IComponent.

virtual void CCmpObstructionManager::Init ( const CParamNode paramNode)
inlinevirtual

Implements IComponent.

bool CCmpObstructionManager::IsInWorld ( entity_pos_t  x,
entity_pos_t  z,
entity_pos_t  r 
) const
inlineprivate

Return whether the given point is within the world bounds by at least r.

bool CCmpObstructionManager::IsInWorld ( const CFixedVector2D p) const
inlineprivate

Return whether the given point is within the world bounds.

void CCmpObstructionManager::MakeDirtyAll ( )
inlineprivate

Mark all previous Rasterize()d grids as dirty, and the debug display.

Call this when the world bounds have changed.

void CCmpObstructionManager::MakeDirtyDebug ( )
inlineprivate

Mark the debug display as dirty.

Call this when nothing has changed except a unit's 'moving' flag.

void CCmpObstructionManager::MakeDirtyStatic ( flags_t  flags,
u32  index,
const StaticShape shape 
)
inlineprivate

Mark all previous Rasterize()d grids as dirty, if they depend on this shape.

Call this when a static shape has changed.

void CCmpObstructionManager::MakeDirtyUnit ( flags_t  flags,
u32  index,
const UnitShape shape 
)
inlineprivate

Mark all previous Rasterize()d grids as dirty, if they depend on this shape.

Call this when a unit shape has changed.

void CCmpObstructionManager::MarkDirtinessGrid ( const entity_pos_t x,
const entity_pos_t z,
const entity_pos_t r 
)
inlineprivate
void CCmpObstructionManager::MarkDirtinessGrid ( const entity_pos_t x,
const entity_pos_t z,
const CFixedVector2D hbox 
)
inlineprivate
virtual void CCmpObstructionManager::MoveShape ( tag_t  tag,
entity_pos_t  x,
entity_pos_t  z,
entity_angle_t  a 
)
inlinevirtual

Adjust the position and angle of an existing shape.

Parameters
tagtag of shape (must be valid)
xX coordinate of center, in world space
zZ coordinate of center, in world space
aangle of rotation (clockwise from +Z direction); ignored for unit shapes

Implements ICmpObstructionManager.

void CCmpObstructionManager::Rasterize ( Grid< NavcellData > &  grid,
const std::vector< PathfinderPassability > &  passClasses,
bool  fullUpdate 
)
virtual

Convert the current set of shapes onto a navcell grid, for all passability classes contained in passClasses.

If fullUpdate is false, the function will only go through dirty shapes. Shapes are expanded by the passClasses clearances, by ORing their masks onto the grid.

Implements ICmpObstructionManager.

void CCmpObstructionManager::RasterizeHelper ( Grid< NavcellData > &  grid,
ICmpObstructionManager::flags_t  requireMask,
bool  fullUpdate,
pass_class_t  appliedMask,
entity_pos_t  clearance = fixed::Zero() 
) const
private
virtual void CCmpObstructionManager::RemoveShape ( tag_t  tag)
inlinevirtual

Remove an existing shape.

The tag will be made invalid and must not be used after this.

Parameters
tagtag of shape (must be valid)

Implements ICmpObstructionManager.

void CCmpObstructionManager::RenderSubmit ( SceneCollector collector)
void CCmpObstructionManager::ResetSubdivisions ( entity_pos_t  x1,
entity_pos_t  z1 
)
inline
virtual void CCmpObstructionManager::Serialize ( ISerializer serialize)
inlinevirtual

Implements IComponent.

template<typename S >
void CCmpObstructionManager::SerializeCommon ( S &  serialize)
inline
virtual void CCmpObstructionManager::SetBounds ( entity_pos_t  x0,
entity_pos_t  z0,
entity_pos_t  x1,
entity_pos_t  z1 
)
inlinevirtual

Set the bounds of the world.

Any point outside the bounds is considered obstructed.

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

Implements ICmpObstructionManager.

virtual void CCmpObstructionManager::SetDebugOverlay ( bool  enabled)
inlinevirtual

Toggle the rendering of debug info.

Implements ICmpObstructionManager.

virtual void CCmpObstructionManager::SetPassabilityCircular ( bool  enabled)
inlinevirtual

Set the passability to be restricted to a circular map.

Implements ICmpObstructionManager.

virtual void CCmpObstructionManager::SetStaticControlGroup ( tag_t  tag,
entity_id_t  group,
entity_id_t  group2 
)
inlinevirtual

Sets the control group of a static shape.

Parameters
tagTag of the shape to set the control group for. Must be a valid and static shape tag.
groupControl group entity ID.

Implements ICmpObstructionManager.

virtual void CCmpObstructionManager::SetUnitControlGroup ( tag_t  tag,
entity_id_t  group 
)
inlinevirtual

Set the control group of a unit shape.

Parameters
tagtag of shape (must be valid and a unit shape)
groupcontrol group entity ID

Implements ICmpObstructionManager.

virtual void CCmpObstructionManager::SetUnitMovingFlag ( tag_t  tag,
bool  moving 
)
inlinevirtual

Set whether a unit shape is moving or stationary.

Parameters
tagtag of shape (must be valid and a unit shape)
movingwhether the unit is currently moving through the world or is stationary

Implements ICmpObstructionManager.

bool CCmpObstructionManager::TestLine ( const IObstructionTestFilter filter,
entity_pos_t  x0,
entity_pos_t  z0,
entity_pos_t  x1,
entity_pos_t  z1,
entity_pos_t  r,
bool  relaxClearanceForUnits = false 
) const
virtual

Collision test a flat-ended thick line against the current set of shapes.

The line caps extend by r beyond the end points. Only intersections going from outside to inside a shape are counted.

Parameters
filterfilter to restrict the shapes that are counted
x0X coordinate of line's first point
z0Z coordinate of line's first point
x1X coordinate of line's second point
z1Z coordinate of line's second point
rradius (half width) of line
relaxClearanceForUnitswhether unit-unit collisions should be more permissive.
Returns
true if there is a collision

Implements ICmpObstructionManager.

bool CCmpObstructionManager::TestStaticShape ( const IObstructionTestFilter filter,
entity_pos_t  x,
entity_pos_t  z,
entity_pos_t  a,
entity_pos_t  w,
entity_pos_t  h,
std::vector< entity_id_t > *  out 
) const
virtual

Collision test a static square shape against the current set of shapes.

Parameters
filterfilter to restrict the shapes that are being tested against
xX coordinate of center
zZ coordinate of center
aangle of rotation (clockwise from +Z direction)
wwidth (size along X axis)
hheight (size along Z axis)
outif non-NULL, all colliding shapes' entities will be added to this list
Returns
true if there is a collision

Implements ICmpObstructionManager.

bool CCmpObstructionManager::TestUnitShape ( const IObstructionTestFilter filter,
entity_pos_t  x,
entity_pos_t  z,
entity_pos_t  clearance,
std::vector< entity_id_t > *  out 
) const
virtual

Collision test a unit shape against the current set of registered shapes, and optionally writes a list of the colliding shapes' entities to an output list.

Parameters
filterfilter to restrict the shapes that are being tested against
xX coordinate of shape's center
zZ coordinate of shape's center
clearanceclearance of the shape's unit
outif non-NULL, all colliding shapes' entities will be added to this list
Returns
true if there is a collision

Implements ICmpObstructionManager.

virtual void CCmpObstructionManager::UpdateInformations ( GridUpdateInformation informations)
inlinevirtual

Gets dirtiness information and resets it afterwards.

Then it's the role of CCmpPathfinder to pass the information to other components if needed. (AIs, etc.) The return value is false if an update is unnecessary.

Implements ICmpObstructionManager.

Member Data Documentation

bool CCmpObstructionManager::m_DebugOverlayDirty
bool CCmpObstructionManager::m_DebugOverlayEnabled
std::vector<SOverlayLine> CCmpObstructionManager::m_DebugOverlayLines
std::vector<u32> CCmpObstructionManager::m_DirtyStaticShapes
private
std::vector<u32> CCmpObstructionManager::m_DirtyUnitShapes
private
entity_pos_t CCmpObstructionManager::m_MaxClearance
bool CCmpObstructionManager::m_PassabilityCircular
u32 CCmpObstructionManager::m_StaticShapeNext
std::map<u32, StaticShape> CCmpObstructionManager::m_StaticShapes
SpatialSubdivision CCmpObstructionManager::m_StaticSubdivision
u16 CCmpObstructionManager::m_TerrainTiles
u32 CCmpObstructionManager::m_UnitShapeNext
std::map<u32, UnitShape> CCmpObstructionManager::m_UnitShapes
SpatialSubdivision CCmpObstructionManager::m_UnitSubdivision
GridUpdateInformation CCmpObstructionManager::m_UpdateInformations
private
entity_pos_t CCmpObstructionManager::m_WorldX0
entity_pos_t CCmpObstructionManager::m_WorldX1
entity_pos_t CCmpObstructionManager::m_WorldZ0
entity_pos_t CCmpObstructionManager::m_WorldZ1

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