Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,34 @@ public class AudioControlsComponent {

/** Volume types supported by the audio system. */
public enum VolumeType {
MUSIC, // background music
SFX // sound effects
MUSIC {
@Override
double getVolume(Settings settings) {
return settings.getVolume();
}

@Override
void updateVolume(Settings settings, double volume) {
AudioManager.getInstance().setVolume(volume);
settings.setVolume(volume);
}
},
SFX {
@Override
double getVolume(Settings settings) {
return settings.getSfxVolume();
}

@Override
void updateVolume(Settings settings, double volume) {
AudioManager.getInstance().setSfxVolume(volume);
settings.setSfxVolume(volume);
}
};

abstract double getVolume(Settings settings);

abstract void updateVolume(Settings settings, double volume);
}

/**
Expand Down Expand Up @@ -76,8 +102,7 @@ public static VBox createVolumeControl(VolumeType type, Settings settings) {
public static Slider createVolumeSlider(VolumeType type, Settings settings, Double maxWidth) {
Slider slider = new Slider(SLIDER_MIN, SLIDER_MAX, SLIDER_MAX);

double initialValue =
(type == VolumeType.MUSIC) ? settings.getVolume() : settings.getSfxVolume();
double initialValue = type.getVolume(settings);
slider.adjustValue(initialValue);
slider.setBlockIncrement(SLIDER_INCREMENT);

Expand All @@ -103,8 +128,7 @@ public static Slider createVolumeSlider(VolumeType type, Settings settings) {
* @return Label that shows volume percentage
*/
public static Label createVolumeLabel(Slider slider, VolumeType type, Settings settings) {
double initialVolume =
(type == VolumeType.MUSIC) ? settings.getVolume() : settings.getSfxVolume();
double initialVolume = type.getVolume(settings);

Label label = new Label(String.format(LABEL_FORMAT, initialVolume * 100));
label.setStyle("-fx-text-fill: #61C181;");
Expand Down Expand Up @@ -148,13 +172,7 @@ private static void attachVolumeListener(
(observable, oldValue, newValue) -> {
double volume = newValue.doubleValue();

if (type == VolumeType.MUSIC) {
AudioManager.getInstance().setVolume(volume);
settings.setVolume(volume);
} else {
AudioManager.getInstance().setSfxVolume(volume);
settings.setSfxVolume(volume);
}
type.updateVolume(settings, volume);

SettingsProvider.saveSettings(settings);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* SPDX-FileCopyrightText: 2026 jvondermarck
* SPDX-License-Identifier: MIT
*/

package com.dinosaur.dinosaurexploder.components;

import static org.junit.jupiter.api.Assertions.assertEquals;

import com.dinosaur.dinosaurexploder.model.Settings;
import org.junit.jupiter.api.Test;

class AudioControlsComponentTest {

@Test
void volumeTypesReadTheirConfiguredSettings() {
Settings settings = new Settings();
settings.setVolume(0.25);
settings.setSfxVolume(0.75);

assertEquals(0.25, AudioControlsComponent.VolumeType.MUSIC.getVolume(settings));
assertEquals(0.75, AudioControlsComponent.VolumeType.SFX.getVolume(settings));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package com.dinosaur.dinosaurexploder.components;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;

import com.dinosaur.dinosaurexploder.constants.GameMode;
import com.dinosaur.dinosaurexploder.model.GameData;
Expand Down Expand Up @@ -57,4 +58,24 @@ void shouldRemoveLegacyKeyPrefixFromTranslatedActionLabels() {
assertEquals("Shoot", GameControlsComponent.formatActionLabel("SPACE: Shoot"));
assertEquals("Move spaceship up", GameControlsComponent.formatActionLabel("Move spaceship up"));
}

@Test
void shouldGenerateControlsDialogTextWithoutTrailingNewline() {
String controlsText = GameControlsComponent.generateControlsDialogText();

assertFalse(controlsText.endsWith("\n"));
}

@Test
void shouldReturnAllControlTextsInDisplayOrder() {
String[] controlTexts = GameControlsComponent.getAllControlTexts();

assertEquals(GameControlsComponent.ControlType.values().length, controlTexts.length);
assertEquals(
GameControlsComponent.getControlText(GameControlsComponent.ControlType.MOVE_UP),
controlTexts[0]);
assertEquals(
GameControlsComponent.getControlText(GameControlsComponent.ControlType.SHIELD),
controlTexts[controlTexts.length - 1]);
}
}