示例#1
0
    /// <summary>
    /// Check the adj node that walkable
    /// </summary>
    /// <param name="adjNodePos"> adj node to check </param>
    /// <param name="faceDir"> self node walkable face </param>
    /// <returns> adj node that walkable </returns>
    private List <AdjNodeInfo> CastAdjRay(WalkableAxis adjNodePos, WalkableAxis walkableFace)
    {
        Vector3 nodeCentre = transform.position;

        switch (adjNodePos)
        {
        case WalkableAxis.Up: nodeCentre += transform.up; break;

        case WalkableAxis.Down: nodeCentre -= transform.up; break;

        case WalkableAxis.Right: nodeCentre += transform.right; break;

        case WalkableAxis.Left: nodeCentre -= transform.right; break;

        case WalkableAxis.Forward: nodeCentre += transform.forward; break;

        case WalkableAxis.Back: nodeCentre -= transform.forward; break;
        }

        // get all walkable node
        Ray ray = new Ray();

        ray.direction = new Vector3(1, -1, 1);
        ray.origin    = nodeCentre - ray.direction * 100;
        List <Node> originNodes = new List <Node>();

        foreach (var hitInfo in Physics.RaycastAll(ray, 300))
        {
            Node nodeCompn = hitInfo.collider.GetComponent <Node>();
            if (nodeCompn == null)
            {
                continue;
            }
            if (HasFlag((int)nodeCompn.m_walkableAxis, (int)walkableFace) &&
                nodeCompn.ScreenSpacePosition == WorldToScreen(nodeCentre))
            {
                originNodes.Add(nodeCompn);
            }
        }

        // Get legal node
        List <AdjNodeInfo> result = new List <AdjNodeInfo>();

        // origin.y+ walkable
        if (walkableFace == WalkableAxis.Up)
        {
            foreach (var node in originNodes)
            {
                ConnecPoint adjConnec = CheckUpWalkable(node, adjNodePos);
                if (adjConnec != 0)
                {
                    result.Add(new AdjNodeInfo(adjConnec, WalkableAxis.Up, node));
                }
            }
            return(result);
        }

        return(result);
    }
示例#2
0
    /// <summary>
    /// Get a node's adjpoint in world space
    /// </summary>
    /// <param name="node"></param>
    /// <param name="adjType"></param>
    /// <returns></returns>
    public static Vector3 GetAdjPointPosInWorld(Node node, ConnecPoint adjType)
    {
        if (adjType == ConnecPoint.Upper_X)
        {
            return(node.UpperX);
        }
        if (adjType == ConnecPoint.Upper_Z)
        {
            return(node.UpperZ);
        }
        if (adjType == ConnecPoint.Upper_NX)
        {
            return(node.UpperNX);
        }
        if (adjType == ConnecPoint.Upper_NZ)
        {
            return(node.UpperNZ);
        }
        if (adjType == ConnecPoint.Middle_NXNZ)
        {
            return(node.MiddleNXNZ);
        }
        if (adjType == ConnecPoint.Middle_NXZ)
        {
            return(node.MiddleNXZ);
        }
        if (adjType == ConnecPoint.Middle_XNZ)
        {
            return(node.MiddleXNZ);
        }
        if (adjType == ConnecPoint.Middle_XZ)
        {
            return(node.MiddleXZ);
        }
        if (adjType == ConnecPoint.Down_X)
        {
            return(node.DownX);
        }
        if (adjType == ConnecPoint.Down_Z)
        {
            return(node.DownZ);
        }
        if (adjType == ConnecPoint.Down_NX)
        {
            return(node.DownNX);
        }
        if (adjType == ConnecPoint.Down_NZ)
        {
            return(node.DownNZ);
        }

        return(Vector3.zero);
    }
示例#3
0
    // Set m_adjPoint
    private void SetAdj(ConnecPoint connecType, List <AdjNodeInfo> adjNodes)
    {
        // Delete adjPoint
        if (adjNodes == null || adjNodes.Count == 0)
        {
            m_adjPoints &= ~connecType;
            m_adjNodes[connecType].Clear();
            return;
        }

        m_adjPoints |= connecType;  // Add adjPoint
        foreach (AdjNodeInfo adjNodeToAdd in adjNodes)
        {
            if (!m_adjNodes[connecType].Contains(adjNodeToAdd))
            {
                m_adjNodes[connecType].Add(adjNodeToAdd);
            }
        }
    }
示例#4
0
 public AdjNodeInfo(ConnecPoint adjConnecPoint, WalkableAxis adjWalkAxis, Node adjNode)
 {
     m_adjNodeConnecPoint = adjConnecPoint;
     m_adjWalkAxis        = adjWalkAxis;
     m_adjNode            = adjNode;
 }
示例#5
0
 public Transform GetTransByConnectPoint(ConnecPoint connec)
 {
     return(_childTransform[connec.ToString()]);
 }