예제 #1
0
        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));
        }
예제 #2
0
        public NodeAIRoute(AISegmentNodeConnection con, SegmentAIRoute target, NodeAIPath[] paths)
        {
            this.con    = con;
            this.target = target;
            Paths       = paths;

            con2 = target.GetStart();
        }
예제 #3
0
        private IEnumerable <SegmentAIRoute> GetRoutes(AISegmentNodeConnection con, bool incoming)
        {
            var isEnd = con.Segment.End == con;



            return(GetRoutes(isEnd ^ incoming, con.Segment));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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());
        }
예제 #6
0
 private IEnumerable <NodeAIRoute> GetRoutes(AISegmentNodeConnection segmentNodeConnection) => segmentNodeConnection.AIRoutes;