/******************************************************************************* * Rhythos Editor is a game editor and project management tool for making RPGs on top of the Rhythos Game system. * * Copyright (C) 2013 David Maletz * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package mrpg.display; public class LineRasterizer { private int x, y, d, incXL, incXH, incYL, incYH, incDL, incDH, i, maxi; public LineRasterizer(int x1, int y1, int x2, int y2, int _dx, int _dy){ x = x1; y = y1; int dx = (x2-x1)/_dx, dy = (y2-y1)/_dy; if(dx >= 0) incXL = incXH = _dx; else {dx = -dx; incXL = incXH = -_dx;} if(dy >= 0) incYL = incYH = _dy; else {dy = -dy; incYL = incYH = -_dy;} int longD, shortD; if(dx >= dy){longD = dx; shortD = dy; incYL = 0;} else {longD = dy; shortD = dx; incXL = 0;} d = 2*shortD-longD; incDL = 2*shortD; incDH = incDL-2*longD; i = 0; maxi = longD; } public int getX(){return x;} public int getY(){return y;} public boolean hasNext(){return i <= maxi;} public void next(){ if(d >= 0){x += incXH; y += incYH; d += incDH;} else {x += incXL; y += incYL; d += incDL;} i++; } }