You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
7.8 KiB

/**
* The control panel.
*/
var Panel = {
init: function() {
var $algo = $('#algorithm_panel');
$('.panel').draggable();
$('.accordion').accordion({
collapsible: false,
});
$('.option_label').click(function() {
$(this).prev().click();
});
$('#hide_instructions').click(function() {
$('#instructions_panel').slideUp();
});
$('#play_panel').css({
top: $algo.offset().top + $algo.outerHeight() + 20
});
$('#button2').attr('disabled', 'disabled');
},
/**
* Get the user selected path-finder.
* TODO: clean up this messy code.
*/
getFinder: function() {
var finder, selected_header, heuristic, allowDiagonal, biDirectional, dontCrossCorners, weight, trackRecursion, timeLimit;
selected_header = $(
'#algorithm_panel ' +
'.ui-accordion-header[aria-selected=true]'
).attr('id');
switch (selected_header) {
case 'astar_header':
allowDiagonal = typeof $('#astar_section ' +
'.allow_diagonal:checked').val() !== 'undefined';
biDirectional = typeof $('#astar_section ' +
'.bi-directional:checked').val() !=='undefined';
dontCrossCorners = typeof $('#astar_section ' +
'.dont_cross_corners:checked').val() !=='undefined';
/* parseInt returns NaN (which is falsy) if the string can't be parsed */
weight = parseInt($('#astar_section .spinner').val()) || 1;
weight = weight >= 1 ? weight : 1; /* if negative or 0, use 1 */
heuristic = $('input[name=astar_heuristic]:checked').val();
if (biDirectional) {
finder = new PF.BiAStarFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners,
heuristic: PF.Heuristic[heuristic],
weight: weight
});
} else {
finder = new PF.AStarFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners,
heuristic: PF.Heuristic[heuristic],
weight: weight
});
}
break;
case 'breadthfirst_header':
allowDiagonal = typeof $('#breadthfirst_section ' +
'.allow_diagonal:checked').val() !== 'undefined';
biDirectional = typeof $('#breadthfirst_section ' +
'.bi-directional:checked').val() !== 'undefined';
dontCrossCorners = typeof $('#breadthfirst_section ' +
'.dont_cross_corners:checked').val() !=='undefined';
if (biDirectional) {
finder = new PF.BiBreadthFirstFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners
});
} else {
finder = new PF.BreadthFirstFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners
});
}
break;
case 'bestfirst_header':
allowDiagonal = typeof $('#bestfirst_section ' +
'.allow_diagonal:checked').val() !== 'undefined';
biDirectional = typeof $('#bestfirst_section ' +
'.bi-directional:checked').val() !== 'undefined';
dontCrossCorners = typeof $('#bestfirst_section ' +
'.dont_cross_corners:checked').val() !=='undefined';
heuristic = $('input[name=bestfirst_heuristic]:checked').val();
if (biDirectional) {
finder = new PF.BiBestFirstFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners,
heuristic: PF.Heuristic[heuristic]
});
} else {
finder = new PF.BestFirstFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners,
heuristic: PF.Heuristic[heuristic]
});
}
break;
case 'dijkstra_header':
allowDiagonal = typeof $('#dijkstra_section ' +
'.allow_diagonal:checked').val() !== 'undefined';
biDirectional = typeof $('#dijkstra_section ' +
'.bi-directional:checked').val() !=='undefined';
dontCrossCorners = typeof $('#dijkstra_section ' +
'.dont_cross_corners:checked').val() !=='undefined';
if (biDirectional) {
finder = new PF.BiDijkstraFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners
});
} else {
finder = new PF.DijkstraFinder({
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners
});
}
break;
case 'jump_point_header':
trackRecursion = typeof $('#jump_point_section ' +
'.track_recursion:checked').val() !== 'undefined';
heuristic = $('input[name=jump_point_heuristic]:checked').val();
finder = new PF.JumpPointFinder({
trackJumpRecursion: trackRecursion,
heuristic: PF.Heuristic[heuristic],
diagonalMovement: PF.DiagonalMovement.IfAtMostOneObstacle
});
break;
case 'orth_jump_point_header':
trackRecursion = typeof $('#orth_jump_point_section ' +
'.track_recursion:checked').val() !== 'undefined';
heuristic = $('input[name=orth_jump_point_heuristic]:checked').val();
finder = new PF.JumpPointFinder({
trackJumpRecursion: trackRecursion,
heuristic: PF.Heuristic[heuristic],
diagonalMovement: PF.DiagonalMovement.Never
});
break;
case 'ida_header':
allowDiagonal = typeof $('#ida_section ' +
'.allow_diagonal:checked').val() !== 'undefined';
dontCrossCorners = typeof $('#ida_section ' +
'.dont_cross_corners:checked').val() !=='undefined';
trackRecursion = typeof $('#ida_section ' +
'.track_recursion:checked').val() !== 'undefined';
heuristic = $('input[name=jump_point_heuristic]:checked').val();
weight = parseInt($('#ida_section input[name=astar_weight]').val()) || 1;
weight = weight >= 1 ? weight : 1; /* if negative or 0, use 1 */
timeLimit = parseInt($('#ida_section input[name=time_limit]').val());
// Any non-negative integer, indicates "forever".
timeLimit = (timeLimit <= 0 || isNaN(timeLimit)) ? -1 : timeLimit;
finder = new PF.IDAStarFinder({
timeLimit: timeLimit,
trackRecursion: trackRecursion,
allowDiagonal: allowDiagonal,
dontCrossCorners: dontCrossCorners,
heuristic: PF.Heuristic[heuristic],
weight: weight
});
break;
}
return finder;
}
};