Example #1
0
        private MoveTask CreateBypassMoveTask(IActor actor, ILogicStrategyData strategyData)
        {
            IEnumerable <IGraphNode> availableNodes;
            var frontNodes = WriteObservedNodes(actor, strategyData).ToArray();

            if (frontNodes.Any())
            {
                availableNodes = frontNodes;
            }
            else
            {
                availableNodes = strategyData.ObserverdNodes;
            }

            var availableNodesArray = availableNodes as HexNode[] ?? availableNodes.ToArray();

            for (var i = 0; i < 3; i++)
            {
                var targetNode = DecisionSource.SelectTargetRoamingNode(availableNodesArray);

                if (Map.IsPositionAvailableFor(targetNode, actor))
                {
                    var moveTask = new MoveTask(actor, targetNode, Map);

                    return(moveTask);
                }
            }

            return(null);
        }
Example #2
0
        private MoveTask CreateBypassMoveTask(IActor actor, ILogicStrategyData strategyData, ISector sector)
        {
            var map = sector.Map;

            var frontNodes = WriteObservedNodesOrGetFromFow(actor, strategyData, sector).ToArray();

            if (!frontNodes.Any())
            {
                return(null);
            }

            var availableNodesArray = frontNodes as HexNode[] ?? frontNodes.ToArray();

            if (availableNodesArray.Length == 0)
            {
                // There is no nodes available to roaming.
                // We can do nothing.
                return(null);
            }

            for (var i = 0; i < 3; i++)
            {
                var targetNode = DecisionSource.SelectTargetRoamingNode(availableNodesArray);

                if (map.IsPositionAvailableFor(targetNode, actor))
                {
                    var context  = new ActorTaskContext(sector);
                    var moveTask = new MoveTask(actor, context, targetNode, map);

                    return(moveTask);
                }
            }

            return(null);
        }
        private MoveTask CreateBypassMoveTask(IActor actor)
        {
            var availableNodes = Map.Nodes.Where(x => Map.DistanceBetween(x, actor.Node) < 5);

            var availableNodesArray = availableNodes as HexNode[] ?? availableNodes.ToArray();

            for (var i = 0; i < 3; i++)
            {
                var targetNode = DecisionSource.SelectTargetRoamingNode(availableNodesArray);

                if (Map.IsPositionAvailableFor(targetNode, actor))
                {
                    var moveTask = new MoveTask(actor, targetNode, Map);

                    return(moveTask);
                }
            }

            return(null);
        }