예제 #1
0
        private static void SetPathfinderDelegates(NewPathFinder pf, PathDataLog pathData)
        {
            if (pathData.tpMoveCardinal >= 0)
            {
                NewPathFinder.GetPawnPathCostSettings = (p) => new NewPathFinder.PawnPathCostSettings
                {
                    moveTicksCardinal = pathData.tpMoveCardinal,
                    moveTicksDiagonal = pathData.tpMoveDiagonal,
                    area      = pathData.allowedArea,
                    avoidGrid = pathData.avoidGrid
                };
            }

            NewPathFinder.GetPathCostForBuilding = (building, parms) =>
            {
                if (building is Building_DoorIndex)
                {
                    var fakeEdificeVal = pathData.fakeEdificeGrid[((Building_DoorIndex)building).edificeIndex];
                    switch (fakeEdificeVal)
                    {
                    case PathDataLog.Edifice_Impassible:                             //shouldn't happen, but might as well check
                    case PathDataLog.Edifice_NonTraversableDoor:
                        return(-1);

                    default:
                        return(fakeEdificeVal);
                    }
                }
                if (building is Building_KnownArmedTrap)
                {
                    return(800);
                }
                throw new Exception("Unknown Building");
            };
        }
예제 #2
0
        static void Main()
        {
            InitGameData();
            Console.WriteLine("-----");
            var sw = new Stopwatch();

            foreach (var file in Directory.GetFiles(pathDirectory, "*.xml"))
            //var file = Path.Combine(pathDirectory, "Darcie - 1215368.xml");
            {
                GC.Collect();
                Console.WriteLine(Path.GetFileNameWithoutExtension(file));

                var pathData = PathDataLog.LoadFromFile(file);

                var pf   = new NewPathFinder(MapBuilder.MapFromPathData(pathData));
                var dest = new LocalTargetInfo(pathData.dest.CenterCell);
                var tp   = new TraverseParms()
                {
                    canBash = pathData.tpCanBash, maxDanger = pathData.tpMaxDanger, mode = pathData.tpMode
                };

                SetPathfinderDelegates(pf, pathData);

                sw.Start();
                //for (int i = 0; i < 4; i++)
                {
                    var path = pf.FindPath(pathData.start, dest, tp, pathData.peMode);
                    path.Dispose();
                }
                sw.Stop();
                Console.WriteLine();
            }
            //Console.WriteLine($"pathmax: {true}, weight: {true}, pops: {pf.debug_openCellsPopped}, pathcost: {path.TotalCost}, elapsed: {sw.ElapsedTicks}");
            Console.WriteLine($"\nAll Done!\nElapsed pathfinding time: {sw.ElapsedMilliseconds}ms");
            Console.Read();
        }