package com.jpl.games.model;
import javafx.geometry.Point3D;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.transform.Affine;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
/**
*
* @author jpereda, April 2014 - @JPeredaDnr
*/
public class Utils {
public static Affine getAffine(double dimCube, double d0, boolean bFaceArrow, String face){
Affine aff;
double d=2d*dimCube/3d;
if(!bFaceArrow){
aff=new Affine(new Scale(80,80,50));
aff.append(new Translate(-d0,-d0,d0));
} else {
aff=new Affine(new Scale(3,3,3));
aff.append(new Translate(0,-d0,0));
}
switch(face){
case "F":
case "Fi": aff.prepend(new Rotate(face.equals("F")?90:-90,Rotate.X_AXIS));
aff.prepend(new Rotate(face.equals("F")?45:-45,Rotate.Z_AXIS));
aff.prepend(new Translate(0,0,dimCube/2d));
break;
case "B":
case "Bi": aff.prepend(new Rotate(face.equals("Bi")?90:-90,Rotate.X_AXIS));
aff.prepend(new Rotate(face.equals("Bi")?45:-45,Rotate.Z_AXIS));
aff.prepend(new Translate(0,0,-dimCube/2d));
break;
case "R":
case "Ri": aff.prepend(new Rotate(face.equals("Ri")?90:-90,Rotate.Z_AXIS));
aff.prepend(new Rotate(face.equals("Ri")?45:-45,Rotate.X_AXIS));
aff.prepend(new Translate(dimCube/2d,0,0));
break;
case "L":
case "Li": aff.prepend(new Rotate(face.equals("L")?90:-90,Rotate.Z_AXIS));
aff.prepend(new Rotate(face.equals("L")?45:-45,Rotate.X_AXIS));
aff.prepend(new Translate(-dimCube/2d,0,0));
break;
case "U":
case "Ui": aff.prepend(new Rotate(face.equals("Ui")?180:0,Rotate.Z_AXIS));
aff.prepend(new Rotate(face.equals("Ui")?45:-45,Rotate.Y_AXIS));
aff.prepend(new Translate(0,dimCube/2d,0));
break;
case "D":
case "Di": aff.prepend(new Rotate(face.equals("D")?180:0,Rotate.Z_AXIS));
aff.prepend(new Rotate(face.equals("D")?45:-45,Rotate.Y_AXIS));
aff.prepend(new Translate(0,-dimCube/2d,0));
break;
case "Z":
case "Zi": aff.prepend(new Rotate(face.equals("Zi")?180:0,Rotate.Y_AXIS));
aff.prepend(new Rotate(face.equals("Zi")?45:-45,Rotate.Z_AXIS));
aff.prepend(new Translate(0,0,d));
break;
case "X":
case "Xi": aff.prepend(new Rotate(face.equals("X")?90:-90,Rotate.Y_AXIS));
aff.prepend(new Rotate(face.equals("Xi")?45:-45,Rotate.X_AXIS));
aff.prepend(new Translate(d,0,0));
break;
case "Y":
case "Yi": aff.prepend(new Rotate(face.equals("Yi")?90:-90,Rotate.X_AXIS));
aff.prepend(new Rotate(face.equals("Yi")?45:-45,Rotate.Y_AXIS));
aff.prepend(new Translate(0,d,0));
break;
}
return aff;
}
public static PhongMaterial getMaterial(String face){
PhongMaterial arrowMat = new PhongMaterial();
arrowMat.setSpecularColor(Color.WHITESMOKE);
Color color=Color.WHITE;
switch(face){
case "F":
case "Fi": color=Color.BLUE.brighter();
break;
case "B":
case "Bi": color=Color.BLUE.brighter();
break;
case "R":
case "Ri": color=Color.RED.brighter();
break;
case "L":
case "Li": color=Color.RED.brighter();
break;
case "U":
case "Ui": color=Color.FORESTGREEN.brighter();
break;
case "D":
case "Di": color=Color.FORESTGREEN.brighter();
break;
case "Z":
case "Zi": color=Color.BLUE.brighter();
break;
case "X":
case "Xi": color=Color.RED.brighter();
break;
case "Y":
case "Yi": color=Color.FORESTGREEN.brighter();
break;
}
arrowMat.setDiffuseColor(color);
return arrowMat;
}
public static Point3D getAxis(String face){
Point3D p=new Point3D(0,0,0);
switch(face.substring(0,1)){
case "L":
case "M": p=new Point3D(-1,0,0);
break;
case "R": p=new Point3D(1,0,0);
break;
case "U": p=new Point3D(0,1,0);
break;
case "E":
case "D": p=new Point3D(0,-1,0);
break;
case "F":
case "S": p=new Point3D(0,0,1);
break;
case "B": p=new Point3D(0,0,-1);
break;
case "X": p=new Point3D(1,0,0);
break;
case "Y": p=new Point3D(0,1,0);
break;
case "Z": p=new Point3D(0,0,1);
break;
}
return p;
}
public static int getCenter(String face){
int c=0;
switch(face.substring(0,1)){
case "L": c=12; break;
case "M": c=13; break;
case "R": c=14; break;
case "U": c=10; break;
case "E": c=13; break;
case "D": c=16; break;
case "F": c=4; break;
case "S": c=13; break;
case "B": c=22; break;
}
return c;
}
}