Boats sails can luff and are now two piece. #story[1297]
This commit is contained in:
@@ -18,21 +18,21 @@ import javafx.scene.layout.GridPane;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.paint.PhongMaterial;
|
||||
import javafx.scene.shape.MeshView;
|
||||
import javafx.scene.shape.Shape3D;
|
||||
import mock.app.Event;
|
||||
import network.Messages.Enums.RaceStatusEnum;
|
||||
import network.Messages.Enums.RequestToJoinEnum;
|
||||
import shared.model.Boat;
|
||||
import visualiser.app.App;
|
||||
import visualiser.gameController.ControllerClient;
|
||||
import visualiser.layout.SeaSurface;
|
||||
import visualiser.layout.Subject3D;
|
||||
import visualiser.layout.View3D;
|
||||
import visualiser.layout.*;
|
||||
import visualiser.model.VisualiserBoat;
|
||||
import visualiser.model.VisualiserRaceEvent;
|
||||
import visualiser.model.VisualiserRaceState;
|
||||
import visualiser.network.HttpMatchBrowserHost;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.Socket;
|
||||
import java.net.URL;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@@ -157,12 +157,22 @@ public class InGameLobbyController extends Controller {
|
||||
sea.setZ(210);
|
||||
subjects.add(sea);
|
||||
|
||||
MeshView mesh = new MeshView(importer.getImport());
|
||||
// MeshView mesh = new MeshView(importer.getImport());
|
||||
// Subject3D subject = new Subject3D(mesh,0);
|
||||
// subjects.add(subject);
|
||||
Shape3D mesh = Assets3D.getBoat();
|
||||
PhongMaterial boatColorMat = new PhongMaterial(boat.getColor());
|
||||
mesh.setMaterial(boatColorMat);
|
||||
Subject3D subject = new Subject3D(mesh,0);
|
||||
Subject3D subject = new Subject3D(mesh, 0);
|
||||
subjects.add(subject);
|
||||
|
||||
Sails3D sails3D = new Sails3D();
|
||||
Subject3D sailsSubject = new Subject3D(sails3D, 0);
|
||||
sails3D.setMaterial(boatColorMat);
|
||||
subjects.add(sailsSubject);
|
||||
sailsSubject.setXRot(0d);
|
||||
//sails3D.startLuffing();
|
||||
|
||||
playerBoatToSet.setDistance(50);
|
||||
playerBoatToSet.setYaw(45);
|
||||
playerBoatToSet.setPitch(20);
|
||||
@@ -173,6 +183,7 @@ public class InGameLobbyController extends Controller {
|
||||
@Override
|
||||
public void handle(long now) {
|
||||
subject.setHeading(subject.getHeading().getAngle() + 0.1);
|
||||
sailsSubject.setHeading(subject.getHeading().getAngle() + 0.1);
|
||||
}
|
||||
};
|
||||
rotate.start();
|
||||
|
||||
@@ -25,6 +25,7 @@ import javafx.stage.Stage;
|
||||
import javafx.stage.StageStyle;
|
||||
import javafx.util.Duration;
|
||||
import mock.app.Event;
|
||||
import visualiser.layout.Assets3D;
|
||||
|
||||
public class App extends Application {
|
||||
private static Stage stage;
|
||||
@@ -113,6 +114,7 @@ public class App extends Application {
|
||||
}
|
||||
);
|
||||
new Thread(boatTask).start();
|
||||
Assets3D.loadAssets();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package visualiser.layout;
|
||||
|
||||
import com.interactivemesh.jfx.importer.obj.ObjModelImporter;
|
||||
import com.interactivemesh.jfx.importer.tds.TdsModelImporter;
|
||||
import com.interactivemesh.jfx.importer.x3d.X3dModelImporter;
|
||||
import javafx.geometry.Point3D;
|
||||
import javafx.scene.Group;
|
||||
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 void loadAssets(){
|
||||
loadSails();
|
||||
}
|
||||
|
||||
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.3 Sail_%06d.obj", i + 1);
|
||||
System.out.println(path);
|
||||
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);*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Shape3D getBoat(){
|
||||
TdsModelImporter tdsModelImporter = new TdsModelImporter();
|
||||
X3dModelImporter x3dModelImporter = new X3dModelImporter();
|
||||
String path = "assets/V1.3 Complete Boat without Sail and Rotated.x3d";
|
||||
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 boat = (Shape3D)g.getChildren().get(0);
|
||||
return boat;
|
||||
/*} else {
|
||||
System.err.println("Boat is not a Mesh View 0.0");
|
||||
}*/
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package visualiser.layout;
|
||||
|
||||
import javafx.animation.AnimationTimer;
|
||||
import javafx.scene.shape.Mesh;
|
||||
import javafx.scene.shape.MeshView;
|
||||
|
||||
/**
|
||||
* Created by Gondr on 21/09/2017.
|
||||
*/
|
||||
public class Sails3D extends MeshView {
|
||||
int index = 0;
|
||||
|
||||
public Sails3D() {
|
||||
setMesh(Assets3D.sails[0].getMesh());
|
||||
}
|
||||
|
||||
private AnimationTimer luff = new AnimationTimer() {
|
||||
@Override
|
||||
public void handle(long now) {
|
||||
setMesh(Assets3D.sails[index].getMesh());
|
||||
index = (index + 1) % 40;
|
||||
}
|
||||
};
|
||||
|
||||
public void startLuffing(){
|
||||
luff.start();
|
||||
}
|
||||
|
||||
public void stopLuffing(){
|
||||
luff.stop();
|
||||
setMesh(Assets3D.sails[0].getMesh());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,8 +28,13 @@ public class Subject3D {
|
||||
*/
|
||||
private Rotate heading;
|
||||
|
||||
private Rotate xRot;
|
||||
|
||||
private Rotate yRot;
|
||||
|
||||
private Scale scale;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor for view subject wrapper
|
||||
* @param mesh to be rendered
|
||||
@@ -41,7 +46,9 @@ public class Subject3D {
|
||||
this.scale = new Scale();
|
||||
this.position = new Translate();
|
||||
this.heading = new Rotate(0, Rotate.Y_AXIS);
|
||||
this.mesh.getTransforms().addAll(position, scale, heading, new Rotate(90, Rotate.X_AXIS), new Rotate(180, Rotate.Y_AXIS));
|
||||
this.xRot = new Rotate(90, Rotate.X_AXIS);
|
||||
this.yRot = new Rotate(180, Rotate.Y_AXIS);
|
||||
this.mesh.getTransforms().addAll(position, scale, heading, xRot, yRot);
|
||||
}
|
||||
|
||||
public Shape3D getMesh() {
|
||||
@@ -81,4 +88,12 @@ public class Subject3D {
|
||||
public void setHeading(double angle) {
|
||||
heading.setAngle(angle);
|
||||
}
|
||||
|
||||
public void setXRot(double angle){
|
||||
xRot.setAngle(angle);
|
||||
}
|
||||
|
||||
public void setYRot(double angle){
|
||||
yRot.setAngle(angle);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user