Exemplo n.º 1
0
    private Node CompareSourceNodes(Node currentNode, Node currentSource, Node comparisonSource)
    {
        Node betterSource = currentSource;

        //If it's not reachable from comparison node, skip.
        if (isReachableFromNode(currentNode.OwnedHex, comparisonSource))
        {
            if (currentSource is HazardousNode)
            {
                //If current source is hazardous, and other source isn't...
                if (!(comparisonSource is HazardousNode))
                {
                    //...safer is better.
                    betterSource = comparisonSource;
                }
                else
                {
                    HazardousNode currentHazardousSource    = currentSource as HazardousNode;
                    HazardousNode comparisonHazardousSource = comparisonSource as HazardousNode;

                    if (comparisonHazardousSource.MoveToDamage < currentHazardousSource.MoveToDamage && comparisonSource.CumulativeCost < AP)
                    {
                        //...else, compare damage and pick safer.
                        betterSource = comparisonSource;
                    }
                    else if (comparisonHazardousSource.MoveToDamage == currentHazardousSource.MoveToDamage && comparisonSource.CumulativeCost < currentSource.CumulativeCost)
                    {
                        betterSource = comparisonSource;
                    }
                }
            }
            else if (currentNode is HazardousNode)
            {
                HazardousNode currentHazardousNode = currentNode as HazardousNode;

                if (!currentHazardousNode.isInnatelyHazardous)
                {
                    //If current node is hazardous because of source, see if other source is safer.
                    if (comparisonSource.OwnedHex.GetHeight() < currentSource.OwnedHex.GetHeight())
                    {
                        betterSource = comparisonSource;
                        ReplaceNode(currentNode, new NavigableNode(currentNode.OwnedHex, betterSource, betterSource.CumulativeCost + currentNode.OwnedHex.GetMovementCost()));
                    }
                }
            }
            else if (!(comparisonSource is HazardousNode))
            {
                if (!isHazardousHeight(currentNode.OwnedHex, comparisonSource))
                {
                    //If the comparison is cheaper and safe, use it...
                    if (comparisonSource.CumulativeCost < currentNode.Source.CumulativeCost)
                    {
                        betterSource = comparisonSource;
                    }
                }
            }
        }
        return(betterSource);
    }
Exemplo n.º 2
0
    public int GetDamageOfHex(Hex hex)
    {
        HazardousNode soughtNode = GetNodeForHex(hex) as HazardousNode;

        if (soughtNode != null)
        {
            return(soughtNode.MoveToDamage);
        }
        return(0);
    }
Exemplo n.º 3
0
    protected override Node GenerateNode(Node sourceNode, Hex generationHex)
    {
        Node NodeToReturn = null;

        int heightDifference = generationHex.GetHeight() - sourceNode.OwnedHex.GetHeight();

        if (isHazardousHeight(generationHex, sourceNode))
        {
            NodeToReturn = new HazardousNode(generationHex, sourceNode, sourceNode.CumulativeCost + generationHex.GetMovementCost(), -heightDifference);
        }
        else if (heightDifference < 0)
        {
            NodeToReturn = new NavigableNode(generationHex, sourceNode, sourceNode.CumulativeCost + generationHex.GetMovementCost());
        }
        else if (isReachableFromNode(generationHex, sourceNode))
        {
            NodeToReturn = new NavigableNode(generationHex, sourceNode, sourceNode.CumulativeCost + generationHex.GetMovementCost() + Mathf.Abs(heightDifference));
        }

        return(NodeToReturn);
    }