diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index 84e9c3bb..9720d563 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -216,93 +216,66 @@ public class RaceViewController extends Controller { * Create speedometer */ private void initialiseSpeedometer() { - - - /** - * Create the Medusa Gauge with most of it's options - */ + //Create the Medusa Gauge gauge = GaugeBuilder.create() - .prefSize(200,200) // Set the preferred size of the control - // Related to Foreground Elements - .foregroundBaseColor(Color.WHITE) // Defines a color for title, subtitle, unit, value, tick label, tick mark, major tick mark, medium tick mark and minor tick mark - // Related to Title Text - .title("Title") // Set the text for the title - // Related to Sub Title Text - .subTitle("Speed") // Set the text for the subtitle - // Related to Unit Text - .unit("Knots") // Set the text for the unit - // Related to Value Text - .decimals(2) // Set the number of decimals for the value/lcd text - // Related to LCD - .lcdVisible(true) // Display a LCD instead of the plain value text - .lcdDesign(LcdDesign.STANDARD) // Set the design for the LCD - .lcdFont(LcdFont.DIGITAL_BOLD) // Set the font for the LCD (STANDARD, LCD, SLIM, DIGITAL_BOLD, ELEKTRA) - // Related to scale - .scaleDirection(Gauge.ScaleDirection.CLOCKWISE) // Define the direction of the Scale (CLOCKWISE, COUNTER_CLOCKWISE) - .minValue(0) // Set the start value of the scale - .maxValue(50) // Set the end value of the scale - .startAngle(320) // Set the start angle of your scale (bottom -> 0, direction -> CCW) - .angleRange(280) // Set the angle range of your scale starting from the start angle - // Related to Tick Labels - .tickLabelDecimals(0) // Set the number of decimals for the tick labels - .tickLabelLocation(TickLabelLocation.INSIDE) // Define wether the tick labels should be inside or outside the scale (INSIDE, OUTSIDE) - .tickLabelOrientation(TickLabelOrientation.ORTHOGONAL) // Define the orientation of the tick labels (ORTHOGONAL, HORIZONTAL, TANGENT) - .onlyFirstAndLastTickLabelVisible(false) // Define if only the first and last tick label should be visible - .tickLabelSectionsVisible(false) // Define if sections for tick labels should be visible - .tickLabelColor(Color.BLACK) // Define the color for tick labels (overriden by tick label sections) - // Related to Tick Marks - .tickMarkSectionsVisible(false) // Define if sections for tick marks should be visible - .majorTickMarksVisible(true) // Define if major tick marks should be visible - .majorTickMarkType(TickMarkType.TRAPEZOID) // Define the tick mark type for major tick marks (LINE, DOT, TRAPEZOID, TICK_LABEL) - // Related to Medium Tick Marks - .mediumTickMarksVisible(false) // Define if medium tick marks should be visible - .mediumTickMarkType(TickMarkType.LINE) // Define the tick mark type for medium tick marks (LINE, DOT, TRAPEZOID) - // Related to Minor Tick Marks - .minorTickMarksVisible(true) // Define if minor tick marks should be visible - .minorTickMarkType(TickMarkType.LINE) // Define the tick mark type for minor tick marks (LINE, DOT, TRAPEZOID) - // Related to LED - .ledVisible(false) // Defines if the LED should be visible - .ledType(Gauge.LedType.STANDARD) // Defines the type of the LED (STANDARD, FLAT) - .ledColor(Color.rgb(255, 200, 0)) // Defines the color of the LED - .ledBlinking(false) // Defines if the LED should blink - // Related to Needle - .needleShape(Gauge.NeedleShape.ANGLED) // Defines the shape of the needle (ANGLED, ROUND, FLAT) - .needleSize(Gauge.NeedleSize.STANDARD) // Defines the size of the needle (THIN, STANDARD, THICK) - .needleColor(Color.CRIMSON) // Defines the color of the needle - // Related to Needle behavior - .startFromZero(false) // Defines if the needle should start from the 0 value - .returnToZero(false) // Defines if the needle should always return to the 0 value (only makes sense when animated==true) - // Related to Knob - .knobType(Gauge.KnobType.METAL) // Defines the type for the center knob (STANDARD, PLAIN, METAL, FLAT) - .knobColor(Color.LIGHTGRAY) // Defines the color that should be used for the center knob - .interactive(false) // Defines if it should be possible to press the center knob - .onButtonPressed(buttonEvent -> System.out.println("Knob pressed")) // Defines a handler that will be triggered when the center knob was pressed - .onButtonReleased(buttonEvent -> System.out.println("Knob released")) // Defines a handler that will be triggered when the center knob was released - // Related to Threshold - .thresholdVisible(true) // Defines if the threshold indicator should be visible - .threshold(50) // Defines the value for the threshold - .thresholdColor(Color.RED) // Defines the color for the threshold - .checkThreshold(true) // Defines if each value should be checked against the threshold - .onThresholdExceeded(thresholdEvent -> System.out.println("Threshold exceeded")) // Defines a handler that will be triggered if checkThreshold==true and the threshold is exceeded - .onThresholdUnderrun(thresholdEvent -> System.out.println("Threshold underrun")) // Defines a handler that will be triggered if checkThreshold==true and the threshold is underrun - // Related to Gradient Bar - .gradientBarEnabled(true) // Defines if a gradient filled bar should be visible to visualize a range - .gradientBarStops(new Stop(0.0, Color.BLUE),// Defines a conical color gradient that will be use to color the gradient bar + .prefSize(200,200) + .foregroundBaseColor(Color.WHITE) + .title("Title") + .subTitle("Speed") + .unit("Knots") + .decimals(2) + .lcdVisible(true) + .lcdDesign(LcdDesign.STANDARD) + .lcdFont(LcdFont.DIGITAL_BOLD) + .scaleDirection(Gauge.ScaleDirection.CLOCKWISE) + .minValue(0) + .maxValue(50) + .startAngle(320) + .angleRange(280) + .tickLabelDecimals(0) + .tickLabelLocation(TickLabelLocation.INSIDE) + .tickLabelOrientation(TickLabelOrientation.ORTHOGONAL) + .onlyFirstAndLastTickLabelVisible(false) + .tickLabelSectionsVisible(false) + .tickLabelColor(Color.BLACK) + .tickMarkSectionsVisible(false) + .majorTickMarksVisible(true) + .majorTickMarkType(TickMarkType.TRAPEZOID) + .mediumTickMarksVisible(false) + .mediumTickMarkType(TickMarkType.LINE) + .minorTickMarksVisible(true) + .minorTickMarkType(TickMarkType.LINE) + .ledVisible(false) + .ledType(Gauge.LedType.STANDARD) + .ledColor(Color.rgb(255, 200, 0)) + .ledBlinking(false) + .needleShape(Gauge.NeedleShape.ANGLED) + .needleSize(Gauge.NeedleSize.STANDARD) + .needleColor(Color.CRIMSON) + .startFromZero(false) + .returnToZero(false) + .knobType(Gauge.KnobType.METAL) + .knobColor(Color.LIGHTGRAY) + .interactive(false) + .onButtonPressed(buttonEvent -> System.out.println("Knob pressed")) + .onButtonReleased(buttonEvent -> System.out.println("Knob released")) + .thresholdVisible(true) + .threshold(50) + .thresholdColor(Color.RED) + .checkThreshold(true) + .onThresholdExceeded(thresholdEvent -> System.out.println("Threshold exceeded")) + .onThresholdUnderrun(thresholdEvent -> System.out.println("Threshold underrun")) + .gradientBarEnabled(true) + .gradientBarStops(new Stop(0.0, Color.BLUE), new Stop(0.25, Color.CYAN), new Stop(0.5, Color.LIME), new Stop(0.75, Color.YELLOW), new Stop(1.0, Color.RED)) - // Related to Markers - .markersVisible(true) // Defines if markers will be visible - //.markers(marker1, marker2) // Defines markers that will be drawn - // Related to Value - //.animated(true) // Defines if the needle will be animated - //.animationDuration(500) // Defines the speed of the needle in milliseconds (10 - 10000 ms) + .markersVisible(true) .build(); - /** - * Create a gauge with a frame and background that utilizes a Medusa gauge - */ + + //Create a gauge with a frame and background that utilizes a Medusa gauge fGauge = FGaugeBuilder .create() .prefSize(200, 200) @@ -312,7 +285,6 @@ public class RaceViewController extends Controller { .foregroundVisible(true) .build(); speedPane.getChildren().add(fGauge); - //(event -> gauge.setValue(raceState.getBoat(raceState.getPlayerBoatID()).getCurrentSpeed())); } @@ -841,21 +813,26 @@ public class RaceViewController extends Controller { }.start(); } + /** + * Animation timer loop for the speedometer + */ private void speedometerLoop(){ new AnimationTimer(){ @Override public void handle(long arg0){ if (raceState.getRaceStatusEnum() == RaceStatusEnum.FINISHED) { stop(); // stop the timer - } else { try { + //Set the current speed value of the boat gauge.setValue(raceState.getBoat(raceState.getPlayerBoatID()).getCurrentSpeed()); fGauge.getGauge().setValue(raceState.getBoat(raceState.getPlayerBoatID()).getCurrentSpeed()); - //Thread.sleep(50); + + //Create list with sorted boat placements List boatList = boatInfoTable.getItems(); for (VisualiserBoat boat : boatList){ if(raceState.getPlayerBoatID()==boat.getSourceID()){ + //Set boat current placement value as title of speedometer gauge.titleProperty().setValue("Position: " + (boatInfoTable.getItems().indexOf(boat)+1)); fGauge.getGauge().titleProperty().setValue("Position: " + (boatInfoTable.getItems().indexOf(boat)+1)); }