Exemplo n.º 1
0
        PathPoint[] GatherPathVerticies(uint pathID)
        {
            List <PathPoint> path = new List <PathPoint>();

            PathUnit[]   paths    = Singleton <PathManager> .instance.m_pathUnits.m_buffer;
            NetSegment[] segments = netMan.m_segments.m_buffer;
            NetNode[]    nodes    = netMan.m_nodes.m_buffer;

            //Log.debug("Gathering path...");

            uint segment = paths[pathID].GetPosition(0).m_segment;
            uint startNode, endNode;

            startNode = segments[segment].m_startNode;
            //verts.Add(lastPoint);
            while (true)
            {
                for (int i = 0; i < paths[pathID].m_positionCount; i++)
                {
                    PathUnit.Position p = paths[pathID].GetPosition(i);



                    if (p.m_segment != 0)
                    {
                        /*    segment = p.m_segment;
                         *                          startNode = segments[segment].m_startNode;
                         *  endNode = segments[segment].m_endNode;
                         *
                         *  Vector3 startPos = nodes[startNode].m_position;// +(Vector3.Cross(Vector3.up, segment.m_startDirection) * 5.0f);
                         *  Vector3 endPos = nodes[endNode].m_position;// +(Vector3.Cross(Vector3.up, segment.m_endDirection) * -5.0f);
                         *
                         *                          Vector3 pv = Vector3.Lerp(startPos,endPos,(float)p.m_offset / 255.0f);
                         */

                        Vector3 pv = PathManager.CalculatePosition(p);

                        PathPoint newPoint;
                        newPoint.x         = pv.x;
                        newPoint.y         = pv.y;
                        newPoint.z         = pv.z;
                        newPoint.segmentID = p.m_segment;

                        path.Add(newPoint);

                        // verts.Add(endPos);
                        //List<Vector3> segmentVerts = new List<Vector3>();

                        //verts.Add(startNode.m_position);

                        /*
                         * if (!NetSegment.IsStraight(startNode.m_position, segment.m_startDirection, endNode.m_position, segment.m_endDirection))
                         * {
                         *  Vector3 mp1, mp2;
                         *  NetSegment.CalculateMiddlePoints(
                         *          startNode.m_position, segment.m_startDirection,
                         *          endNode.m_position, segment.m_endDirection,
                         *          true, true, out mp1, out mp2);
                         *  verts.Add(mp1);
                         *  verts.Add(mp2);
                         * }*/
                        //verts.Add(endNode.m_position);
                    }
                }

                if (paths[pathID].m_nextPathUnit == 0)
                {
                    //Log.debug("Done");
                    return(path.ToArray());
                }

                pathID = paths[pathID].m_nextPathUnit;
            }
        }