Ejemplo n.º 1
0
        static void TestMCP_MGC(string mapName)
        {
            if (InterrootLoader.Type != InterrootLoader.InterrootType.InterrootDS1)
            {
                return;
            }

            //GFX.ModelDrawer.AddMap(mapName, false);

            var box = new DbgPrimWireBox(Transform.Default, Vector3.One, Color.Red);
            var mcp = DataFile.LoadFromFile <MCP>(InterrootLoader.GetInterrootPath($@"map\{mapName}\{mapName}.mcp"));
            int bi  = 0;

            foreach (var mcpBox in mcp.Boxes)
            {
                var min    = new Vector3(mcpBox.MinX, mcpBox.MinY, mcpBox.MinZ);
                var max    = new Vector3(mcpBox.MaxX, mcpBox.MaxY, mcpBox.MaxZ);
                var size   = max - min;
                var center = min + (size / 2f);
                DBG.AddPrimitive(box.Instantiate($"Box [{(bi++)}]", new Transform(center.X, center.Y, center.Z, 0, 0, 0, size.X, size.Y, size.Z)));
            }
            var            sphere      = new DbgPrimWireSphere(Transform.Default, 0.35f, 32, 32, Color.Cyan);
            var            mcg         = DataFile.LoadFromFile <MCG>(InterrootLoader.GetInterrootPath($@"map\{mapName}\{mapName}.mcg"));
            var            lines       = new DbgPrimWire();
            List <Vector3> startPoints = new List <Vector3>();
            List <Vector3> endPoints   = new List <Vector3>();

            for (int i = 0; i < mcg.Paths.Count; i++)
            {
                var pointsThatReferenceThisShit = mcg.Points.Where(x => x.NearbyPathIndices.Contains(i)).ToList();
                startPoints.Add(new Vector3(pointsThatReferenceThisShit[0].PosX, pointsThatReferenceThisShit[0].PosY, pointsThatReferenceThisShit[0].PosZ));
                endPoints.Add(new Vector3(pointsThatReferenceThisShit[1].PosX, pointsThatReferenceThisShit[1].PosY, pointsThatReferenceThisShit[1].PosZ));
            }
            void AddPath(int pathIndex, Color col) =>
            lines.AddLine(startPoints[pathIndex], endPoints[pathIndex], col);

            void AddPathString(int pathIndex, string str, Color col)
            {
                var position = (startPoints[pathIndex] + endPoints[pathIndex]) / 2.0f;

                lines.AddDbgLabel(position, 5f, str, col);
            }

            //for (int i = 0; i < mcg.Paths.Count; i++)
            //{
            //    AddPath(i, Color.Cyan);
            //    AddPathString(i, mcg.Paths[i].GetDebugReport(), Color.Cyan);

            //    //foreach (var edgeIndex in mcg.Edges[i].OtherEdgeIndicesA)
            //    //{
            //    //    AddEdge(edgeIndex, Color.Cyan);
            //    //}

            //    //foreach (var edgeIndex in mcg.Edges[i].OtherEdgeIndicesB)
            //    //{
            //    //    AddEdge(edgeIndex, Color.Yellow);
            //    //}

            //    //break;
            //}

            float getPathLength(int pathIndex)
            {
                var start = startPoints[pathIndex];
                var end   = endPoints[pathIndex];

                return((start - end).Length());
            }

            void addPointDbg(int pointIndex)
            {
                DBG.AddPrimitive(sphere.Instantiate($"Point [{pointIndex}]", new Transform(new Vector3(mcg.Points[pointIndex].PosX, mcg.Points[pointIndex].PosY, mcg.Points[pointIndex].PosZ), Vector3.Zero)));

                int pidx = 0;

                foreach (var adjPointIndex in mcg.Points[pointIndex].NearbyPointIndices)
                {
                    DBG.AddPrimitive(sphere.Instantiate($"INDEX IN POINT'S LIST:{pidx++}, Point Near [{adjPointIndex}]", new Transform(new Vector3(mcg.Points[adjPointIndex].PosX, mcg.Points[adjPointIndex].PosY, mcg.Points[adjPointIndex].PosZ), Vector3.Zero)));
                }

                pidx = 0;
                foreach (var path in mcg.Points[pointIndex].NearbyPathIndices)
                {
                    AddPath(path, Color.Cyan);
                    AddPathString(path, $"PATH INDEX IN POINT'S LIST:{pidx++}\n{mcg.Paths[path].GetDebugReport()}\nPATH LENGTH: {getPathLength(path)}", Color.Cyan);
                }
            }

            //addPointDbg(0);
            //addPointDbg(1);
            //addPointDbg(2);

            for (int i = 0; i < mcg.Points.Count; i++)
            {
                addPointDbg(i);
            }

            DBG.AddPrimitive(lines);

            Console.WriteLine("TEST");
        }