1.0
11 Dec 2017 03:33
/*
 * Check whether any pixel on a line between two positions is masked
 *
 * Returns true if masked pixel is found, false if not.
 */
bool maskedLine(int x0, int y0, int x1, int y1, int layer = 4) {
  int x2;
  int y2;
  
  //straight lines
  if(x0 == x1 || y0 == y1) {
    if(y0 == y1) {
      if(x0 > x1) {
        x2 = x1; x1 = x0; x0 = x2; //swap
      }
      for(int x = x0; x < x1; x += 1) {
        if(jjLayers[layer].maskedPixel(x, y0)) {
          return true;
        }
      }
      return false;
    }
    if (y0 > y1) {
      y2 = y1; y1 = y0; y0 = y2; //swap
    }
    
    for(int y = y0; y < y1; y += 1) {
      if(jjLayers[layer].maskedPixel(x0, y)) {
        return true;
      }
    }
    return true;
  }
  
  
  //sloped lines
  bool steep = (abs(y1 - y0) > abs(x1 - x0));
  if (steep) {
    x2 = x0; x0 = y0; y0 = x2; //swap
    y2 = x1; x1 = y1; y1 = y2; //swap
  }
  if (x0 > x1) {
    x2 = x1; x1 = x0; x0 = x2; //swap
    y2 = y1; y1 = y0; y0 = y2; //swap
  }
  float dx = x1 - x0;
  float dy = abs(y1 - y0);
  float error = dx / 2.0f;
  int ystep = (y0 < y1) ? 1 : -1;
  int y = int(y0);
  int max_x = int(x1);
  for(int x = int(x0); x < max_x; x += 1) {
    if (steep) {
      if(jjLayers[layer].maskedPixel(y, x)) {
        return true;
      }
    } else {
      if(jjLayers[layer].maskedPixel(x, y)) {
        return true;
      }
    }
    error -= dy;
    if (error < 0) {
      y += ystep;
      error += dx;
    }
  }
  return false;
}
        Jazz2Online © 1999-INFINITY (Site Credits). We have a Privacy Policy. Jazz Jackrabbit, Jazz Jackrabbit 2, Jazz Jackrabbit Advance and all related trademarks and media are ™ and © Epic Games. Lori Jackrabbit is © Dean Dodrill. J2O development powered by Loops of Fury and Chemical Beats.
Eat your lima beans, Johnny.