Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// Raytrace2D(tilemap_id, x0, x1, y0, y1)
- /// @function Raytrace2D
- /// @description Traces a line through grid squares, and returns a list of those squares.
- /// @param {real} tilemap_id
- /// @param {real} x0
- /// @param {real} x1
- /// @param {real} y0
- /// @param {real} y1
- var tile_size = 32;
- var solid_ary = [];
- var tilemap = argument[0];
- var x0 = argument[1];
- var x1 = argument[2];
- var y0 = argument[3];
- var y1 = argument[4];
- var dx = abs(x1 - x0);
- var dy = abs(y1 - y0);
- var nx = floor(x0);
- var ny = floor(y0);
- var n = 1;
- var x_inc, y_inc;
- var error;
- if(x1 >= x0)
- {
- x_inc = 1;
- n += floor(x1) - nx;
- error = (floor(x0) + 1 - x0) * dy;
- }
- else
- {
- x_inc = -1;
- n += nx - floor(x1);
- error = (x0 - floor(x0)) * dy;
- }
- if(y1 > y0)
- {
- y_inc = 1;
- n += floor(y1) - ny;
- error -= (floor(y0) + 1 - y0) * dx;
- }
- else
- {
- y_inc = -1;
- n += ny - floor(y1);
- error -= (y0 - floor(y0)) * dx;
- }
- for(; n > 0; n--)
- {
- var tile_result = tilemap_get_at_pixel(tilemap, nx, ny);
- if(tile_result != 0 && tile_result != 4 && tile_result != 5)
- {
- var trace_result = [nx, ny, tile_result];
- return trace_result;
- }
- if(error > 0)
- {
- ny += y_inc;
- error -= dx;
- }
- else
- {
- nx += x_inc;
- error += dy;
- }
- }
- return undefined;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement