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);
        }
Example #2
0
        /// <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);
        }