private float getAngle(AISegmentNodeConnection from, AISegmentNodeConnection to) { var a2d = new Vector2(from.Tangent.x, from.Tangent.z); var b2d = -new Vector2(to.Tangent.x, to.Tangent.z); return(Mathf.Atan2(a2d.y, a2d.x) - Mathf.Atan2(b2d.y, b2d.x)); }
public NodeAIRoute(AISegmentNodeConnection con, SegmentAIRoute target, NodeAIPath[] paths) { this.con = con; this.target = target; Paths = paths; con2 = target.GetStart(); }
private IEnumerable <SegmentAIRoute> GetRoutes(AISegmentNodeConnection con, bool incoming) { var isEnd = con.Segment.End == con; return(GetRoutes(isEnd ^ incoming, con.Segment)); }
private ILoftPath createLineLoft(SegmentAIPath iPath, AISegmentNodeConnection from, SegmentAIPath oPath, AISegmentNodeConnection to) { var t1 = iPath.GetEndTransform(); var t2 = oPath.GetStartTransform(); var point1 = t1.MultiplyPoint3x4(Vector3.zero); var point2 = t2.MultiplyPoint3x4(Vector3.zero); var f1 = t1.MultiplyVector(Vector3.forward).normalized; var f2 = t2.MultiplyVector(Vector3.forward).normalized; // var l = (point2 - point1).magnitude; //return new LinearPath(point2, point2 + f2 * l); return(new BiArcLoftPath(point1, -f1, point2, -f2)); }
public NodeAIRoute[] CreateRoutes(AISegmentNodeConnection con) { var incomingRoutes = con.Segment.AIRoutes.Where(r => r.GetEnd()?.Node == con.Node).ToArray(); var allRoutes = con.Node.Segments.SelectMany(t => t.Segment.AIRoutes); var outgoingRoutes = allRoutes.Where(r => r.GetStart()?.Node == con.Node).ToArray(); var routes = new List <NodeAIRoute>(); foreach (var incoming in incomingRoutes) { foreach (var outgoing in outgoingRoutes) { var paths = create(incoming, outgoing); if (paths.Any()) { var node = new NodeAIRoute(con, outgoing, paths.ToArray()); routes.Add(node); } } } return(routes.ToArray()); }
private IEnumerable <NodeAIRoute> GetRoutes(AISegmentNodeConnection segmentNodeConnection) => segmentNodeConnection.AIRoutes;