protected void GetRoute() { _routeCancelToken?.Cancel(); _routeCancelToken = new CancellationTokenSource(); Route.Clear(); int collisionMask; if (!Owner.TryGetComponent(out CollidableComponent collidableComponent)) { collisionMask = 0; } else { collisionMask = collidableComponent.CollisionMask; } var startGrid = _mapManager.GetGrid(Owner.Transform.GridID).GetTileRef(Owner.Transform.GridPosition); var endGrid = _mapManager.GetGrid(TargetGrid.GridID).GetTileRef(TargetGrid);; var access = AccessReader.FindAccessTags(Owner); RouteJob = _pathfinder.RequestPath(new PathfindingArgs( Owner.Uid, access, collisionMask, startGrid, endGrid, PathfindingProximity ), _routeCancelToken.Token); }
/// <summary> /// Get appropriate args for a particular entity /// </summary> /// <param name="entity"></param> /// <returns></returns> public static ReachableArgs GetArgs(IEntity entity) { var collisionMask = 0; if (entity.TryGetComponent(out IPhysicsComponent physics)) { collisionMask = physics.CollisionMask; } var access = AccessReader.FindAccessTags(entity); var visionRadius = entity.GetComponent <AiControllerComponent>().VisionRadius; return(new ReachableArgs(visionRadius, access, collisionMask)); }
public bool CanTraverse(IEntity entity, PathfindingNode node) { if (entity.TryGetComponent(out IPhysicsComponent physics) && (physics.CollisionMask & node.BlockedCollisionMask) != 0) { return(false); } var access = AccessReader.FindAccessTags(entity); foreach (var reader in node.AccessReaders) { if (!reader.IsAllowed(access)) { return(false); } } return(true); }