# Collision

# Description

The Collision namespace provides collision detection functionality, used to determine collision relationships between skills, rays, and objects in the game.

# How to Use

// Check if there is a collision on the path from start to end
bool hasCollision = Collision::HasCollision(startPos, endPos);

// Get the first collision point on the path from start to end
Vector3 collisionPoint = Collision::GetFirstCollision(startPos, endPos);

// Set collision detection to ignore a specific unit
Collision::IgnoreUnit(myHero);

# HasCollision

bool HasCollision(Vector3 const& start, Vector3 const& end, CollisionFlags flags = CollisionFlags::All)

Checks if there are any collisions on the path from start to end.

Parameter Type Description
start Vector3 const& Path starting coordinate
end Vector3 const& Path ending coordinate
flags CollisionFlags Collision detection flags, defaults to detecting all types
Vector3 startPos = myHero.GetPosition();
Vector3 endPos = targetUnit.GetPosition();

// Check for collision with any object
bool hasAnyCollision = Collision::HasCollision(startPos, endPos);

// Only check for collision with minions
bool hasMinionsCollision = Collision::HasCollision(startPos, endPos, CollisionFlags::Minions);

// Check for collision with minions or heroes
bool hasCollision = Collision::HasCollision(startPos, endPos, CollisionFlags::Minions | CollisionFlags::Heroes);

# GetFirstCollision

Vector3 GetFirstCollision(Vector3 const& start, Vector3 const& end, CollisionFlags flags = CollisionFlags::All)

Gets the coordinate of the first collision point on the path from start to end.

Parameter Type Description
start Vector3 const& Path starting coordinate
end Vector3 const& Path ending coordinate
flags CollisionFlags Collision detection flags, defaults to detecting all types
Vector3 startPos = myHero.GetPosition();
Vector3 endPos = startPos + Vector3(1000.0f, 0, 0);

// Get the first collision point
Vector3 collisionPoint = Collision::GetFirstCollision(startPos, endPos);

// Only detect the first collision point with walls
Vector3 wallCollisionPoint = Collision::GetFirstCollision(startPos, endPos, CollisionFlags::Walls);

# IgnoreUnit

void IgnoreUnit(Unit* unit, bool ignore = true)

Sets whether to ignore a specific unit in collision detection.

Parameter Type Description
unit Unit* Pointer to the unit to be set
ignore bool Whether to ignore, true means ignore, false means don't ignore, defaults to true
// Ignore the collision of your own hero
Collision::IgnoreUnit(myHero);

// Resume detecting collision with your own hero
Collision::IgnoreUnit(myHero, false);

# GetCollisionUnits

std::vector<Unit*> GetCollisionUnits(Vector3 const& start, Vector3 const& end, float radius, CollisionFlags flags = CollisionFlags::All)

Gets all units that collide with the specified radius on the path from start to end.

Parameter Type Description
start Vector3 const& Path starting coordinate
end Vector3 const& Path ending coordinate
radius float Collision detection radius
flags CollisionFlags Collision detection flags, defaults to detecting all types
Vector3 startPos = myHero.GetPosition();
Vector3 endPos = targetPos;
float skillRadius = 100.0f;

// Get all units colliding on the skill path
std::vector<Unit*> collisionUnits = Collision::GetCollisionUnits(startPos, endPos, skillRadius);

// Only get units colliding with heroes
std::vector<Unit*> heroCollisions = Collision::GetCollisionUnits(startPos, endPos, skillRadius, CollisionFlags::Heroes);