The random token now has a 50% chance of causing your boat to have a speed penalty

#story[1293]
This commit is contained in:
William Muir
2017-09-26 21:13:35 +13:00
parent 4b7dfe38c4
commit 330ccd272d
6 changed files with 131 additions and 119 deletions
+42 -29
View File
@@ -78,10 +78,11 @@ public class GameState implements Runnable {
private static final Double COLLISION_VELOCITY_PENALTY = 0.3; private static final Double COLLISION_VELOCITY_PENALTY = 0.3;
//Powerup Constants //Powerup Constants
public static final Integer VELOCITY_BOOST_MULTIPLIER = 2; public static final Double VELOCITY_BOOST_MULTIPLIER = 2d;
public static final Integer HANDLING_BOOST_MULTIPLIER = 2; public static final Integer HANDLING_BOOST_MULTIPLIER = 2;
private static final Double BAD_RANDOM_SPEED_PENALTY = 0.3;
public static final Long BUMPER_DISABLE_TIME = 5_000L; public static final Long BUMPER_DISABLE_TIME = 5_000L;
private static final Long TOKEN_SPAWN_TIME = 15_000L; private static final Long TOKEN_SPAWN_TIME = 30_000L;
private static Long previousUpdateTime; private static Long previousUpdateTime;
public static Double windDirection; public static Double windDirection;
@@ -383,7 +384,7 @@ public class GameState implements Runnable {
//Get a random token location with random type //Get a random token location with random type
Token token = allTokens.get(random.nextInt(allTokens.size())); Token token = allTokens.get(random.nextInt(allTokens.size()));
token.assignRandomType(); token.assignRandomType();
// token.assignType(TokenType.WIND_WALKER); // token.assignType(TokenType.RANDOM);
logger.debug("Spawned token of type " + token.getTokenType()); logger.debug("Spawned token of type " + token.getTokenType());
@@ -430,7 +431,12 @@ public class GameState implements Runnable {
* @param yacht The yacht to perform token checks on * @param yacht The yacht to perform token checks on
*/ */
private void preformTokenUpdates(ServerYacht yacht) { private void preformTokenUpdates(ServerYacht yacht) {
checkTokenPickUp(yacht); Token collidedToken = checkTokenPickUp(yacht);
if (collidedToken != null) {
tokensInPlay.remove(collidedToken);
powerUpYacht(yacht, collidedToken);
}
checkPowerUpTimeout(yacht); checkPowerUpTimeout(yacht);
TokenType powerUp = yacht.getPowerUp(); TokenType powerUp = yacht.getPowerUp();
@@ -442,7 +448,6 @@ public class GameState implements Runnable {
case BUMPER: case BUMPER:
ServerYacht collidedYacht = checkYachtCollision(yacht, true); ServerYacht collidedYacht = checkYachtCollision(yacht, true);
if (collidedYacht != null) { if (collidedYacht != null) {
System.out.println("WE OUT HERE");
yacht.powerDown(); yacht.powerDown();
boatTempShutDown(collidedYacht); boatTempShutDown(collidedYacht);
notifyMessageListeners(MessageFactory.makePowerDownMessage(yacht)); notifyMessageListeners(MessageFactory.makePowerDownMessage(yacht));
@@ -450,10 +455,36 @@ public class GameState implements Runnable {
MessageFactory.makeStatusEffectMessage(collidedYacht, powerUp)); MessageFactory.makeStatusEffectMessage(collidedYacht, powerUp));
} }
break; break;
case RANDOM:
yacht.setPowerUpSpeedMultiplier(BAD_RANDOM_SPEED_PENALTY);
} }
} }
} }
/**
* Powers up a yacht with the given token type.
*
* @param yacht The yacht to be powered up
* @param collidedToken The token which this yacht collided with
*/
private void powerUpYacht(ServerYacht yacht, Token collidedToken) {
//The random token has a 50% chance of becoming another token else becoming a speed detriment!
if (collidedToken.getTokenType() == TokenType.RANDOM && new Random().nextBoolean()) {
collidedToken.realiseRandom();
}
yacht.powerUp(collidedToken.getTokenType());
String logMessage =
yacht.getBoatName() + " has picked up a " + collidedToken.getTokenType().getName()
+ " token";
notifyMessageListeners(MessageFactory.makeChatterMessage(yacht.getSourceId(), logMessage));
notifyMessageListeners(MessageFactory.getRaceXML());
notifyMessageListeners(MessageFactory.makePickupMessage(yacht, collidedToken));
logger.debug(
"Yacht: " + yacht.getShortName() + " got powerup " + collidedToken.getTokenType());
}
// TODO: 23/09/17 wmu16 - This is a hacky way to have the boat power down. Need some sort of separation between token and status effect :/ // TODO: 23/09/17 wmu16 - This is a hacky way to have the boat power down. Need some sort of separation between token and status effect :/
/** /**
@@ -462,7 +493,7 @@ public class GameState implements Runnable {
* @param yacht The yacht to disable * @param yacht The yacht to disable
*/ */
private void boatTempShutDown(ServerYacht yacht) { private void boatTempShutDown(ServerYacht yacht) {
yacht.setPowerUpSpeedMultiplier(0); yacht.setPowerUpSpeedMultiplier(0d);
Timer shutDownTimer = new Timer("Shutdown Timer"); Timer shutDownTimer = new Timer("Shutdown Timer");
shutDownTimer.schedule(new TimerTask() { shutDownTimer.schedule(new TimerTask() {
@Override @Override
@@ -533,36 +564,18 @@ public class GameState implements Runnable {
* Checks all tokensInPlay to see if a yacht has picked one up. If so, the yacht is powered up * Checks all tokensInPlay to see if a yacht has picked one up. If so, the yacht is powered up
* in the appropriate way * in the appropriate way
* @param yacht The yacht to check for collision with a token * @param yacht The yacht to check for collision with a token
*
* @return The token collided with
*/ */
private void checkTokenPickUp(ServerYacht yacht) { private Token checkTokenPickUp(ServerYacht yacht) {
Token collidedToken = null;
for (Token token : tokensInPlay) { for (Token token : tokensInPlay) {
Double distance = GeoUtility.getDistance(token, yacht.getLocation()); Double distance = GeoUtility.getDistance(token, yacht.getLocation());
if (distance < YACHT_COLLISION_DISTANCE) { if (distance < YACHT_COLLISION_DISTANCE) {
collidedToken = token; return token;
} }
} }
if (collidedToken != null) { return null;
tokensInPlay.remove(collidedToken);
if (collidedToken.getTokenType() == TokenType.RANDOM) {
collidedToken.realiseRandom();
}
TokenType tokenType = collidedToken.getTokenType();
yacht.powerUp(tokenType);
String logMessage =
yacht.getBoatName() + " has picked up a " + collidedToken.getTokenType().getName()
+ " token";
notifyMessageListeners(
MessageFactory.makeChatterMessage(yacht.getSourceId(), logMessage));
notifyMessageListeners(MessageFactory.getRaceXML());
notifyMessageListeners(MessageFactory.makePickupMessage(yacht, collidedToken));
logger.debug("Yacht: " + yacht.getShortName() + " got powerup " + collidedToken
.getTokenType());
}
} }
@@ -1,7 +1,7 @@
package seng302.gameServer.messages; package seng302.gameServer.messages;
/** /**
* Created by wmu16 on 11/09/17. * Enum for different event types for the yacht
*/ */
public enum YachtEventType { public enum YachtEventType {
COLLISION(33), COLLISION(33),
+5 -5
View File
@@ -55,7 +55,7 @@ public class ServerYacht {
//PowerUp //PowerUp
private TokenType powerUp; private TokenType powerUp;
private Long powerUpStartTime; private Long powerUpStartTime;
private Integer powerUpSpeedMultiplier; private Double powerUpSpeedMultiplier;
private Integer powerUpHandlingMultiplier; private Integer powerUpHandlingMultiplier;
//turning mode //turning mode
@@ -80,7 +80,7 @@ public class ServerYacht {
this.legNumber = 0; this.legNumber = 0;
this.boatColor = Colors.getColor(sourceId - 1); this.boatColor = Colors.getColor(sourceId - 1);
this.powerUp = null; this.powerUp = null;
this.powerUpSpeedMultiplier = 1; this.powerUpSpeedMultiplier = 1d;
this.powerUpHandlingMultiplier = 1; this.powerUpHandlingMultiplier = 1;
this.hasEnteredRoundingZone = false; this.hasEnteredRoundingZone = false;
this.hasPassedLine = false; this.hasPassedLine = false;
@@ -137,7 +137,7 @@ public class ServerYacht {
*/ */
public void powerDown() { public void powerDown() {
this.powerUp = null; this.powerUp = null;
this.powerUpSpeedMultiplier = 1; this.powerUpSpeedMultiplier = 1d;
this.powerUpHandlingMultiplier = 1; this.powerUpHandlingMultiplier = 1;
} }
@@ -480,11 +480,11 @@ public class ServerYacht {
this.continuouslyTurning = continuouslyTurning; this.continuouslyTurning = continuouslyTurning;
} }
public Integer getPowerUpSpeedMultiplier() { public Double getPowerUpSpeedMultiplier() {
return powerUpSpeedMultiplier; return powerUpSpeedMultiplier;
} }
public void setPowerUpSpeedMultiplier(Integer powerUpSpeedMultiplier) { public void setPowerUpSpeedMultiplier(Double powerUpSpeedMultiplier) {
this.powerUpSpeedMultiplier = powerUpSpeedMultiplier; this.powerUpSpeedMultiplier = powerUpSpeedMultiplier;
} }
@@ -417,6 +417,7 @@ public class GameView3D {
public void cameraMovement(KeyEvent event) { public void cameraMovement(KeyEvent event) {
GameKeyBind keyBinds = GameKeyBind.getInstance(); GameKeyBind keyBinds = GameKeyBind.getInstance();
KeyAction keyPressed = keyBinds.getKeyAction(event.getCode()); KeyAction keyPressed = keyBinds.getKeyAction(event.getCode());
if (keyPressed != null) {
switch (keyPressed) { switch (keyPressed) {
case ZOOM_IN: case ZOOM_IN:
((RaceCamera) view.getCamera()).zoomIn(); ((RaceCamera) view.getCamera()).zoomIn();
@@ -441,6 +442,7 @@ public class GameView3D {
break; break;
} }
} }
}
private void toggleCamera() { private void toggleCamera() {
Camera currCamera = view.getCamera(); Camera currCamera = view.getCamera();
@@ -121,7 +121,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
@FXML @FXML
private Label positionLabel, boatSpeedLabel, boatHeadingLabel; private Label positionLabel, boatSpeedLabel, boatHeadingLabel;
@FXML @FXML
private ImageView velocityIcon, handlingIcon, windWalkerIcon, bumperIcon; private ImageView velocityIcon, handlingIcon, windWalkerIcon, bumperIcon, badRandomIcon;
//Race Data //Race Data
private Map<Integer, ClientYacht> participants; private Map<Integer, ClientYacht> participants;
@@ -325,6 +325,9 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
case BUMPER: case BUMPER:
iconToDisplay = bumperIcon; iconToDisplay = bumperIcon;
break; break;
case RANDOM:
iconToDisplay = badRandomIcon;
break;
default: default:
iconToDisplay = velocityIcon; iconToDisplay = velocityIcon;
} }
+54 -60
View File
@@ -25,9 +25,8 @@
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<StackPane fx:id="contentStackPane" maxHeight="1.7976931348623157E308" <StackPane fx:id="contentStackPane" maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0"
prefHeight="800.0" prefWidth="1200.0" prefWidth="1200.0" style="-fx-background-color: skyblue;" xmlns="http://javafx.com/javafx/8"
style="-fx-background-color: skyblue;" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="seng302.visualiser.controllers.RaceViewController"> fx:controller="seng302.visualiser.controllers.RaceViewController">
<children> <children>
@@ -48,17 +47,15 @@
valignment="BOTTOM" vgrow="SOMETIMES"/> valignment="BOTTOM" vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
<children> <children>
<GridPane id="timerGrid" fx:id="timerGrid" prefWidth="192.0" <GridPane id="timerGrid" fx:id="timerGrid" prefWidth="192.0" styleClass="timer">
styleClass="timer">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="50.0" minWidth="50.0" <ColumnConstraints hgrow="SOMETIMES" maxWidth="50.0" minWidth="50.0"
prefWidth="50.0"/> prefWidth="50.0"/>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="135.0" <ColumnConstraints hgrow="SOMETIMES" maxWidth="135.0" minWidth="135.0"
minWidth="135.0" prefWidth="135.0"/> prefWidth="135.0"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
<opaqueInsets> <opaqueInsets>
<Insets/> <Insets/>
@@ -90,25 +87,20 @@
</GridPane> </GridPane>
<GridPane GridPane.columnIndex="2"> <GridPane GridPane.columnIndex="2">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
prefWidth="100.0"/> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0"
prefWidth="100.0"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
</GridPane> </GridPane>
<GridPane fx:id="chatGridPane" GridPane.columnIndex="2" <GridPane fx:id="chatGridPane" GridPane.columnIndex="2" GridPane.rowIndex="2">
GridPane.rowIndex="2">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="390.0" <ColumnConstraints hgrow="SOMETIMES" maxWidth="390.0" minWidth="390.0"
minWidth="390.0" prefWidth="390.0"/> prefWidth="390.0"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="1.7976931348623157E308" <RowConstraints maxHeight="1.7976931348623157E308" vgrow="SOMETIMES"/>
vgrow="SOMETIMES"/>
<RowConstraints maxHeight="60.0" minHeight="60.0" prefHeight="60.0" <RowConstraints maxHeight="60.0" minHeight="60.0" prefHeight="60.0"
vgrow="SOMETIMES"/> vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
@@ -131,18 +123,16 @@
minWidth="90.0" prefWidth="90.0"/> minWidth="90.0" prefWidth="90.0"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="50.0" minHeight="50.0" <RowConstraints maxHeight="50.0" minHeight="50.0" prefHeight="50.0"
prefHeight="50.0" valignment="CENTER" vgrow="SOMETIMES"/> valignment="CENTER" vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
<children> <children>
<JFXButton fx:id="chatSend" alignment="CENTER" <JFXButton fx:id="chatSend" alignment="CENTER" buttonType="RAISED"
buttonType="RAISED" maxHeight="-Infinity" maxHeight="-Infinity" maxWidth="1.7976931348623157E308"
maxWidth="1.7976931348623157E308" minHeight="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="35.0"
minWidth="-Infinity" prefHeight="35.0" text="SEND" text="SEND" GridPane.columnIndex="1">
GridPane.columnIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets bottom="10.0" left="10.0" right="10.0" <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
top="10.0"/>
</GridPane.margin> </GridPane.margin>
</JFXButton> </JFXButton>
<JFXTextField fx:id="chatInput" maxHeight="35.0" <JFXTextField fx:id="chatInput" maxHeight="35.0"
@@ -168,28 +158,27 @@
prefHeight="150.0" prefWidth="240.0" GridPane.halignment="CENTER" prefHeight="150.0" prefWidth="240.0" GridPane.halignment="CENTER"
GridPane.rowIndex="2" GridPane.valignment="BOTTOM"> GridPane.rowIndex="2" GridPane.valignment="BOTTOM">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="110.0" <ColumnConstraints hgrow="SOMETIMES" maxWidth="110.0" minWidth="110.0"
minWidth="110.0" prefWidth="110.0"/> prefWidth="110.0"/>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="132.0" minWidth="10.0" <ColumnConstraints hgrow="SOMETIMES" maxWidth="132.0" minWidth="10.0"
prefWidth="132.0"/> prefWidth="132.0"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="120.0" minHeight="120.0" <RowConstraints maxHeight="120.0" minHeight="120.0" prefHeight="120.0"
prefHeight="120.0" vgrow="SOMETIMES"/> vgrow="SOMETIMES"/>
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" <RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0"
vgrow="SOMETIMES"/> vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
<children> <children>
<Label fx:id="positionLabel" text="Position:" <Label fx:id="positionLabel" text="Position:" GridPane.columnIndex="1"
GridPane.columnIndex="1" GridPane.halignment="LEFT" GridPane.halignment="LEFT" GridPane.rowSpan="2" GridPane.valignment="TOP">
GridPane.rowSpan="2" GridPane.valignment="TOP">
<padding> <padding>
<Insets bottom="5.0" left="10.0" right="5.0" top="5.0"/> <Insets bottom="5.0" left="10.0" right="5.0" top="5.0"/>
</padding> </padding>
</Label> </Label>
<Label fx:id="boatSpeedLabel" text="Boat Speed:" <Label fx:id="boatSpeedLabel" text="Boat Speed:" GridPane.columnIndex="1"
GridPane.columnIndex="1" GridPane.halignment="LEFT" GridPane.halignment="LEFT" GridPane.rowSpan="2"
GridPane.rowSpan="2" GridPane.valignment="CENTER"> GridPane.valignment="CENTER">
<opaqueInsets> <opaqueInsets>
<Insets/> <Insets/>
</opaqueInsets> </opaqueInsets>
@@ -198,8 +187,8 @@
</padding> </padding>
</Label> </Label>
<Label fx:id="boatHeadingLabel" text="Boat Heading:" <Label fx:id="boatHeadingLabel" text="Boat Heading:"
GridPane.columnIndex="1" GridPane.halignment="LEFT" GridPane.columnIndex="1" GridPane.halignment="LEFT" GridPane.rowSpan="2"
GridPane.rowSpan="2" GridPane.valignment="BOTTOM"> GridPane.valignment="BOTTOM">
<padding> <padding>
<Insets bottom="5.0" left="10.0" right="5.0" top="5.0"/> <Insets bottom="5.0" left="10.0" right="5.0" top="5.0"/>
</padding> </padding>
@@ -212,12 +201,12 @@
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="120.0" minHeight="120.0" <RowConstraints maxHeight="120.0" minHeight="120.0"
prefHeight="120.0" vgrow="SOMETIMES"/> prefHeight="120.0" vgrow="SOMETIMES"/>
<RowConstraints maxHeight="30.0" minHeight="30.0" <RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0"
prefHeight="30.0" vgrow="SOMETIMES"/> vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
<children> <children>
<ImageView fx:id="windImageView" fitHeight="92.0" <ImageView fx:id="windImageView" fitHeight="92.0" fitWidth="109.0"
fitWidth="109.0" pickOnBounds="true" preserveRatio="true" pickOnBounds="true" preserveRatio="true"
GridPane.halignment="CENTER" GridPane.rowSpan="2" GridPane.halignment="CENTER" GridPane.rowSpan="2"
GridPane.valignment="CENTER"/> GridPane.valignment="CENTER"/>
<Label fx:id="windSpeedLabel" text="0.0 Knots" <Label fx:id="windSpeedLabel" text="0.0 Knots"
@@ -246,30 +235,27 @@
</GridPane> </GridPane>
<GridPane GridPane.columnIndex="1" GridPane.rowIndex="2"> <GridPane GridPane.columnIndex="1" GridPane.rowIndex="2">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
prefWidth="100.0"/> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
prefWidth="100.0"/> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
prefWidth="100.0"/>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0"
prefWidth="100.0"/>
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" <RowConstraints maxHeight="152.0" minHeight="10.0" prefHeight="152.0"
vgrow="SOMETIMES"/> vgrow="SOMETIMES"/>
<RowConstraints minHeight="10.0" prefHeight="30.0" <RowConstraints maxHeight="118.0" minHeight="10.0" prefHeight="98.0"
vgrow="SOMETIMES"/> vgrow="SOMETIMES"/>
</rowConstraints> </rowConstraints>
<children> <children>
<ImageView fx:id="velocityIcon" fitHeight="123.0" fitWidth="139.0" <ImageView fx:id="velocityIcon" fitHeight="88.0" fitWidth="106.0"
pickOnBounds="true" preserveRatio="true" visible="false" pickOnBounds="true" preserveRatio="true" visible="false"
GridPane.halignment="CENTER" GridPane.rowIndex="1"> GridPane.halignment="CENTER" GridPane.rowIndex="1">
<image> <image>
<Image url="@../icons/velocity.png"/> <Image url="@../icons/velocity.png"/>
</image> </image>
</ImageView> </ImageView>
<ImageView fx:id="handlingIcon" fitHeight="123.0" fitWidth="139.0" <ImageView fx:id="handlingIcon" fitHeight="87.0" fitWidth="98.0"
pickOnBounds="true" preserveRatio="true" visible="false" pickOnBounds="true" preserveRatio="true" visible="false"
GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.columnIndex="1" GridPane.halignment="CENTER"
GridPane.rowIndex="1"> GridPane.rowIndex="1">
@@ -277,7 +263,7 @@
<Image url="@../icons/handlingIcon.png"/> <Image url="@../icons/handlingIcon.png"/>
</image> </image>
</ImageView> </ImageView>
<ImageView fx:id="windWalkerIcon" fitHeight="123.0" fitWidth="139.0" <ImageView fx:id="windWalkerIcon" fitHeight="83.0" fitWidth="100.0"
pickOnBounds="true" preserveRatio="true" visible="false" pickOnBounds="true" preserveRatio="true" visible="false"
GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.columnIndex="2" GridPane.halignment="CENTER"
GridPane.rowIndex="1"> GridPane.rowIndex="1">
@@ -285,7 +271,7 @@
<Image url="@../icons/windWalkerIcon.png"/> <Image url="@../icons/windWalkerIcon.png"/>
</image> </image>
</ImageView> </ImageView>
<ImageView fx:id="bumperIcon" fitHeight="123.0" fitWidth="139.0" <ImageView fx:id="bumperIcon" fitHeight="83.0" fitWidth="88.0"
pickOnBounds="true" preserveRatio="true" visible="false" pickOnBounds="true" preserveRatio="true" visible="false"
GridPane.columnIndex="3" GridPane.halignment="CENTER" GridPane.columnIndex="3" GridPane.halignment="CENTER"
GridPane.rowIndex="1"> GridPane.rowIndex="1">
@@ -293,6 +279,14 @@
<Image url="@../icons/bumperIcon.png"/> <Image url="@../icons/bumperIcon.png"/>
</image> </image>
</ImageView> </ImageView>
<ImageView fx:id="badRandomIcon" fitHeight="69.0" fitWidth="103.0"
pickOnBounds="true" preserveRatio="true" visible="false"
GridPane.columnIndex="4" GridPane.halignment="CENTER"
GridPane.rowIndex="1" GridPane.valignment="CENTER">
<image>
<Image url="@../icons/ayy_lmao.gif"/>
</image>
</ImageView>
</children> </children>
</GridPane> </GridPane>
</children> </children>