merge development into test #26
@@ -1,18 +1,11 @@
|
||||
package pp.mdga.client;
|
||||
|
||||
import com.jme3.app.SimpleApplication;
|
||||
import com.jme3.renderer.RenderManager;
|
||||
import com.simsilica.lemur.GuiGlobals;
|
||||
import pp.mdga.client.acoustic.AcousticHandler;
|
||||
import pp.mdga.client.animation.AnimationHandler;
|
||||
import com.jme3.system.AppSettings;
|
||||
import pp.mdga.client.view.*;
|
||||
import pp.mdga.game.Color;
|
||||
import pp.mdga.notification.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class MdgaApp extends SimpleApplication {
|
||||
private AnimationHandler animationHandler;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import pp.mdga.client.MdgaState;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
public class AcousticHandler {
|
||||
private MdgaApp app;
|
||||
@@ -29,8 +30,14 @@ public class AcousticHandler {
|
||||
|
||||
private ArrayList<GameSound> sounds = new ArrayList<>();
|
||||
|
||||
private Preferences prefs = Preferences.userNodeForPackage(AcousticHandler.class);
|
||||
|
||||
public AcousticHandler(MdgaApp app) {
|
||||
this.app = app;
|
||||
|
||||
mainVolume = prefs.getFloat("mainVolume", 1.0f);
|
||||
musicVolume = prefs.getFloat("musicVolume", 1.0f);
|
||||
soundVolume = prefs.getFloat("soundVolume", 1.0f);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -67,7 +74,19 @@ public void playSound(MdgaSound sound) {
|
||||
assets.add(new SoundAssetDelayVolume(SoundAsset.LOST, 1.0f, 0.0f));
|
||||
break;
|
||||
case VICTORY:
|
||||
assets.add(new SoundAssetDelayVolume(SoundAsset.VICTORY, 1.0f, 2.0f));
|
||||
assets.add(new SoundAssetDelayVolume(SoundAsset.VICTORY, 1.0f, 0.0f));
|
||||
break;
|
||||
case BUTTON_PRESSED:
|
||||
assets.add(new SoundAssetDelayVolume(SoundAsset.BUTTON_PRESS, 0.7f, 0.0f));
|
||||
break;
|
||||
case WRONG_INPUT:
|
||||
assets.add(new SoundAssetDelayVolume(SoundAsset.ERROR, 1.0f, 0.0f));
|
||||
break;
|
||||
case UI_CLICK:
|
||||
assets.add(new SoundAssetDelayVolume(SoundAsset.UI_CLICK, 0.8f, 0.0f));
|
||||
break;
|
||||
case START:
|
||||
assets.add(new SoundAssetDelayVolume(SoundAsset.START, 0.8f, 0.2f));
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -362,6 +381,7 @@ public float getSoundVolume() {
|
||||
*/
|
||||
public void setMainVolume(float mainVolume) {
|
||||
this.mainVolume = mainVolume;
|
||||
prefs.putFloat("mainVolume", mainVolume);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -371,6 +391,7 @@ public void setMainVolume(float mainVolume) {
|
||||
*/
|
||||
public void setMusicVolume(float musicVolume) {
|
||||
this.musicVolume = musicVolume;
|
||||
prefs.putFloat("musicVolume", musicVolume);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -380,6 +401,7 @@ public void setMusicVolume(float musicVolume) {
|
||||
*/
|
||||
public void setSoundVolume(float soundVolume) {
|
||||
this.soundVolume = soundVolume;
|
||||
prefs.putFloat("soundVolume", soundVolume);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,5 +19,9 @@ public enum MdgaSound {
|
||||
DESELECT,
|
||||
HURRY,
|
||||
VICTORY,
|
||||
LOST
|
||||
LOST,
|
||||
BUTTON_PRESSED,
|
||||
WRONG_INPUT,
|
||||
UI_CLICK,
|
||||
START,
|
||||
}
|
||||
|
||||
@@ -17,7 +17,11 @@ enum SoundAsset {
|
||||
DESELECT(""),
|
||||
HURRY(""),
|
||||
VICTORY("LevelUp2.wav"),
|
||||
LOST("GameOver.wav");
|
||||
LOST("GameOver.wav"),
|
||||
BUTTON_PRESS("menu_button.ogg"),
|
||||
ERROR("error_sound.ogg"),
|
||||
UI_CLICK("uiclick.ogg"),
|
||||
START("gamestart.ogg");
|
||||
|
||||
private final String path;
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
import com.simsilica.lemur.VAlignment;
|
||||
import com.simsilica.lemur.component.QuadBackgroundComponent;
|
||||
import pp.mdga.client.MdgaApp;
|
||||
import pp.mdga.client.acoustic.MdgaSound;
|
||||
|
||||
public abstract class ClickButton extends AbstractButton {
|
||||
protected final Runnable action;
|
||||
@@ -27,7 +28,7 @@ public abstract class ClickButton extends AbstractButton {
|
||||
|
||||
instance = new Button(label);
|
||||
|
||||
instance.addClickCommands((button) -> action.run());
|
||||
instance.addClickCommands((button) -> { app.getAcousticHandler().playSound(MdgaSound.BUTTON_PRESSED); action.run(); });
|
||||
instance.setTextHAlignment(HAlignment.Center);
|
||||
instance.setTextVAlignment(VAlignment.Center);
|
||||
|
||||
@@ -66,6 +67,8 @@ protected void click() {
|
||||
QuadBackgroundComponent background = new QuadBackgroundComponent(BUTTON_PRESSED);
|
||||
instance.setBackground(background);
|
||||
|
||||
app.getAcousticHandler().playSound(MdgaSound.UI_CLICK);
|
||||
|
||||
onHover();
|
||||
};
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ public AudioSettingsDialog(MdgaApp app, Node node, MdgaView view) {
|
||||
this.view = view;
|
||||
|
||||
mainVolume = new SliderButton(app, node, "Gesamt Lautstärke");
|
||||
musicVolume = new SliderButton(app, node, "Gesamt Lautstärke");
|
||||
soundVolume = new SliderButton(app, node, "Gesamt Lautstärke");
|
||||
musicVolume = new SliderButton(app, node, "Musik Lautstärke");
|
||||
soundVolume = new SliderButton(app, node, "Effekt Lautstärke");
|
||||
|
||||
backButton = new MenuButton(app, node, view::leaveAudioSettings, "Zurück");
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
import pp.mdga.client.button.MenuButton;
|
||||
import pp.mdga.client.view.MainView;
|
||||
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
public class HostDialog extends Dialog {
|
||||
private InputButton portInput;
|
||||
|
||||
@@ -17,13 +19,15 @@ public class HostDialog extends Dialog {
|
||||
|
||||
private final MainView view;
|
||||
|
||||
private Preferences prefs = Preferences.userNodeForPackage(JoinDialog.class);
|
||||
|
||||
public HostDialog(MdgaApp app, Node node, MainView view) {
|
||||
super(app, node);
|
||||
|
||||
this.view = view;
|
||||
|
||||
portInput = new InputButton(app, node, "Port: ", 5);
|
||||
portInput.setString("11111");
|
||||
portInput.setString(prefs.get("hostPort", "11111"));
|
||||
|
||||
hostButton = new ButtonRight(app, node, view::forward, "Spiel hosten", 10);
|
||||
backButton = new ButtonLeft(app, node, view::back, "Zurück", 10);
|
||||
@@ -53,10 +57,12 @@ public void update() {
|
||||
}
|
||||
|
||||
public String getPort() {
|
||||
prefs.put("hostPort", portInput.getString());
|
||||
return portInput.getString();
|
||||
}
|
||||
|
||||
public void resetPort() {
|
||||
portInput.reset();
|
||||
prefs.put("hostPort", "11111");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
import com.jme3.math.Vector2f;
|
||||
import com.jme3.scene.Node;
|
||||
import pp.mdga.client.MdgaApp;
|
||||
import pp.mdga.client.acoustic.AcousticHandler;
|
||||
import pp.mdga.client.button.ButtonLeft;
|
||||
import pp.mdga.client.button.ButtonRight;
|
||||
import pp.mdga.client.button.InputButton;
|
||||
import pp.mdga.client.button.MenuButton;
|
||||
import pp.mdga.client.view.MainView;
|
||||
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
public class JoinDialog extends Dialog {
|
||||
private InputButton ipInput;
|
||||
private InputButton portInput;
|
||||
@@ -18,6 +21,8 @@ public class JoinDialog extends Dialog {
|
||||
|
||||
private final MainView view;
|
||||
|
||||
private Preferences prefs = Preferences.userNodeForPackage(JoinDialog.class);
|
||||
|
||||
public JoinDialog(MdgaApp app, Node node, MainView view) {
|
||||
super(app, node);
|
||||
|
||||
@@ -25,7 +30,8 @@ public JoinDialog(MdgaApp app, Node node, MainView view) {
|
||||
|
||||
ipInput = new InputButton(app, node, "Ip: ", 15);
|
||||
portInput = new InputButton(app, node, "Port: ", 5);
|
||||
portInput.setString("11111");
|
||||
portInput.setString(prefs.get("joinPort", "11111"));
|
||||
ipInput.setString(prefs.get("jostIp", ""));
|
||||
|
||||
joinButton = new ButtonRight(app, node, view::forward, "Spiel beitreten", 10);
|
||||
backButton = new ButtonLeft(app, node, view::back, "Zurück", 10);
|
||||
@@ -61,18 +67,22 @@ public void update() {
|
||||
}
|
||||
|
||||
public String getIpt() {
|
||||
prefs.put("joinIp", ipInput.getString());
|
||||
return ipInput.getString();
|
||||
}
|
||||
|
||||
public void resetIp() {
|
||||
ipInput.reset();
|
||||
prefs.put("joinIp", "");
|
||||
}
|
||||
|
||||
public String getPort() {
|
||||
prefs.put("joinPort", portInput.getString());
|
||||
return portInput.getString();
|
||||
}
|
||||
|
||||
public void resetPort() {
|
||||
portInput.reset();
|
||||
prefs.put("joinPort", "11111");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import com.jme3.scene.Geometry;
|
||||
import pp.mdga.client.MdgaApp;
|
||||
import pp.mdga.client.MdgaState;
|
||||
import pp.mdga.client.acoustic.MdgaSound;
|
||||
import pp.mdga.client.button.ButtonLeft;
|
||||
import pp.mdga.client.button.ButtonRight;
|
||||
import pp.mdga.client.button.CeremonyButton;
|
||||
@@ -51,6 +52,8 @@ public void onEnter() {
|
||||
enterSub(SubState.AWARD_CEREMONY);
|
||||
|
||||
rootNode.addLight(ambient);
|
||||
|
||||
app.getAcousticHandler().playSound(MdgaSound.VICTORY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
import com.jme3.texture.Image;
|
||||
import com.jme3.texture.Texture2D;
|
||||
import pp.mdga.client.MdgaState;
|
||||
import pp.mdga.client.acoustic.MdgaSound;
|
||||
import pp.mdga.client.board.BoardHandler;
|
||||
import pp.mdga.client.board.CameraHandler;
|
||||
import pp.mdga.client.MdgaApp;
|
||||
@@ -58,6 +59,8 @@ public void onEnter() {
|
||||
cheatButton.show();
|
||||
|
||||
app.getViewPort().addProcessor(fpp);
|
||||
|
||||
app.getAcousticHandler().playSound(MdgaSound.START);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import com.jme3.asset.TextureKey;
|
||||
import com.jme3.light.AmbientLight;
|
||||
import com.jme3.math.ColorRGBA;
|
||||
import com.jme3.math.Vector3f;
|
||||
import com.jme3.renderer.Camera;
|
||||
import com.jme3.scene.Geometry;
|
||||
import com.jme3.scene.Spatial;
|
||||
@@ -49,11 +50,10 @@ public LobbyView(MdgaApp app) {
|
||||
|
||||
@Override
|
||||
public void onEnter() {
|
||||
//cam = new Camera(app.getCamera().getWidth(), app.getCamera().getHeight());
|
||||
//cam.setParallelProjection(true);
|
||||
//float aspect = (float) app.getCamera().getWidth() / app.getCamera().getHeight();
|
||||
//float size = 1.65f;
|
||||
//cam.setFrustum(-1000, 1000, -aspect * size, aspect * size, size, -size);
|
||||
app.getCamera().setParallelProjection(true);
|
||||
float aspect = (float) app.getCamera().getWidth() / app.getCamera().getHeight();
|
||||
float size = 1.65f;
|
||||
app.getCamera().setFrustum(-1000, 1000, -aspect * size, aspect * size, size, -size);
|
||||
|
||||
leaveButton.show();
|
||||
readyButton.show();
|
||||
@@ -77,6 +77,18 @@ public void onLeave() {
|
||||
cyberButton.hide();
|
||||
|
||||
rootNode.removeLight(ambient);
|
||||
|
||||
app.getCamera().setParallelProjection(false);
|
||||
|
||||
app.getCamera().setFrustumPerspective(
|
||||
45.0f,
|
||||
(float) app.getCamera().getWidth() / app.getCamera().getHeight(),
|
||||
0.1f,
|
||||
1000.0f
|
||||
);
|
||||
|
||||
app.getCamera().setLocation(new Vector3f(0, 0, 10));
|
||||
app.getCamera().lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import com.jme3.scene.Geometry;
|
||||
import pp.mdga.client.MdgaApp;
|
||||
import pp.mdga.client.MdgaState;
|
||||
import pp.mdga.client.acoustic.MdgaSound;
|
||||
import pp.mdga.client.button.ButtonRight;
|
||||
import pp.mdga.client.button.MenuButton;
|
||||
import pp.mdga.client.button.SettingsButton;
|
||||
@@ -99,7 +100,7 @@ private void tryHost() {
|
||||
if(port >= 1 && port <= 65535) {
|
||||
app.getModelSyncronizer().setName(startDialog.getName());
|
||||
app.getModelSyncronizer().setHost(port);
|
||||
//TODO: playSound
|
||||
//app.getAcousticHandler().playSound(MdgaSound.WRONG_INPUT);
|
||||
return;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
@@ -107,13 +108,44 @@ private void tryHost() {
|
||||
}
|
||||
|
||||
hostDialog.resetPort();
|
||||
//TODO: playSound
|
||||
app.getAcousticHandler().playSound(MdgaSound.WRONG_INPUT);
|
||||
}
|
||||
|
||||
private void tryJoin() {
|
||||
//TODO
|
||||
int port = 0;
|
||||
String ip = joinDialog.getIpt();
|
||||
String portText = hostDialog.getPort();
|
||||
|
||||
try {
|
||||
// Validate the port
|
||||
port = Integer.parseInt(portText);
|
||||
if (port < 1 || port > 65535) {
|
||||
throw new IllegalArgumentException("Invalid port");
|
||||
}
|
||||
|
||||
// Validate the IP address
|
||||
if (isValidIpAddress(ip)) {
|
||||
app.getModelSyncronizer().setName(startDialog.getName());
|
||||
app.getModelSyncronizer().setJoin("127.0.0.1", 1);
|
||||
app.getModelSyncronizer().setJoin(ip, port);
|
||||
return;
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
// Invalid input, fall through to reset
|
||||
}
|
||||
|
||||
hostDialog.resetPort();
|
||||
joinDialog.resetIp();
|
||||
app.getAcousticHandler().playSound(MdgaSound.WRONG_INPUT);
|
||||
}
|
||||
|
||||
private boolean isValidIpAddress(String ip) {
|
||||
String ipRegex =
|
||||
"^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\\." +
|
||||
"(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\\." +
|
||||
"(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\\." +
|
||||
"(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$";
|
||||
|
||||
return ip != null && ip.matches(ipRegex);
|
||||
}
|
||||
|
||||
private void enterSub(SubState state) {
|
||||
@@ -160,7 +192,7 @@ public void forward(boolean host) {
|
||||
case MAIN:
|
||||
if(host) {
|
||||
enterSub(SubState.HOST);
|
||||
//TODO: playSound
|
||||
//TODO playSound
|
||||
} else {
|
||||
enterSub(SubState.JOIN);
|
||||
//TODO: playSound
|
||||
|
||||
BIN
Projekte/mdga/client/src/main/resources/Sounds/error_sound.ogg
Normal file
BIN
Projekte/mdga/client/src/main/resources/Sounds/error_sound.ogg
Normal file
Binary file not shown.
BIN
Projekte/mdga/client/src/main/resources/Sounds/gamestart.ogg
Normal file
BIN
Projekte/mdga/client/src/main/resources/Sounds/gamestart.ogg
Normal file
Binary file not shown.
BIN
Projekte/mdga/client/src/main/resources/Sounds/menu_button.ogg
Normal file
BIN
Projekte/mdga/client/src/main/resources/Sounds/menu_button.ogg
Normal file
Binary file not shown.
BIN
Projekte/mdga/client/src/main/resources/Sounds/uiclick.ogg
Normal file
BIN
Projekte/mdga/client/src/main/resources/Sounds/uiclick.ogg
Normal file
Binary file not shown.
Reference in New Issue
Block a user