package mods.custom_flags.client.gui.controls.canvus_tools;
import mods.custom_flags.utils.ImageData;
import net.minecraft.client.renderer.texture.DynamicTexture;
import net.minecraft.util.ResourceLocation;
/**
* Created by Aaron on 3/08/13.
*/
public class PenTool implements ITool {
private int last_x = ImageData.IMAGE_RES / 2;
private int last_y = ImageData.IMAGE_RES / 2;
@Override
public String getToolName() {
return "tool.pen";
}
@Override
public ResourceLocation getToolImage() {
return new ResourceLocation("custom_flags:textures/"+getToolName()+".png");
}
@Override
public void drawOverlay(int x, int y, int[] pixelsCurrent, DynamicTexture overlay, int rgb, boolean shift) {
int[] pixelsOverlay = overlay.func_110565_c();
for(int i = 0; i < pixelsOverlay.length; i++){
pixelsOverlay[i] = pixelsCurrent[i];
}
if(shift){
drawLine(x, last_x, y, last_y, pixelsOverlay, rgb);
}else{
if (x > -1 && x < ImageData.IMAGE_RES && y > -1 && y < ImageData.IMAGE_RES){
pixelsOverlay[x+ImageData.IMAGE_RES*y] = rgb;
}
}
overlay.func_110564_a();
}
@Override
public void draw(int x, int y, int[] pixelsCurrent, int rgb, boolean shift) {
if(shift){
drawLine(x, last_x, y, last_y, pixelsCurrent, rgb);
}else{
if (x > -1 && x < ImageData.IMAGE_RES && y > -1 && y < ImageData.IMAGE_RES){
pixelsCurrent[x+ImageData.IMAGE_RES*y] = rgb;
}
}
last_x = x;
last_y = y;
}
private void drawLine(int x0, int x1, int y0, int y1, int[] pixelsCurrent, int rgb) {
int dx = Math.abs(x1 - x0);
int dy = Math.abs(y1 - y0);
int sx = x0<x1 ? 1 : -1;
int sy = y0<y1 ? 1 : -1;
int err = dx - dy;
boolean done = false;
while(!done){
if (x0 > -1 && x0 < ImageData.IMAGE_RES && y0 > -1 && y0 < ImageData.IMAGE_RES){
pixelsCurrent[x0+ImageData.IMAGE_RES*y0] = rgb;
}
if(x0 == x1 && y0 == y1){
done = true;
}
int e2 = 2*err;
if(e2 > -dy && !done){
err = err - dy;
x0 = x0 + sx;
}
if(x0 == x1 && y0 == y1 && !done){
if (x0 > -1 && x0 < ImageData.IMAGE_RES && y0 > -1 && y0 < ImageData.IMAGE_RES){
pixelsCurrent[x0+ImageData.IMAGE_RES*y0] = rgb;
}
done = true;
}
if(e2 < dx && !done){
err = err + dx;
y0 = y0 + sy;
}
}
}
}