Collision Info
Player Collision
The state of a player’s collision is represented by an AdvCollisionInfo instance. This object at a base level is constructed of the following parts:
- Whether the player is in wind or not - accessed via the
IsInWind()property, which checks if wind is enabled and if the player isn’t colliding with aNoWindBlock - A
SlopeTypeproperty, indicating the type of slope the player is colliding with.SlopeType.Noneby default. - A
SlopeNormalproperty, indicating the normal vector of the slope the player is colliding with.Vector2.Zeroby default. - A collection of blocks that the player is colliding with. A specific block type can be checked using the
IsCollidingWith<T>()function (eg,IsCollidingWith<SandBlock>()). A list of all collided blocks can be accessed via theGetCollidedBlocks()and theGetCollidedBlocks<T>()functions (eg.GetCollidedBlocks<SandBlock>())
There are a number of helper functions to allow easy checking of base block types, such as the Snow, Sand, or Water properties.
A collision info object can be accessed a number of ways, but the most easily achieved is the CheckCollision or GetCollisionInfo functions of the ICollisionQuery interface. This can be obtained through the LevelManager.Instance singleton.
// Get the info about the current collision
ICollisionQuery collisionQuery = LevelManager.Instance;
AdvCollisionInfo collision = collisionQuery.GetCollisionInfo(bodyComp.GetHitbox());
// or alternatively check if there's a collision then respond to the info
if (collisionQuery.CheckCollision(bodyComp.GetHitbox(), out Rectangle overlap, out AdvCollisionInfo info))
{
// Do something
}