mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Worked on making a visual component to the stats. Need to implement acceleration.
#story[1274]
This commit is contained in:
@@ -449,11 +449,10 @@ public class GameState implements Runnable {
|
||||
private void updateVelocity(ServerYacht yacht) {
|
||||
Double trueWindAngle = Math.abs(windDirection - yacht.getHeading());
|
||||
Double boatSpeedInKnots = PolarTable.getBoatSpeed(getWindSpeedKnots(), trueWindAngle);
|
||||
Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots) * speedMultiplier;
|
||||
Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots) * speedMultiplier * yacht.getMaxSpeedMultiplier();
|
||||
if (yacht.getPowerUp() != null) {
|
||||
if (yacht.getPowerUp().equals(TokenType.BOOST)) {
|
||||
// TODO: 11/09/17 wmu16 CHANGE THIS TO MAGIC NUMBER
|
||||
// TODO 22/09/17 kre39 change this magic number to a variable
|
||||
maxBoatSpeed *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ public class ServerYacht {
|
||||
|
||||
//Boat info
|
||||
private String boatType;
|
||||
private Double turn_step;
|
||||
private Double turnStep = 10.0;
|
||||
private Double maxSpeedMultiplier = 1.0;
|
||||
private Integer sourceId;
|
||||
private String hullID; //matches HullNum in the XML spec.
|
||||
private String shortName;
|
||||
@@ -172,7 +173,7 @@ public class ServerYacht {
|
||||
if (isAuto) {
|
||||
turnTowardsHeading(autoHeading);
|
||||
if (Math.abs(heading - autoHeading)
|
||||
<= turn_step) { //Cancel when within 1 turn step of target.
|
||||
<= turnStep) { //Cancel when within 1 turn step of target.
|
||||
isAuto = false;
|
||||
}
|
||||
}
|
||||
@@ -187,20 +188,20 @@ public class ServerYacht {
|
||||
Double normalizedHeading = normalizeHeading();
|
||||
if (normalizedHeading == 0) {
|
||||
if (lastHeading < 180) {
|
||||
adjustHeading(-turn_step);
|
||||
adjustHeading(-turnStep);
|
||||
} else {
|
||||
adjustHeading(turn_step);
|
||||
adjustHeading(turnStep);
|
||||
}
|
||||
} else if (normalizedHeading == 180) {
|
||||
if (lastHeading < 180) {
|
||||
adjustHeading(turn_step);
|
||||
adjustHeading(turnStep);
|
||||
} else {
|
||||
adjustHeading(-turn_step);
|
||||
adjustHeading(-turnStep);
|
||||
}
|
||||
} else if (normalizedHeading < 180) {
|
||||
adjustHeading(-turn_step);
|
||||
adjustHeading(-turnStep);
|
||||
} else {
|
||||
adjustHeading(turn_step);
|
||||
adjustHeading(turnStep);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,20 +210,20 @@ public class ServerYacht {
|
||||
Double normalizedHeading = normalizeHeading();
|
||||
if (normalizedHeading == 0) {
|
||||
if (lastHeading < 180) {
|
||||
adjustHeading(turn_step);
|
||||
adjustHeading(turnStep);
|
||||
} else {
|
||||
adjustHeading(-turn_step);
|
||||
adjustHeading(-turnStep);
|
||||
}
|
||||
} else if (normalizedHeading == 180) {
|
||||
if (lastHeading < 180) {
|
||||
adjustHeading(-turn_step);
|
||||
adjustHeading(-turnStep);
|
||||
} else {
|
||||
adjustHeading(turn_step);
|
||||
adjustHeading(turnStep);
|
||||
}
|
||||
} else if (normalizedHeading < 180) {
|
||||
adjustHeading(turn_step);
|
||||
adjustHeading(turnStep);
|
||||
} else {
|
||||
adjustHeading(-turn_step);
|
||||
adjustHeading(-turnStep);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,9 +267,9 @@ public class ServerYacht {
|
||||
private void turnTowardsHeading(Double newHeading) {
|
||||
Double newVal = heading - newHeading;
|
||||
if (Math.floorMod(newVal.longValue(), 360L) > 180) {
|
||||
adjustHeading(turn_step / 5);
|
||||
adjustHeading(turnStep / 5);
|
||||
} else {
|
||||
adjustHeading(-turn_step / 5);
|
||||
adjustHeading(-turnStep / 5);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -420,16 +421,21 @@ public class ServerYacht {
|
||||
}
|
||||
|
||||
public void setBoatType(String boatType) {
|
||||
if (boatType == BoatMeshType.DINGHY.toString()) {
|
||||
turn_step = 5.0;
|
||||
} else if (boatType == BoatMeshType.CAT_ATE_A_MERINGUE.toString()){
|
||||
turn_step = 10.0;
|
||||
} else {
|
||||
turn_step = 7.0;
|
||||
BoatMeshType boatMeshType;
|
||||
for (BoatMeshType boatMesh: BoatMeshType.values()) {
|
||||
if (boatType == boatMesh.toString()) {
|
||||
boatMeshType = boatMesh;
|
||||
turnStep = boatMeshType.turnStep;
|
||||
maxSpeedMultiplier = boatMeshType.maxSpeedMultiplier;
|
||||
}
|
||||
}
|
||||
this.boatType = boatType;
|
||||
}
|
||||
|
||||
public Double getMaxSpeedMultiplier() {
|
||||
return maxSpeedMultiplier;
|
||||
}
|
||||
|
||||
public String getBoatType() {
|
||||
return boatType;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import javafx.fxml.Initializable;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.Group;
|
||||
import javafx.scene.PointLight;
|
||||
import javafx.scene.control.ProgressBar;
|
||||
import javafx.scene.layout.Background;
|
||||
import javafx.scene.layout.BackgroundFill;
|
||||
import javafx.scene.layout.CornerRadii;
|
||||
@@ -34,6 +35,12 @@ public class BoatCustomizeController implements Initializable{
|
||||
@FXML
|
||||
private JFXColorPicker colorPicker;
|
||||
@FXML
|
||||
private ProgressBar speedBar;
|
||||
@FXML
|
||||
private ProgressBar accelBar;
|
||||
@FXML
|
||||
private ProgressBar handleBar;
|
||||
@FXML
|
||||
private JFXButton submitBtn;
|
||||
@FXML
|
||||
private JFXTextField boatName;
|
||||
@@ -49,12 +56,15 @@ public class BoatCustomizeController implements Initializable{
|
||||
private ClientToServerThread socketThread;
|
||||
private LobbyController lobbyController;
|
||||
private BoatMeshType currentBoat;
|
||||
private static Double maxSpeedMultiplier = 1.0;
|
||||
private static Double maxTurnRate = 10.0;
|
||||
private static Double maxAcceleration = 2.0;
|
||||
|
||||
@Override
|
||||
public void initialize(URL location, ResourceBundle resources) {
|
||||
|
||||
socketThread = ViewManager.getInstance().getGameClient().getServerThread();
|
||||
|
||||
generateMaxStats();
|
||||
RequiredFieldValidator playerNameReqValidator = new RequiredFieldValidator();
|
||||
playerNameReqValidator.setMessage("Player name required.");
|
||||
|
||||
@@ -120,6 +130,8 @@ public class BoatCustomizeController implements Initializable{
|
||||
BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
|
||||
group.getChildren().add(bo.getAssets());
|
||||
group.getChildren().add(new PointLight());
|
||||
refreshStatBars(bo);
|
||||
|
||||
}
|
||||
|
||||
public void nextBoat(ActionEvent actionEvent) {
|
||||
@@ -130,6 +142,8 @@ public class BoatCustomizeController implements Initializable{
|
||||
BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
|
||||
group.getChildren().add(bo.getAssets());
|
||||
group.getChildren().add(new PointLight());
|
||||
refreshStatBars(bo);
|
||||
|
||||
}
|
||||
|
||||
public void prevBoat(ActionEvent actionEvent) {
|
||||
@@ -140,6 +154,8 @@ public class BoatCustomizeController implements Initializable{
|
||||
BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
|
||||
group.getChildren().add(bo.getAssets());
|
||||
group.getChildren().add(new PointLight());
|
||||
refreshStatBars(bo);
|
||||
|
||||
}
|
||||
|
||||
private void RefreshBoat() {
|
||||
@@ -148,5 +164,26 @@ public class BoatCustomizeController implements Initializable{
|
||||
boatPane.getChildren().add(group);
|
||||
BoatModel bo = ModelFactory.boatCustomiseView(currentBoat, colorPicker.getValue());
|
||||
group.getChildren().add(bo.getAssets());
|
||||
refreshStatBars(bo);
|
||||
}
|
||||
|
||||
private void generateMaxStats() {
|
||||
for (BoatMeshType bmt: BoatMeshType.values()) {
|
||||
if (bmt.turnStep > maxTurnRate) {
|
||||
maxTurnRate = bmt.turnStep;
|
||||
}
|
||||
if (bmt.maxSpeedMultiplier > maxSpeedMultiplier) {
|
||||
maxSpeedMultiplier = bmt.maxSpeedMultiplier;
|
||||
}
|
||||
if (bmt.accelerationMultiplier > maxAcceleration) {
|
||||
maxAcceleration = bmt.accelerationMultiplier;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshStatBars(BoatModel bo) {
|
||||
speedBar.setProgress((bo.getMeshType().maxSpeedMultiplier) / maxSpeedMultiplier);
|
||||
accelBar.setProgress(bo.getMeshType().accelerationMultiplier / maxAcceleration);
|
||||
handleBar.setProgress(bo.getMeshType().turnStep / maxTurnRate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,19 +7,22 @@ package seng302.visualiser.fxObjects.assets_3D;
|
||||
*/
|
||||
public enum BoatMeshType {
|
||||
|
||||
DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false),
|
||||
DINGHY("dinghy_hull.stl", "dinghy_mast.stl", 1.36653, "dinghy_sail.stl", 1.36653, null, false, 1.5, 1.0, 5.0),
|
||||
CAT_ATE_A_MERINGUE("catamaran_hull.stl", "catamaran_mast.stl", 0.997, "catamaran_sail.stl",
|
||||
0.997, null, false),
|
||||
0.997, null, false, 1.0, 1.0, 10.0),
|
||||
PIRATE_SHIP("pirateship_hull.stl", "pirateship_mast.stl", -0.5415, "pirateship_mainsail.stl",
|
||||
-0.5415, "pirateship_frontsail.stl", true);
|
||||
-0.5415, "pirateship_frontsail.stl", true, 1.2, 1.0, 7.0);
|
||||
|
||||
final String hullFile, mastFile, sailFile, jibFile;
|
||||
final double mastOffset, sailOffset;
|
||||
public final double maxSpeedMultiplier;
|
||||
public final double accelerationMultiplier;
|
||||
public final double turnStep;
|
||||
final boolean fixedSail;
|
||||
final static BoatMeshType[] boatTypes = new BoatMeshType[]{DINGHY, CAT_ATE_A_MERINGUE, PIRATE_SHIP};
|
||||
|
||||
BoatMeshType(String hullFile, String mastFile, double mastOffset, String sailFile,
|
||||
double sailOffset, String jibFile, boolean fixedSail) {
|
||||
double sailOffset, String jibFile, boolean fixedSail, double maxSpeedMultiplier, double accelerationMultiplier, double turnStep) {
|
||||
this.hullFile = hullFile;
|
||||
this.mastFile = mastFile;
|
||||
this.mastOffset = mastOffset;
|
||||
@@ -27,6 +30,9 @@ public enum BoatMeshType {
|
||||
this.sailOffset = sailOffset;
|
||||
this.jibFile = jibFile;
|
||||
this.fixedSail = fixedSail;
|
||||
this.maxSpeedMultiplier = maxSpeedMultiplier;
|
||||
this.accelerationMultiplier = accelerationMultiplier;
|
||||
this.turnStep = turnStep;
|
||||
}
|
||||
|
||||
public static BoatMeshType getBoatMeshType(String boatType) {
|
||||
|
||||
@@ -18,6 +18,9 @@ public class BoatModel extends Model {
|
||||
private static final int SAIL_INDEX = 2;
|
||||
|
||||
private BoatMeshType meshType;
|
||||
private Double maxSpeedMultiplier;
|
||||
private Double turnStep;
|
||||
private Double accelerationMultiplier;
|
||||
|
||||
/**
|
||||
* Stores a model and it's optional animation.
|
||||
@@ -71,4 +74,8 @@ public class BoatModel extends Model {
|
||||
private MeshView getMeshViewChild(int index) {
|
||||
return (MeshView) assets.getChildren().get(index);
|
||||
}
|
||||
|
||||
public BoatMeshType getMeshType() {
|
||||
return meshType;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user