package tk.amberide.ide.gui.editor.map.tool;
import org.lwjgl.input.Keyboard;
import tk.amberide.engine.data.math.Angles;
import tk.amberide.ide.data.res.Tileset.TileSprite;
import tk.amberide.engine.gl.camera.EulerCamera;
import tk.amberide.ide.gui.editor.map.MapContext;
import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.util.vector.Vector2f;
/**
*
* @author Tudor
*/
public class EraserTool extends BrushTool {
private int size = 1;
public EraserTool(MapContext context, EulerCamera camera) {
super(context, camera);
}
@Override
public void doScroll(int delta) {
size += delta;
size = Math.max(size, 1);
}
@Override
public void doKey(int keycode) {
switch (keycode) {
case Keyboard.KEY_MULTIPLY:
size++;
break;
case Keyboard.KEY_DIVIDE:
if (size > 1) {
size--;
}
break;
}
}
@Override
public boolean apply(int x, int y, int z) {
boolean modified = false;
for (int sx = 0; sx != size; sx++) {
for (int sy = 0; sy != size; sy++) {
boolean tiled = setAngledTile(x, y, z, sx, sy, size, size,
camera.getFacingDirection(), angle, new TileSprite[size][size]);
if (!modified) {
modified = tiled;
}
}
}
return modified;
}
@Override
public void draw(int x, int y, int z) {
glPushMatrix();
float[] tr = new float[]{x, y, z, 0};
switch (camera.getFacingDirection()) {
case SOUTH:
tr[0]++;
tr[2]++;
tr[3] = 180;
break;
case WEST:
tr[2]++;
tr[3] = 90;
break;
case EAST:
tr[0]++;
tr[3] = 270;
break;
}
glTranslatef(tr[0], tr[1], tr[2]);
glRotatef(tr[3], 0, 1, 0);
Vector2f ix = Angles.circleIntercept(angle.intValue(), 0, 0, size);
glBegin(GL_LINE_LOOP);
{
glVertex3f(0, 0, 0);
glVertex3f(ix.x, ix.y, 0);
glVertex3f(ix.x, ix.y, size);
glVertex3f(0, 0, size);
}
glEnd();
glPopMatrix();
}
}