You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
6.1 KiB

package visualiser.layout;
import com.interactivemesh.jfx.importer.obj.ObjModelImporter;
import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
import com.interactivemesh.jfx.importer.x3d.X3dModelImporter;
import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.scene.paint.Material;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.Shape3D;
import visualiser.Controllers.HostGameController;
import java.net.URL;
/**
* Created by Gondr on 21/09/2017.
*/
public class Assets3D {
public static MeshView[] sails;
public static MeshView[] sea;
public static MeshView[] seagull;
public static Subject3D windArrow;
public static Subject3D compass;
public static Subject3D cwNextArrow;
public static Subject3D ccwNextArrow;
public static SkyBox skyBox;
public static Subject3D boatHighlight;
public static Subject3D sharks;
public static void loadAssets(){
loadSails();
loadWindArrow();
loadNextArrow();
loadSeaSurface();
loadSkybox();
loadSeagull();
loadBoatHightlight();
}
private static void loadNextArrow(){
StlMeshImporter objModelImporter = new StlMeshImporter();
String cwPath = "assets/Next Mark Arrow CW V1.0.stl";
URL asset = Assets3D.class.getClassLoader().getResource(cwPath);
objModelImporter.read(asset);
Material markColor = new PhongMaterial(new Color(0.15,0.9,0.2,1));
MeshView cwMesh = new MeshView(objModelImporter.getImport());
cwMesh.setMaterial(markColor);
cwMesh.setMouseTransparent(true);
cwMesh.toBack();
cwMesh.setVisible(false);
cwNextArrow = new Annotation3D(cwMesh);
String ccwPath = "assets/Next Mark Arrow CCW V1.0.stl";
URL ccwAsset = Assets3D.class.getClassLoader().getResource(ccwPath);
objModelImporter.read(ccwAsset);
MeshView ccwMesh = new MeshView(objModelImporter.getImport());
ccwMesh.setMaterial(markColor);
ccwMesh.setMouseTransparent(true);
ccwMesh.toBack();
cwMesh.setVisible(false);
ccwNextArrow = new Annotation3D(ccwMesh);
}
private static void loadBoatHightlight(){
Material markColor = new PhongMaterial(new Color(0,1,0,0.5));
StlMeshImporter objModelImporter = new StlMeshImporter();
String path = "assets/V1.0 Boat Highlight.stl";
URL highlight = Assets3D.class.getClassLoader().getResource(path);
objModelImporter.read(highlight);
MeshView hMesh = new MeshView(objModelImporter.getImport());
hMesh.setMaterial(markColor);
hMesh.setMouseTransparent(true);
hMesh.toBack();
boatHighlight = new Subject3D(hMesh, 0);
}
private static void loadSails(){
sails = new MeshView[40];
ObjModelImporter objModelImporter = new ObjModelImporter();
for (int i = 0; i < sails.length; i++){
String path = String.format("assets/Sails/V1.5 Sail_%06d.obj", i + 1);
URL asset = Assets3D.class.getClassLoader().getResource(path);
objModelImporter.read(asset);
if (objModelImporter.getImport().length > 0) {
sails[i] = objModelImporter.getImport()[0];
/*sails[i].setRotationAxis(new Point3D(1, 0, 0));
sails[i].setRotate(-90);*/
}
}
}
private static void loadSeaSurface(){
sea = new MeshView[100];
ObjModelImporter objModelImporter = new ObjModelImporter();
for (int i = 0; i < sea.length; i++){
// String path = String.format("assets/Ocean V1.0 Small Animation/Ocean V1.0 Large Animation_%06d.obj", i + 1);
// String path = String.format("assets/Ocean V1.0 Animation/Ocean V1.0_%06d.obj", i + 1);
String path = String.format("assets/Ocean Animation/Ocean Animation_%06d.obj", i + 1);
URL asset = Assets3D.class.getClassLoader().getResource(path);
objModelImporter.read(asset);
if (objModelImporter.getImport().length > 0) {
sea[i] = objModelImporter.getImport()[0];
}
}
}
private static void loadSeagull(){
seagull = new MeshView[30];
ObjModelImporter objModelImporter = new ObjModelImporter();
for (int i = 0; i < seagull.length; i++){
String path = String.format("assets/V1.1 Animated/Seagull V1.1_%06d.obj", i + 1);
URL asset = Assets3D.class.getClassLoader().getResource(path);
objModelImporter.read(asset);
if (objModelImporter.getImport().length > 0) {
seagull[i] = objModelImporter.getImport()[0];
}
}
}
public static Shape3D getBoat(){
String path = "assets/V1.4 Boat.x3d";
return loadX3d(path);
}
public static Shape3D getMark(){
String path = "assets/Burger Bouy V1.1.x3d";
return loadX3d(path);
}
private static void loadWindArrow(){
String compassPath = "assets/wind_compass.x3d";
compass = new Annotation3D(loadX3d(compassPath));
String arrowPath = "assets/wind_arrow.x3d";
windArrow = new Annotation3D(loadX3d(arrowPath));
}
public static Shape3D getSharks(){
String path = "assets/V1.0 Sharks.x3d";
return loadX3d(path);
}
public static Shape3D loadX3d(String path){
X3dModelImporter x3dModelImporter = new X3dModelImporter();
URL asset = Assets3D.class.getClassLoader().getResource(path);
x3dModelImporter.read(asset);
if (x3dModelImporter.getImport().length > 0) {
//if (x3dModelImporter.getImport()[0] instanceof MeshView) {
Group g = (Group)((Group)((Group) x3dModelImporter.getImport()[0]).getChildren().get(0)).getChildren().get(0);
Shape3D shape = (Shape3D)g.getChildren().get(0);
return shape;
/*} else {
System.err.println("Boat is not a Mesh View 0.0");
}*/
}
return null;
}
private static void loadSkybox(){
skyBox = new SkyBox(750, 200, 250, 0, 210);
}
}