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.
175 lines
5.7 KiB
175 lines
5.7 KiB
package visualiser.Controllers;
|
|
|
|
import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
|
|
import javafx.animation.AnimationTimer;
|
|
import javafx.application.Platform;
|
|
import javafx.collections.FXCollections;
|
|
import javafx.collections.ObservableList;
|
|
import javafx.fxml.FXML;
|
|
import javafx.scene.AmbientLight;
|
|
import javafx.scene.PointLight;
|
|
import javafx.scene.control.Button;
|
|
import javafx.scene.control.RadioButton;
|
|
import javafx.scene.image.Image;
|
|
import javafx.scene.image.ImageView;
|
|
import javafx.scene.layout.AnchorPane;
|
|
import javafx.scene.layout.GridPane;
|
|
import javafx.scene.layout.Pane;
|
|
import javafx.scene.media.AudioClip;
|
|
import javafx.scene.media.Media;
|
|
import javafx.scene.media.MediaPlayer;
|
|
import javafx.scene.paint.Color;
|
|
import javafx.scene.shape.MeshView;
|
|
import javafx.stage.Modality;
|
|
import mock.exceptions.EventConstructionException;
|
|
import visualiser.app.App;
|
|
import visualiser.layout.SeaSurface;
|
|
import visualiser.layout.SkyBox;
|
|
import visualiser.layout.Subject3D;
|
|
import visualiser.layout.View3D;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.net.URISyntaxException;
|
|
import java.net.URL;
|
|
import java.util.ResourceBundle;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
/**
|
|
* Controller for the opening title window.
|
|
* Has two initial buttons for a user to decide how to play their game. Has a
|
|
* burger-boat and comic sans styling to allure and entice users into playing
|
|
* the game.
|
|
*/
|
|
public class TitleController extends Controller {
|
|
private @FXML AnchorPane titleWrapper;
|
|
private @FXML RadioButton dayModeRD;
|
|
private @FXML RadioButton nightModeRD;
|
|
private @FXML Button tutorialButton;
|
|
private @FXML Pane menuPane;
|
|
private @FXML ImageView imgSun;
|
|
private @FXML GridPane view3DContainer;
|
|
|
|
public void initialize() {
|
|
AmbientLight ambientLight = new AmbientLight(Color.web("#CCCCFF"));
|
|
ambientLight.setTranslateX(250);
|
|
ambientLight.setTranslateZ(210);
|
|
ambientLight.setLightOn(true);
|
|
|
|
PointLight pointLight = new PointLight(Color.web("#AAAAFF"));
|
|
pointLight.setTranslateX(250);
|
|
pointLight.setTranslateZ(210);
|
|
pointLight.setLightOn(true);
|
|
|
|
ObservableList<Subject3D> subjects = FXCollections.observableArrayList();
|
|
View3D view3D = new View3D();
|
|
view3D.addAmbientLight(ambientLight);
|
|
view3D.addPointLight(pointLight);
|
|
view3D.setDistance(10);
|
|
view3D.setPitch(5);
|
|
view3D.setItems(subjects);
|
|
|
|
SkyBox skyBox = new SkyBox(750,200,250,0,250);
|
|
subjects.addAll(skyBox.getSkyBoxPlanes());
|
|
|
|
SeaSurface seaSurface = new SeaSurface(750, 200);
|
|
seaSurface.setX(250);
|
|
seaSurface.setZ(250);
|
|
subjects.add(seaSurface);
|
|
|
|
URL asset = RaceViewController.class.getClassLoader().getResource("assets/V1.2 Complete Boat.stl");
|
|
StlMeshImporter importer = new StlMeshImporter();
|
|
importer.read(asset);
|
|
Subject3D boat = new Subject3D(new MeshView(importer.getImport()), 0);
|
|
|
|
double radius = 100;
|
|
boat.setX(0);
|
|
boat.setZ(radius);
|
|
boat.setScale(0.1);
|
|
|
|
subjects.add(boat);
|
|
view3D.trackSubject(boat, -45);
|
|
|
|
view3DContainer.add(view3D, 0, 0);
|
|
|
|
AnimationTimer loop = new AnimationTimer() {
|
|
double angle = -90;
|
|
double offset = 0.05;
|
|
@Override
|
|
public void handle(long now) {
|
|
boat.setX(radius * Math.cos(angle * Math.PI/180));
|
|
boat.setZ(radius * Math.sin(angle * Math.PI/180));
|
|
boat.setHeading(-angle);
|
|
angle += offset;
|
|
}
|
|
};
|
|
loop.start();
|
|
|
|
titleWrapper.getStylesheets().add("/css/dayMode.css");
|
|
}
|
|
|
|
/**
|
|
* Method called when the 'host a game' button is pressed.
|
|
* Opens the next window allowing a user to host their own game.
|
|
* Currently used to run the RaceVision mock.
|
|
* @throws IOException if main has problems
|
|
*/
|
|
public void hostAGame() throws IOException {
|
|
loadScene("hostGame.fxml");
|
|
}
|
|
|
|
/**
|
|
* To be implemented at a later date- will open the next scene displaying
|
|
* games a player can join. Place holder method for now!
|
|
* @throws IOException socket error
|
|
*/
|
|
public void joinAGame() throws IOException {
|
|
loadScene("lobby.fxml");
|
|
}
|
|
|
|
/**
|
|
* Switches the css of the program to day mode theme
|
|
*/
|
|
public void setDayMode(){
|
|
dayModeRD.getScene().getStylesheets().clear();
|
|
menuPane.getStylesheets().clear();
|
|
dayModeRD.getScene().getStylesheets().add("/css/dayMode.css");
|
|
menuPane.setStyle("-fx-background-color: #6be6ff;");
|
|
nightModeRD.setSelected(false);
|
|
App.dayMode = true;
|
|
}
|
|
|
|
/**
|
|
* Switches the css of the program to night mode theme
|
|
*/
|
|
public void setNightMode(){
|
|
nightModeRD.getScene().getStylesheets().clear();
|
|
menuPane.getStylesheets().clear();
|
|
nightModeRD.getScene().getStylesheets().add("/css/nightMode.css");
|
|
menuPane.setStyle("-fx-background-color: #1f2c60;");
|
|
dayModeRD.setSelected(false);
|
|
App.dayMode = false;
|
|
}
|
|
|
|
/**
|
|
* Called when control button is pressed. New pop up window displaying controls
|
|
*/
|
|
public void showControls(){
|
|
try {
|
|
loadPopupScene("keyBindings.fxml",
|
|
"Game Controls", Modality.WINDOW_MODAL);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void tutorialStartPressed() throws IOException,
|
|
EventConstructionException {
|
|
App.gameType = 4;
|
|
HostGameController hgc = new HostGameController();
|
|
hgc.setCurrentMapIndex(4);
|
|
hgc.hostGamePressed();
|
|
}
|
|
|
|
} |