Compare commits
3 Commits
reworkedGu
...
14c68f55d9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14c68f55d9 | ||
|
|
392a81b2d8 | ||
|
|
944b6b674e |
@@ -3,6 +3,7 @@
|
||||
// https://github.com/jMonkeyEngine-Contributions/Lemur/wiki/Styling
|
||||
|
||||
import com.jme3.math.ColorRGBA
|
||||
import com.jme3.texture.Texture
|
||||
import com.simsilica.lemur.*
|
||||
import com.simsilica.lemur.component.QuadBackgroundComponent
|
||||
import com.simsilica.lemur.Button
|
||||
@@ -47,6 +48,23 @@ def orangeBorder = TbtQuadBackgroundComponent.create(
|
||||
1f, false)
|
||||
orangeBorder.color = color(1, 0.5, 0, 1) // Orange color
|
||||
|
||||
|
||||
def createCustomBackground(app) {
|
||||
// Load the texture from the assets
|
||||
Texture texture = app.getAssetManager().loadTexture("Pictures/kontobg.png")
|
||||
|
||||
// Create the TbtQuadBackgroundComponent
|
||||
def backgroundCustom = TbtQuadBackgroundComponent.create(
|
||||
texture, // The texture to use
|
||||
1, 1, 1, // Insets for the 9-patch behavior
|
||||
126, 126, // The size of the texture
|
||||
1f, // The scale factor
|
||||
false // No tiling
|
||||
)
|
||||
|
||||
return backgroundCustom
|
||||
}
|
||||
|
||||
selector("pp") {
|
||||
font = font("Interface/Fonts/Metropolis/Metropolis-Regular-32.fnt")
|
||||
}
|
||||
@@ -366,3 +384,12 @@ selector("button-toolbar", "pp") {
|
||||
}
|
||||
|
||||
|
||||
selector("button-toolbar2", "pp") {
|
||||
insets = new Insets3f(3, 3, 3, 3) // Adjust the border thickness
|
||||
textHAlignment = HAlignment.Center
|
||||
textVAlignment = VAlignment.Center
|
||||
buttonCommands = stdButtonCommandsToolbar
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -13,14 +13,13 @@ import com.jme3.asset.AssetLoadException;
|
||||
import com.jme3.asset.AssetNotFoundException;
|
||||
import com.jme3.audio.AudioData;
|
||||
import com.jme3.audio.AudioNode;
|
||||
|
||||
/**
|
||||
* Handles the background and secondary music in the game.
|
||||
* Allows playing, stopping, and toggling between background music and a secondary track.
|
||||
*/
|
||||
public class GameMusic extends AbstractAppState {
|
||||
private static final Logger LOGGER = System.getLogger(GameMusic.class.getName());
|
||||
private static final Preferences PREFERENCES = getPreferences(GameMusic.class);
|
||||
private static final Logger LOGGER = System.getLogger(pp.monopoly.client.GameMusic.class.getName());
|
||||
private static final Preferences PREFERENCES = getPreferences(pp.monopoly.client.GameMusic.class);
|
||||
private static final String ENABLED_PREF = "enabled"; // NON-NLS
|
||||
private static final String VOLUME_PREF = "volume"; // NON-NLS
|
||||
|
||||
@@ -68,8 +67,9 @@ public class GameMusic extends AbstractAppState {
|
||||
|
||||
/**
|
||||
* Plays the main music.
|
||||
|
||||
*/
|
||||
private void playMainMusic() {
|
||||
public void playMainMusic() {
|
||||
if (!isEnabled()) {
|
||||
return; // Sound is disabled
|
||||
}
|
||||
@@ -92,11 +92,10 @@ public class GameMusic extends AbstractAppState {
|
||||
/**
|
||||
* Plays the secondary music and stops the main music.
|
||||
*
|
||||
* @param app The application instance
|
||||
* @param secondaryMusicFile The file path of the secondary audio file
|
||||
*/
|
||||
private void playSecondaryMusic() {
|
||||
if(!isEnabled()) {
|
||||
public void playSecondaryMusic() {
|
||||
if (!isEnabled()) {
|
||||
stopAllMusic();
|
||||
return;
|
||||
}
|
||||
if (isSecondaryMusicPlaying) {
|
||||
@@ -115,7 +114,7 @@ public class GameMusic extends AbstractAppState {
|
||||
/**
|
||||
* Stops the secondary music.
|
||||
*/
|
||||
private void stopSecondaryMusic() {
|
||||
public void stopSecondaryMusic() {
|
||||
if (secondaryMusic != null && isSecondaryMusicPlaying) {
|
||||
secondaryMusic.stop();
|
||||
isSecondaryMusicPlaying = false;
|
||||
@@ -127,17 +126,17 @@ public class GameMusic extends AbstractAppState {
|
||||
* If the secondary track is playing, it stops and resumes the background music.
|
||||
* If the background music is playing, it pauses and plays the secondary track.
|
||||
*
|
||||
* @param app The application instance
|
||||
* @param secondaryMusicFile The file path of the secondary audio file
|
||||
*/
|
||||
public void toggleMusic() {
|
||||
if(!isEnabled()) {
|
||||
if (!isEnabled()) {
|
||||
stopAllMusic();
|
||||
return;
|
||||
}
|
||||
if (isSecondaryMusicPlaying) {
|
||||
stopSecondaryMusic();
|
||||
playMainMusic();
|
||||
} else {
|
||||
stopMainMusic();
|
||||
playSecondaryMusic();
|
||||
}
|
||||
}
|
||||
@@ -153,6 +152,14 @@ public class GameMusic extends AbstractAppState {
|
||||
PREFERENCES.putFloat(VOLUME_PREF, vol);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops all music (both main and secondary).
|
||||
*/
|
||||
public void stopAllMusic() {
|
||||
stopMainMusic();
|
||||
stopSecondaryMusic();
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables or disables the sound system.
|
||||
* When disabled, all music stops.
|
||||
@@ -161,13 +168,14 @@ public class GameMusic extends AbstractAppState {
|
||||
*/
|
||||
@Override
|
||||
public void setEnabled(boolean enabled) {
|
||||
if (isEnabled() == enabled) return;
|
||||
if (isEnabled() == enabled) return; // Avoid redundant operations
|
||||
|
||||
PREFERENCES.putBoolean(ENABLED_PREF, enabled);
|
||||
|
||||
if (enabled) {
|
||||
playMainMusic();
|
||||
} else {
|
||||
stopMainMusic();
|
||||
stopSecondaryMusic();
|
||||
stopAllMusic();
|
||||
}
|
||||
|
||||
super.setEnabled(enabled);
|
||||
|
||||
@@ -79,8 +79,9 @@ public class LobbyMenu extends Dialog {
|
||||
this.app = app;
|
||||
|
||||
GameMusic music = app.getStateManager().getState(GameMusic.class);
|
||||
music.toggleMusic();
|
||||
|
||||
if (music != null && music.isEnabled()) {
|
||||
music.playSecondaryMusic();
|
||||
}
|
||||
playerInputField = new TextField("Spieler "+(app.getId()+1));
|
||||
// Hintergrundbild laden und hinzufügen
|
||||
addBackgroundImage();
|
||||
@@ -276,6 +277,12 @@ public class LobbyMenu extends Dialog {
|
||||
new SettingsMenu(app).open();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the menu at regular intervals.
|
||||
* Checks if the dropdown selection has been updated and invokes the selection change handler.
|
||||
*
|
||||
* @param tpf Time per frame, in seconds, since the last update.
|
||||
*/
|
||||
@Override
|
||||
public void update(float tpf) {
|
||||
if (selectionRef.update()) {
|
||||
@@ -283,10 +290,27 @@ public class LobbyMenu extends Dialog {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the current menu and transitions music playback.
|
||||
* Stops the secondary music (if playing) and resumes the main background music
|
||||
* if music is enabled in the preferences. Ensures smooth transitions in audio.
|
||||
*/
|
||||
@Override
|
||||
public void close() {
|
||||
GameMusic music = app.getStateManager().getState(GameMusic.class);
|
||||
if (music != null) {
|
||||
music.stopSecondaryMusic();
|
||||
if (music.isEnabled()) {
|
||||
music.playMainMusic();
|
||||
}
|
||||
}
|
||||
super.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the selected figure based on the dropdown menu selection.
|
||||
*
|
||||
* @param selected the selected figure
|
||||
* @param selector the selected figure
|
||||
*/
|
||||
private void onDropdownSelectionChanged(Selector<String> selector) {
|
||||
app.getGameLogic().playSound(Sound.BUTTON);
|
||||
|
||||
@@ -51,7 +51,17 @@ public class SettingsMenu extends Dialog {
|
||||
private final SoundSlider soundSlider;
|
||||
|
||||
/**
|
||||
* Constructs the Menu dialog for the Battleship application.
|
||||
* Checkbox for toggling sound effects.
|
||||
*/
|
||||
private final Checkbox soundCheckbox;
|
||||
|
||||
/**
|
||||
* Checkbox for toggling background music.
|
||||
*/
|
||||
private final Checkbox musicCheckbox;
|
||||
|
||||
/**
|
||||
* Constructs the Menu dialog for the Monopoly application.
|
||||
*
|
||||
* @param app the MonopolyApp instance
|
||||
*/
|
||||
@@ -65,10 +75,14 @@ public class SettingsMenu extends Dialog {
|
||||
|
||||
addChild(soundSlider);
|
||||
|
||||
addChild(new Checkbox("Soundeffekte an / aus", new StateCheckboxModel(app, GameSound.class)));
|
||||
soundCheckbox = new Checkbox("Soundeffekte an / aus", new StateCheckboxModel(app, GameSound.class));
|
||||
addChild(soundCheckbox);
|
||||
|
||||
addChild(new Label("Hintergrund Musik", new ElementId("label"))); //NON-NLS
|
||||
addChild(new Checkbox("Musik an / aus", new StateCheckboxModel(app, GameMusic.class)));
|
||||
|
||||
musicCheckbox = new Checkbox("Musik an / aus", new StateCheckboxModel(app, GameMusic.class));
|
||||
musicCheckbox.addClickCommands(s -> toggleMusicPreference());
|
||||
addChild(musicCheckbox);
|
||||
|
||||
addChild(musicSlider);
|
||||
|
||||
@@ -84,16 +98,42 @@ public class SettingsMenu extends Dialog {
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the state of the load and save buttons based on the game logic.
|
||||
* Toggles the music preference based on the state of the musicCheckbox.
|
||||
* Enables or disables background music and starts playback if enabled.
|
||||
*/
|
||||
private void toggleMusicPreference() {
|
||||
boolean enabled = musicCheckbox.isChecked();
|
||||
GameMusic gameMusic = app.getStateManager().getState(GameMusic.class);
|
||||
if (gameMusic != null) {
|
||||
gameMusic.setEnabled(enabled);
|
||||
if (enabled) {
|
||||
gameMusic.playMainMusic();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the state of the music checkbox to match the current preferences.
|
||||
* This ensures the checkbox reflects the actual enabled/disabled state of the music.
|
||||
*/
|
||||
@Override
|
||||
public void update() {
|
||||
GameMusic gameMusic = app.getStateManager().getState(GameMusic.class);
|
||||
if (gameMusic != null) {
|
||||
musicCheckbox.setChecked(gameMusic.isEnabled());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates UI elements such as sliders and synchronizes the state of the settings menu.
|
||||
*
|
||||
* @param delta the time in seconds since the last update
|
||||
*/
|
||||
@Override
|
||||
public void update(float delta) {
|
||||
musicSlider.update();
|
||||
soundSlider.update();
|
||||
update();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -257,7 +257,7 @@ public class Toolbar extends Dialog implements GameEventListener {
|
||||
}
|
||||
|
||||
private Button createPropertyMenuButton() {
|
||||
propertyMenuButton = new Button("", new ElementId("button-toolbar"));
|
||||
propertyMenuButton = new Button("", new ElementId("button-toolbar2"));
|
||||
propertyMenuButton.setPreferredSize(new Vector3f(150, 50, 0));
|
||||
|
||||
String iconBuildingPath = "icons/icon-gebaude.png";
|
||||
|
||||
@@ -40,8 +40,8 @@ public class BuyHouse extends Dialog {
|
||||
/** Background container providing a border for the popup. */
|
||||
private final Container backgroundContainer;
|
||||
|
||||
/** TextField to display selected properties. */
|
||||
private TextField selectionDisplay;
|
||||
/** Label to display selected properties. */
|
||||
private Label selectionDisplay;
|
||||
|
||||
/** Reference for tracking dropdown selection changes. */
|
||||
private VersionedReference<Set<Integer>> selectionRef;
|
||||
@@ -162,7 +162,7 @@ public class BuyHouse extends Dialog {
|
||||
selectionRef = propertySelector.getSelectionModel().createReference();
|
||||
|
||||
// Initialize the selection display here
|
||||
selectionDisplay = new TextField(""); // Create TextField for displaying selections
|
||||
selectionDisplay = new Label("");
|
||||
selectionDisplay.setPreferredSize(new Vector3f(300, 30, 0));
|
||||
dropdownContainer.addChild(selectionDisplay); // Add it to the dropdown container
|
||||
|
||||
|
||||
@@ -45,8 +45,8 @@ public class RepayMortage extends Dialog {
|
||||
/** Background container providing a border for the popup. */
|
||||
private final Container backgroundContainer;
|
||||
|
||||
/** Text field to display selected properties. */
|
||||
private TextField selectionDisplay;
|
||||
/** Label to display selected properties. */
|
||||
private Label selectionDisplay;
|
||||
|
||||
/** Reference to track property selections in the dropdown menu. */
|
||||
private VersionedReference<Set<Integer>> selectionRef;
|
||||
@@ -166,7 +166,7 @@ public class RepayMortage extends Dialog {
|
||||
selectionRef = propertySelector.getSelectionModel().createReference();
|
||||
|
||||
// Initialize the selection display here
|
||||
selectionDisplay = new TextField(""); // Create TextField for displaying selections
|
||||
selectionDisplay = new Label(""); // Create TextField for displaying selections
|
||||
selectionDisplay.setPreferredSize(new Vector3f(300, 30, 0));
|
||||
dropdownContainer.addChild(selectionDisplay); // Add it to the dropdown container
|
||||
|
||||
|
||||
@@ -45,8 +45,8 @@ public class SellHouse extends Dialog {
|
||||
/** Background container providing a styled border around the main dialog. */
|
||||
private final Container backgroundContainer;
|
||||
|
||||
/** Text field to display selected properties. */
|
||||
private TextField selectionDisplay;
|
||||
/** Label to display selected properties. */
|
||||
private Label selectionDisplay;
|
||||
|
||||
/** Reference to track selection changes in the property selector. */
|
||||
private VersionedReference<Set<Integer>> selectionRef;
|
||||
@@ -86,7 +86,7 @@ public class SellHouse extends Dialog {
|
||||
title.setFontSize(48);
|
||||
title.setColor(ColorRGBA.Black);
|
||||
|
||||
//Unterteilund des sellHouseContainer in drei "Untercontainer"
|
||||
//Unterteilung des sellHouseContainer in drei "Untercontainer"
|
||||
Container upContainer = sellhouseContainer.addChild(new Container());
|
||||
Container middleContainer = sellhouseContainer.addChild(new Container());
|
||||
Container downContainer = sellhouseContainer.addChild(new Container());
|
||||
@@ -172,7 +172,7 @@ public class SellHouse extends Dialog {
|
||||
selectionRef = propertySelector.getSelectionModel().createReference();
|
||||
|
||||
// Initialize the selection display here
|
||||
selectionDisplay = new TextField(""); // Create TextField for displaying selections
|
||||
selectionDisplay = new Label("");
|
||||
selectionDisplay.setPreferredSize(new Vector3f(300, 30, 0));
|
||||
dropdownContainer.addChild(selectionDisplay); // Add it to the dropdown container
|
||||
|
||||
|
||||
@@ -46,8 +46,8 @@ public class TakeMortage extends Dialog {
|
||||
/** Background container providing a styled border around the main dialog. */
|
||||
private final Container backgroundContainer;
|
||||
|
||||
/** Text field to display selected properties. */
|
||||
private TextField selectionDisplay;
|
||||
/** Label to display selected properties. */
|
||||
private Label selectionDisplay;
|
||||
|
||||
/** Reference to track selection changes in the property selector. */
|
||||
private VersionedReference<Set<Integer>> selectionRef;
|
||||
@@ -172,7 +172,7 @@ public class TakeMortage extends Dialog {
|
||||
selectionRef = propertySelector.getSelectionModel().createReference();
|
||||
|
||||
// Initialize the selection display here
|
||||
selectionDisplay = new TextField(""); // Create TextField for displaying selections
|
||||
selectionDisplay = new Label(""); // Create TextField for displaying selections
|
||||
selectionDisplay.setPreferredSize(new Vector3f(300, 30, 0));
|
||||
dropdownContainer.addChild(selectionDisplay); // Add it to the dropdown container
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 195 KiB |
|
After Width: | Height: | Size: 205 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 193 KiB |
|
After Width: | Height: | Size: 198 KiB |
|
After Width: | Height: | Size: 201 KiB |
|
After Width: | Height: | Size: 7.1 KiB |