Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Layer {
- final String ID;
- int lastEvent; // Last event triggered by an element within this layer
- Square geomVisible;
- Square geomActual;
- double hMin, hMax, hLength, vMin, vMax, vLength;
- Element[] elements;
- public Layer(String ID, Element[] elements, Square geomVisible, Square geomActual){
- this.ID = ID;
- this.elements = elements;
- this.geomActual = geomActual;
- this.geomVisible = geomVisible;
- hMin = (geomVisible.x1-geomActual.x1) / (geomActual.x2-geomActual.x1);
- hMax = (geomVisible.x2-geomActual.x1) / (geomActual.x2-geomActual.x1);
- vMin = (geomVisible.y1-geomActual.y1) / (geomActual.y2-geomActual.y1);
- vMax = (geomVisible.y2-geomActual.y1) / (geomActual.y2-geomActual.y1);
- if(hMin < 0)
- hMin = 0;
- if(hMax > 1)
- hMax = 1;
- if(vMin < 0)
- vMin = 0;
- if(vMax > 1)
- vMax = 1;
- hLength = hMax-hMin;
- vLength = vMax-vMin;
- }
- // Works out which element has been clicked. A return of elements.length mean no elements were clicked.
- public int computeClickedElement(int mouseX, int mouseY){
- int clickedElement = elements.length;
- for(int i=0; i<elements.length; i++){
- if(elements[i].geom.x1+geomActual.x1 < mouseX){
- if(elements[i].geom.x2+geomActual.x1 > mouseX){
- if(elements[i].geom.y1+geomActual.y1 < mouseY){
- if(elements[i].geom.y2+geomActual.y1 > mouseY){
- clickedElement = i;
- i = elements.length;
- }
- }
- }
- }
- if(geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMin) < mouseX){
- if(geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMax) > mouseX){
- if(geomVisible.y1 <= mouseY){
- if(geomVisible.y1+10 >= mouseY){
- clickedElement = elements.length+1;
- i = elements.length;
- }
- }
- }
- }
- if(geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMin) < mouseY){
- if(geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMax) > mouseY){
- if(geomVisible.x2-10 <= mouseX){
- if(geomVisible.x2 >= mouseX){
- clickedElement = elements.length+2;
- i = elements.length;
- }
- }
- }
- }
- if(geomVisible.x2-10 < mouseX){
- if(geomVisible.x2 > mouseX){
- if(geomVisible.y2-10 < mouseY){
- if(geomVisible.y2 > mouseY){
- clickedElement = elements.length+3;
- i = elements.length;
- }
- }
- }
- }
- }
- return clickedElement;
- }
- public void resize(int deltaX, int deltaY){
- geomVisible.x2 += deltaX;
- geomVisible.y2 += deltaY;
- hMin = (geomVisible.x1-geomActual.x1) / (geomActual.x2-geomActual.x1);
- hMax = (geomVisible.x2-geomActual.x1) / (geomActual.x2-geomActual.x1);
- vMin = (geomVisible.y1-geomActual.y1) / (geomActual.y2-geomActual.y1);
- vMax = (geomVisible.y2-geomActual.y1) / (geomActual.y2-geomActual.y1);
- hLength = hMax-hMin;
- vLength = vMax-vMin;
- update();
- System.out.println(geomActual.y2-geomActual.y1);
- }
- public void scroll(int deltaX, int deltaY, int direction){
- double p1 = geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMin);
- double p2 = geomVisible.x1+((geomVisible.x2-geomVisible.x1)*hMax);
- double q1 = geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMin);
- double q2 = geomVisible.y1+((geomVisible.y2-geomVisible.y1)*vMax);
- switch(direction){
- case 1:
- hMin = (p1+deltaX-geomVisible.x1)/(geomVisible.x2-geomVisible.x1);
- hMax = (p2+deltaX-geomVisible.x1)/(geomVisible.x2-geomVisible.x1);
- if(hMin < 0){
- hMax += 0-hMin;
- hMin = 0;
- }
- if(hMax > 1){
- hMin += 1-hMax;
- hMax = 1;
- }
- break;
- case 2:
- vMin = (q1+deltaY-geomVisible.y1)/(geomVisible.y2-geomVisible.y1);
- vMax = (q2+deltaY-geomVisible.y1)/(geomVisible.y2-geomVisible.y1);
- if(vMin < 0){
- vMax += 0-vMin;
- vMin = 0;
- }
- if(vMax > 1){
- vMin += 1-vMax;
- vMax = 1;
- }
- break;
- }
- update();
- }
- public void translate(int deltaX, int deltaY){
- geomActual.x1 += deltaX;
- geomActual.x2 += deltaX;
- geomActual.y1 += deltaY;
- geomActual.y2 += deltaY;
- geomVisible.x1 += deltaX;
- geomVisible.x2 += deltaX;
- geomVisible.y1 += deltaY;
- geomVisible.y2 += deltaY;
- }
- public void update(){
- if(hMax > 1){
- hMax = 1;
- hMin = 1-hLength;
- if(hMin < 0){
- hMin = 0;
- hLength = 1;
- }
- }
- if(vMax > 1){
- vMax = 1;
- vMin = 1-vLength;
- if(vMin < 0){
- vMin = 0;
- vLength = 1;
- }
- }
- double tempX1 = geomActual.x1;
- double tempX2 = geomActual.x2;
- double tempY1 = geomActual.y1;
- double tempY2 = geomActual.y2;
- geomActual.x1 = geomVisible.x1-(hMin*(tempX2-tempX1));
- geomActual.x2 = geomActual.x1+tempX2-tempX1;
- geomActual.y1 = geomVisible.y1-(vMin*(tempY2-tempY1));
- geomActual.y2 = geomActual.y1+tempY2-tempY1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement