public TrailblazerPather_TwinAStar(PathfindData pathfindData) : base(pathfindData)
        {
            rraOpenSet   = new Priority_Queue.FastPriorityQueue <CellRefNode>(map.Area);
            rraClosedSet = new Dictionary <CellRef, int>();

            cellRefNodeCache = new Dictionary <CellRef, CellRefNode>();

            var cellPassRules = ThatApply <CellPassabilityRule>(
                new CellPassabilityRule_PathGrid(pathfindData),
                new CellPassabilityRule_DoorByPawn(pathfindData),
                new CellPassabilityRule_NoPassDoors(pathfindData)
                );

            var passRules = Enumerable.Empty <PassabilityRule>();

            var cellCostRules = ThatApply <CellCostRule>(
                new CellCostRule_PathGrid(pathfindData),
                new CellCostRule_Walls(pathfindData)
                );

            var costRules = ThatApply <CostRule>(new CostRule_MoveTicks(pathfindData));

            rraPathfinderGrid = new PathfinderGrid(cellCostRules, costRules, cellPassRules, passRules);

            // Initialize the RRA* algorithm
            foreach (IntVec3 cell in pathfindData.DestRect)
            {
                CellRef cellRef = pathfindData.map.GetCellRef(cell);
                rraClosedSet[cellRef] = 0;
                rraOpenSet.Enqueue(GetNode(cellRef), 0);
            }
        }
        protected TrailblazerPather(PathfindData pathfindData)
        {
            this.pathfindData = pathfindData;
            var cellPassRules = ThatApply(CellPassabilityRules(pathfindData));
            var passRules     = ThatApply(PassabilityRules(pathfindData));
            var cellCostRules = ThatApply(CellCostRules(pathfindData));
            var costRules     = ThatApply(CostRules(pathfindData));

            pathfinderGrid = new PathfinderGrid(cellCostRules, costRules, cellPassRules, passRules);
        }