1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| double top1 = Math.round(this.tempy + (this.newCamera.camz - this.z * 9.0D) * this.scale1); double top2 = Math.round(this.tempy + (this.newCamera.camz - this.z * 9.0D) * this.scale2); double bottom1 = Math.round(this.tempy + (this.newCamera.camz - this.z * 9.0D) * this.scale3); double bottom2 = Math.round(this.tempy + (this.newCamera.camz - this.z * 9.0D) * this.scale4); if ( (point1 > view_width && point2 > view_width && point3 > view_width && point4 > view_width) || (top1 > view_height && top2 > view_height && bottom1 > view_height && bottom2 > view_height) || (top1 <= 0 && top2 <= 0 && bottom1 <= 0 && bottom2 <= 0) || (point1 <= 0 && point2 <= 0 && point3 <= 0 && point4 <= 0) ){ return; }
double length = point_distance(point1, top1, point2, top2); double dist1 = point_distance(point1, top1, point3, bottom1); double dist2 = point_distance(point2, top2, point4, bottom2); double direction1 = point_direction(point1, top1, point3, bottom1); double direction2 = point_direction(point2, top2, point4, bottom2); if (Math.abs(direction2 - direction1) > 180) { if (direction2 < direction1) { direction2 = 360; }else{ direction1 = 360; }
} double repeat = (int) Math.ceil(length / 3.5D); if (repeat <= 8) repeat = 8; if (repeat > 32) repeat = 32; int cellwidth = (int) Math.ceil( length/repeat ); Graphics2D g2d = (Graphics2D)g; double number = point2 - point1; double changex = number / repeat; double changey = (top2 - top1) / repeat; double changedir = (direction2 - direction1) / repeat; double changedist = (dist2 - dist1) / repeat; double cellwidthintex = sprite_height/repeat; for (int ii = 1; ii <= repeat+1; ii++) { int i = ii; if (x >= newCamera.getX()) { i = (int) (repeat + 2 - ii); } double dx = point1 + (changex * i); double dy = top1 + (changey * i); double rx = dx; double ry = dy; double dir = direction1 + (changedir * i);
draw_set_rotation(g2d, dir, rx, ry); double dist = dist1 + (changedist * i);
int sy1 = (int) (cellwidthintex * (i - 1)); int sx1 = 0; int sy2 = (int) (sy1 + cellwidthintex); int sx2 = this.sprite_width; g.drawImage(this.sprite_index, (int)dx, (int)dy, (int)dx + (int)dist, (int)dy + (int)cellwidth + 1, sx1, sy1, sx2, sy2, null);
draw_set_removerot(g2d, dir, rx, ry); } |