/// <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); }
/// <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); }
// 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); } } }
public AdjNodeInfo(ConnecPoint adjConnecPoint, WalkableAxis adjWalkAxis, Node adjNode) { m_adjNodeConnecPoint = adjConnecPoint; m_adjWalkAxis = adjWalkAxis; m_adjNode = adjNode; }
public Transform GetTransByConnectPoint(ConnecPoint connec) { return(_childTransform[connec.ToString()]); }