Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private function line(xstart: Float, ystart: Float, xend: Float, yend: Float, sprite: Sprite): Void {
- var x0 = Math.round(xstart);
- var y0 = Math.round(ystart);
- var x1 = Math.round(xend);
- var y1 = Math.round(yend);
- sprite.x = x0;
- sprite.y = y0;
- var dx = Math.abs(x1 - x0);
- var dy = Math.abs(y1 - y0);
- var sx : Int;
- var sy : Int;
- if (x0 < x1) sx = 1; else sx = -1;
- if (y0 < y1) sy = 1; else sy = -1;
- var err = dx - dy;
- while (true) {
- //setPixel(x0,y0)
- if (x0 == x1 && y0 == y1) {
- sprite.x = xend;
- sprite.y = yend;
- break;
- }
- var e2 = 2 * err;
- if (e2 > -dy) {
- err -= dy;
- x0 += sx;
- sprite.x = x0;
- if (map.collides(sprite)) {
- sprite.y -= 1;
- if (!map.collides(sprite)) {
- continue;
- }
- else {
- sprite.y -= 1;
- if (!map.collides(sprite)) {
- continue;
- }
- else {
- sprite.y -= 1;
- if (!map.collides(sprite)) {
- continue;
- }
- sprite.y += 1;
- }
- sprite.y += 1;
- }
- sprite.y += 1;
- sprite.x -= sx;
- if (sx < 0) sprite.hitFrom(Direction.RIGHT);
- else sprite.hitFrom(Direction.LEFT);
- while (true) {
- if (y0 == y1) {
- sprite.y = yend;
- return;
- }
- y0 += sy;
- sprite.y = y0;
- if (map.collides(sprite)) {
- sprite.y -= sy;
- if (sy < 0) sprite.hitFrom(Direction.DOWN);
- else sprite.hitFrom(Direction.UP);
- return;
- }
- }
- return;
- }
- }
- if (e2 < dx) {
- err += dx;
- y0 += sy;
- sprite.y = y0;
- if (map.collides(sprite)) {
- sprite.y -= sy;
- if (sy < 0) sprite.hitFrom(Direction.DOWN);
- else sprite.hitFrom(Direction.UP);
- while (true) {
- if (x0 == x1) {
- sprite.x = xend;
- return;
- }
- x0 += sx;
- sprite.x = x0;
- if (map.collides(sprite)) {
- sprite.y -= 1;
- if (!map.collides(sprite)) {
- continue;
- }
- else {
- sprite.y -= 1;
- if (!map.collides(sprite)) {
- continue;
- }
- else {
- sprite.y -= 1;
- if (!map.collides(sprite)) {
- continue;
- }
- sprite.y += 1;
- }
- sprite.y += 1;
- }
- sprite.y += 1;
- sprite.x -= sx;
- if (sx < 0) sprite.hitFrom(Direction.RIGHT);
- else sprite.hitFrom(Direction.LEFT);
- return;
- }
- }
- return;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement