A bot used for https://code-your-snake.codingmaster398.repl.co/
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
185 lines
7.8 KiB
2 years ago
|
/**
|
||
|
* 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;
|
||
|
}
|
||
|
};
|