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.