Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// @param _x1
- /// @param _y1
- /// @param _x2
- /// @param _y2
- /// @param grid
- /// @param dist = 0;
- /// return true/false
- var _x1 = argument[0], _y1 = argument[1], _x2 = argument[2], _y2 = argument[3], grid = argument[4];
- var dist = argument_count > 5 ? argument[5] : 0;;
- if (dist and dist < point_distance(_x1, _y1, _x2, _y2)) {
- var dir = point_direction(_x1, _y1, _x2, _y2);
- _x2 = _x1 + lengthdir_x(dist, dir);
- _y2 = _y1 + lengthdir_y(dist, dir);
- }
- var x1 = _x1 div GRID_CELL_WIDTH; // iso_from_normal_x(_x1, _y1);
- var y1 = _y1 div GRID_CELL_HEIGHT; // iso_from_normal_y(_x1, _y1);
- var x2 = _x2 div GRID_CELL_WIDTH; // iso_from_normal_x(_x2, _y2);
- var y2 = _y2 div GRID_CELL_HEIGHT; // iso_from_normal_y(_x2, _y2);
- // if (floor(x1) == floor(x2) or floor(y1) == floor(y2) or abs(floor(x1) - floor(x2)) == abs(floor(y1) - floor(y2))) {
- // return collision_line_grid_2(floor(x1), floor(y1), floor(x2), floor(y2), grid);
- // }
- if (grid[# floor(x1), floor(y1)] < 0) {
- return true;
- }
- if (grid[# floor(x2), floor(y2)] < 0) {
- return true;
- }
- var k = (y2 - y1) / (x2 - x1);
- var b = y1 - k * x1;
- var xs = min(x1, x2);
- var xe = max(x1, x2);
- for (var xx = ceil(xs); xx <= floor(xe); xx++) {
- if (grid[# floor(xx) - (y2 < y1), floor(k * xx + b)] < 0) {
- return true;
- }
- }
- var ys = min(y1, y2);
- var ye = max(y1, y2);
- for (var yy = ceil(ys); yy <= floor(ye); yy++) {
- if (grid[# floor((yy - b) / k), floor(yy) - (x2 < x1)] < 0) {
- return true;
- }
- }
- return false;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement