Gerneral improvements

This commit is contained in:
Felix Koppe
2024-12-01 13:35:14 +01:00
parent a630ade2e1
commit c3ad8fe79a
33 changed files with 280 additions and 109 deletions

View File

@@ -57,7 +57,7 @@ public void simpleInitApp() {
gameView = new GameView(this);
ceremonyView = new CeremonyView(this);
enter(MdgaState.MAIN);
enter(MdgaState.LOBBY);
}
@Override

View File

@@ -6,6 +6,7 @@
import pp.mdga.client.view.LobbyView;
import pp.mdga.game.BonusCard;
import pp.mdga.game.Color;
import pp.mdga.message.client.LobbyReadyMessage;
import pp.mdga.notification.AcquireCardNotification;
import pp.mdga.notification.DrawCardNotification;
import pp.mdga.notification.TskSelectNotification;
@@ -26,6 +27,9 @@ public class ModelSynchronizer {
this.app = app;
}
private Color testColor;
private int test = 0;
public void animationEnd() {
}
@@ -98,6 +102,7 @@ public void selectTsk(Color color) {
LOGGER.log(Level.INFO, "selectTsk: {0}", color);
LobbyView view = (LobbyView) app.getView();
view.setTaken(color, true, true, "OwnPlayerName");
testColor = color;
}
public void unselectTsk() {
@@ -115,9 +120,16 @@ public void setName(String name) {
LOGGER.log(Level.INFO, "setName: {0}", name);
}
public void setReady() {
public void setReady(boolean ready) {
LOGGER.log(Level.INFO, "setReady");
enter(MdgaState.GAME);
LobbyView view = (LobbyView) app.getView();
view.setReady(testColor, ready);
test++;
if(test > 2) {
test = 0;
enter(MdgaState.GAME);
}
}
public void setHost(int port) {

View File

@@ -59,7 +59,7 @@ private void handleLobby(Notification notification) {
if (notification instanceof TskSelectNotification n) {
//lobbyView.setTaken(n.getColor(), true, n.isSelf(), n.getName());
lobbyView.setTaken(n.getColor(), true, true, n.getName());
lobbyView.setTaken(n.getColor(), true, false, n.getName());
} else if (notification instanceof TskUnselectNotification n) {
lobbyView.setTaken(n.getColor(), false, false, null);
//} else if(notification instanceof LobbyReadyNotification lobbyReadyNotification) {

View File

@@ -4,14 +4,18 @@
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector2f;
import com.jme3.scene.Node;
import com.jme3.ui.Picture;
import pp.mdga.client.MdgaApp;
public abstract class AbstractButton {
public static final ColorRGBA BUTTON_NORMAL = ColorRGBA.fromRGBA255(169, 165, 104, 255);
public static final ColorRGBA BUTTON_NORMAL = ColorRGBA.fromRGBA255(233, 236, 239, 255);
public static final ColorRGBA BUTTON_PRESSED = ColorRGBA.fromRGBA255(105, 117, 89, 255);
public static final ColorRGBA TEXT_NORMAL = ColorRGBA.Black;
public static final ColorRGBA TEXT_PRESSED = ColorRGBA.fromRGBA255( 180, 195, 191, 255);
protected Picture pictureNormal = new Picture("normalButton");
protected Picture pictureHover = new Picture("normalButton");
public static final float HORIZONTAL = 16;
public static final float VERTICAL = 9;
@@ -35,6 +39,9 @@ public AbstractButton(MdgaApp app, Node node) {
this.app = app;
this.node = node;
pictureNormal.setImage(app.getAssetManager(), "Images/General_Button_normal.png", true);
pictureHover.setImage(app.getAssetManager(), "Images/General_Button_hover.png", true);
font = app.getAssetManager().loadFont("Fonts/Gunplay.fnt");
}

View File

@@ -3,6 +3,7 @@
import com.jme3.math.Vector2f;
import com.jme3.scene.Node;
import pp.mdga.client.MdgaApp;
import com.jme3.ui.Picture;
public class ButtonLeft extends ClickButton {
public ButtonLeft(MdgaApp app, Node node, Runnable action, String label, int narrowFactor) {

View File

@@ -38,7 +38,7 @@ public CeremonyButton(MdgaApp app, Node node, Node node3d, Color tsk, Pos pos, S
this.node3d = node3d;
label = new LabelButton(app, node, name, new Vector2f( WIDTH, 1), new Vector2f(0, 0));
label = new LabelButton(app, node, name, new Vector2f( WIDTH, 1), new Vector2f(0, 0), true);
final float mid = HORIZONTAL / 2;
final float uiSpacing = 1.4f;
@@ -96,11 +96,11 @@ public CeremonyButton(MdgaApp app, Node node, Node node3d, Color tsk, Pos pos, S
case LOST:
adjust = true;
label.adjust = true;
uiX -= 1 * uiSpacing + 0.4f;
uiX -= 2 * uiSpacing + 0.4f;
uiX -= WIDTH / 2;
uiY -= 2;
figX -= 2 * figSpacingX;
figY -= 4 * figSpacingY;
uiY -= 2.0f;
figX -= 2.5f * figSpacingX + 0.05f;
figY -= 4.5f * figSpacingY;
break;
}
@@ -112,8 +112,8 @@ public CeremonyButton(MdgaApp app, Node node, Node node3d, Color tsk, Pos pos, S
@Override
public void onHover() {
ColorRGBA buttonNormal = ColorRGBA.Gray.clone();// BUTTON_NORMAL.clone();
buttonNormal.a = 0.01f;
ColorRGBA buttonNormal = BUTTON_NORMAL.clone();
buttonNormal.a = 0.1f;
QuadBackgroundComponent background = new QuadBackgroundComponent(buttonNormal);
instance.setBackground(background);
@@ -121,8 +121,8 @@ public void onHover() {
@Override
public void onUnHover() {
ColorRGBA buttonNormal = ColorRGBA.Gray.clone();// BUTTON_NORMAL.clone();
buttonNormal.a = 0.01f;
ColorRGBA buttonNormal = BUTTON_NORMAL.clone();
buttonNormal.a = 0.1f;
QuadBackgroundComponent background = new QuadBackgroundComponent(buttonNormal);
instance.setBackground(background);

View File

@@ -3,6 +3,7 @@
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
import com.jme3.scene.Node;
import com.jme3.ui.Picture;
import com.simsilica.lemur.Button;
import com.simsilica.lemur.HAlignment;
import com.simsilica.lemur.VAlignment;
@@ -44,10 +45,12 @@ public abstract class ClickButton extends AbstractButton {
@Override
public void show() {
node.attachChild(pictureNormal);
release();
calculateRelative();
setRelative();
setImageRelative(pictureNormal);
node.attachChild(instance);
}
@@ -55,6 +58,13 @@ public void show() {
@Override
public void hide() {
node.detachChild(instance);
if(node.hasChild(pictureNormal)) {
node.detachChild(pictureNormal);
}
if(node.hasChild(pictureHover)) {
node.detachChild(pictureHover);
}
}
protected abstract void onHover();
@@ -69,6 +79,12 @@ protected void click() {
app.getAcousticHandler().playSound(MdgaSound.UI_CLICK);
if(node.hasChild(pictureNormal)) {
node.detachChild(pictureNormal);
setImageRelative(pictureHover);
node.attachChild(pictureHover);
}
onHover();
};
@@ -79,6 +95,12 @@ protected void release() {
QuadBackgroundComponent background = new QuadBackgroundComponent(BUTTON_NORMAL);
instance.setBackground(background);
if(node.hasChild(pictureHover)) {
node.detachChild(pictureHover);
setImageRelative(pictureNormal);
node.attachChild(pictureNormal);
}
onUnHover();
};
@@ -105,4 +127,21 @@ protected void setRelative() {
instance.setLocalTranslation(instance.getLocalTranslation().x, verticalMid, instance.getLocalTranslation().z);
}
}
protected void setImageRelative(Picture picture) {
if(null == picture) {
return;
}
final float LARGER = 10;
picture.setWidth(instance.getPreferredSize().x + LARGER);
picture.setHeight(instance.getPreferredSize().y + LARGER);
picture.setLocalTranslation(
instance.getLocalTranslation().x - LARGER / 2,
(instance.getLocalTranslation().y - picture.getHeight()) + LARGER / 2,
instance.getLocalTranslation().z + 0.01f
);
}
}

View File

@@ -10,16 +10,26 @@ public class LabelButton extends ClickButton{
private ColorRGBA text = TEXT_NORMAL;
private ColorRGBA button = BUTTON_NORMAL;
public LabelButton(MdgaApp app, Node node, String label, Vector2f size, Vector2f pos) {
private boolean isButton;
public LabelButton(MdgaApp app, Node node, String label, Vector2f size, Vector2f pos, boolean isButton) {
super(app, node, () -> {}, label, size, pos);
this.isButton = isButton;
pictureHover = pictureNormal;
}
@Override
public void show() {
if(isButton) {
node.attachChild(pictureNormal);
}
release();
calculateRelative();
setRelative();
setImageRelative(pictureNormal);
instance.setFontSize(fontSize / 2);
@@ -29,6 +39,13 @@ public void show() {
@Override
public void hide() {
node.detachChild(instance);
if(node.hasChild(pictureNormal)) {
node.detachChild(pictureNormal);
}
if(node.hasChild(pictureHover)) {
node.detachChild(pictureHover);
}
}
@Override

View File

@@ -7,8 +7,11 @@
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
import com.jme3.renderer.queue.RenderQueue;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Quad;
import com.jme3.texture.Texture;
import com.simsilica.lemur.component.QuadBackgroundComponent;
import pp.mdga.client.Asset;
import pp.mdga.client.MdgaApp;
@@ -21,11 +24,13 @@ public enum Taken {
OTHER,
}
static final ColorRGBA LOBBY_TAKEN = ColorRGBA.fromRGBA255(193,58,59, 25);
static final ColorRGBA LOBBY_READY = ColorRGBA.fromRGBA255(55,172,190, 25);
static final ColorRGBA LOBBY_READY_HOVER = ColorRGBA.fromRGBA255(17,211,218, 25);
static final ColorRGBA LOBBY_SELF_NORMAL = ColorRGBA.fromRGBA255(34,103,24, 25);
static final ColorRGBA LOBBY_SELF_HOVER = ColorRGBA.fromRGBA255(42,151,19, 25);
static final ColorRGBA LOBBY_TAKEN = ColorRGBA.fromRGBA255(193,58,59, 100);
static final ColorRGBA LOBBY_READY = ColorRGBA.fromRGBA255(55,172,190, 100);
static final ColorRGBA LOBBY_READY_HOVER = ColorRGBA.fromRGBA255(17,211,218, 100);
static final ColorRGBA LOBBY_SELF_NORMAL = ColorRGBA.fromRGBA255(0,151,19, 100);
static final ColorRGBA LOBBY_SELF_HOVER = ColorRGBA.fromRGBA255(0,230,19, 100);
static final float WIDTH = 4.0f;
@@ -46,7 +51,7 @@ public LobbyButton(MdgaApp app, Node node, Node node3d, Runnable action, Color t
this.node3d = node3d;
label = new LabelButton(app, node, "- leer -", new Vector2f( WIDTH, 1), new Vector2f(0, 0));
label = new LabelButton(app, node, "- leer -", new Vector2f( WIDTH, 1), new Vector2f(0, 0), true);
final float mid = HORIZONTAL / 2;
final float uiSpacing = 0.4f;
@@ -123,11 +128,11 @@ public void onHover() {
@Override
public void onUnHover() {
ColorRGBA buttonNormal = ColorRGBA.Gray.clone();// BUTTON_NORMAL.clone();
ColorRGBA buttonNormal = BUTTON_NORMAL.clone();
switch (taken) {
case NOT:
buttonNormal.a = 0.1f;
buttonNormal.a = 0.3f;
break;
case SELF:
buttonNormal = LOBBY_SELF_NORMAL;

View File

@@ -14,21 +14,36 @@ public SettingsButton(MdgaApp app, Node node, Runnable action) {
super(app, node, action, "", new Vector2f(2, 2), new Vector2f(HORIZONTAL - 0.5f, VERTICAL - 0.5f));
adjust = true;
}
icon = new IconComponent("Images/zahnrad.png");
icon.setIconScale(0.1f * app.getImageScale());
icon.setHAlignment(HAlignment.Center);
icon.setVAlignment(VAlignment.Center);
instance.setIcon(icon);
@Override
public void show() {
release();
calculateRelative();
setRelative();
setImageRelative(pictureNormal);
node.attachChild(instance);
}
@Override
public void onHover() {
icon = new IconComponent("Images/Settings_Button_hover.png");
icon.setIconScale(0.02f * app.getImageScale());
icon.setHAlignment(HAlignment.Center);
icon.setVAlignment(VAlignment.Center);
instance.setIcon(icon);
}
@Override
public void onUnHover() {
icon = new IconComponent("Images/Settings_Button_normal.png");
icon.setIconScale(0.02f * app.getImageScale());
icon.setHAlignment(HAlignment.Center);
icon.setVAlignment(VAlignment.Center);
instance.setIcon(icon);
}
}

View File

@@ -29,19 +29,17 @@ public AudioSettingsDialog(MdgaApp app, Node node, MdgaView view) {
backButton = new MenuButton(app, node, view::leaveAudioSettings, "Zurück");
float offset = 1.0f;
float offset = 2.8f;
mainVolume.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.75f;
offset += 1.0f;
musicVolume.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.75f;
offset += 1.0f;
soundVolume.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.75f * 1.3f;
backButton.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.75f;
backButton.setPos(new Vector2f(0, 1.8f));
}
@Override

View File

@@ -45,19 +45,19 @@ public void addStatisticsRow(String name, int v1, int v2, int v3, int v4, int v5
ArrayList<LabelButton> row = new ArrayList<>();
Vector2f sizeSmall = new Vector2f(4, 1.2f);
row.add(new LabelButton(app, node, name, sizeSmall, new Vector2f()));
row.add(new LabelButton(app, node, "" + v1, sizeSmall, new Vector2f()));
row.add(new LabelButton(app, node, "" + v2, sizeSmall, new Vector2f()));
row.add(new LabelButton(app, node, "" + v3, sizeSmall, new Vector2f()));
row.add(new LabelButton(app, node, "" + v4, sizeSmall, new Vector2f()));
row.add(new LabelButton(app, node, "" + v5, sizeSmall, new Vector2f()));
row.add(new LabelButton(app, node, "" + v6, sizeSmall, new Vector2f()));
row.add(new LabelButton(app, node, name, sizeSmall, new Vector2f(), true));
row.add(new LabelButton(app, node, "" + v1, sizeSmall, new Vector2f(), false));
row.add(new LabelButton(app, node, "" + v2, sizeSmall, new Vector2f(), false));
row.add(new LabelButton(app, node, "" + v3, sizeSmall, new Vector2f(), false));
row.add(new LabelButton(app, node, "" + v4, sizeSmall, new Vector2f(), false));
row.add(new LabelButton(app, node, "" + v5, sizeSmall, new Vector2f(), false));
row.add(new LabelButton(app, node, "" + v6, sizeSmall, new Vector2f(), false));
ColorRGBA colorText = AbstractButton.TEXT_NORMAL.clone();
colorText.a = 0.1f;
colorText.a = 0.2f;
ColorRGBA colorButton = AbstractButton.BUTTON_NORMAL.clone();
colorButton.a = 0.1f;
colorButton.a = 0.2f;
int j = 0;
for (LabelButton b : row) {
@@ -83,13 +83,13 @@ public void prepare() {
ArrayList<LabelButton> first = new ArrayList<>();
Vector2f size = new Vector2f(4, 1.2f);
first.add(new LabelButton(app, node, "", size, new Vector2f()));
first.add(new LabelButton(app, node, "Figuren geworfen", size, new Vector2f()));
first.add(new LabelButton(app, node, "Figuren verloren", size, new Vector2f()));
first.add(new LabelButton(app, node, "Verwendete Bonuskarten", size, new Vector2f()));
first.add(new LabelButton(app, node, "Gewürfelte 6en", size, new Vector2f()));
first.add(new LabelButton(app, node, "Gelaufene Felder", size, new Vector2f()));
first.add(new LabelButton(app, node, "Bonusfeldern erreicht", size, new Vector2f()));
first.add(new LabelButton(app, node, "", size, new Vector2f(), true));
first.add(new LabelButton(app, node, "Figuren geworfen", size, new Vector2f(), true));
first.add(new LabelButton(app, node, "Figuren verloren", size, new Vector2f(), true));
first.add(new LabelButton(app, node, "Gespielte Bonuskarten", size, new Vector2f(), true));
first.add(new LabelButton(app, node, "Gewürfelte 6en", size, new Vector2f(), true));
first.add(new LabelButton(app, node, "Gelaufene Felder", size, new Vector2f(), true));
first.add(new LabelButton(app, node, "Bonusfeldern erreicht", size, new Vector2f(), true));
float offsetY = 0.5f;

View File

@@ -32,7 +32,7 @@ public HostDialog(MdgaApp app, Node node, MainView view) {
hostButton = new ButtonRight(app, node, view::forward, "Spiel hosten", 10);
backButton = new ButtonLeft(app, node, view::back, "Zurück", 10);
float offset = 3.0f;
float offset = 2.8f;
portInput.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.5f;

View File

@@ -36,7 +36,7 @@ public JoinDialog(MdgaApp app, Node node, MainView view) {
joinButton = new ButtonRight(app, node, view::forward, "Spiel beitreten", 10);
backButton = new ButtonLeft(app, node, view::back, "Zurück", 10);
float offset = 3.0f;
float offset = 2.8f;
ipInput.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.5f;

View File

@@ -24,16 +24,14 @@ public SettingsDialog(MdgaApp app, Node node, MdgaView view) {
audioButton = new MenuButton(app, node, view::enterAudioSettings, "Audio");
backButton = new MenuButton(app, node, view::leaveSettings, "Zurück");
float offset = 2.0f;
float offset = 2.8f;
videoButton.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.25f;
audioButton.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.25f;
backButton.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.25f;
backButton.setPos(new Vector2f(0, 1.8f));
}
@Override

View File

@@ -34,10 +34,10 @@ public StartDialog(MdgaApp app, Node node, MainView view) {
joinButton = new MenuButton(app, node, () -> view.forward(false), "Spiel beitreten");
endButton = new MenuButton(app, node, app::stop, "Spiel beenden");
float offset = 2.0f;
float offset = 2.8f;
nameInput.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.5f;
offset += 1.15f;
hostButton.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.25f;
@@ -45,8 +45,7 @@ public StartDialog(MdgaApp app, Node node, MainView view) {
joinButton.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.25f;
endButton.setPos(new Vector2f(0, MenuButton.VERTICAL -offset));
offset += 1.25f;
endButton.setPos(new Vector2f(0, 1.8f));
}
@Override

View File

@@ -20,10 +20,9 @@ public VideoSettingsDialog(MdgaApp app, Node node, MdgaView view) {
backButton = new MenuButton(app, node, view::leaveVideoSettings, "Zurück");
float offset = 2.0f;
float offset = 2.8f;
backButton.setPos(new Vector2f(0, MenuButton.VERTICAL - offset));
offset += 1.25f;
backButton.setPos(new Vector2f(0, 1.8f));
}
@Override

View File

@@ -1,8 +1,13 @@
package pp.mdga.client.view;
import com.jme3.asset.TextureKey;
import com.jme3.light.AmbientLight;
import com.jme3.material.Material;
import com.jme3.material.RenderState;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Quad;
import com.jme3.texture.Texture;
import pp.mdga.client.MdgaApp;
import pp.mdga.client.MdgaState;
import pp.mdga.client.acoustic.MdgaSound;
@@ -23,6 +28,7 @@ private enum SubState {
private SubState state;
private Geometry background;
private Geometry podest;
private ButtonLeft backButton;
private ButtonRight continueButton;
@@ -48,11 +54,48 @@ public CeremonyView(MdgaApp app) {
@Override
public void onEnter() {
enterSub(SubState.AWARD_CEREMONY);
rootNode.addLight(ambient);
app.getAcousticHandler().playSound(MdgaSound.VICTORY);
float screenWidth = app.getCamera().getWidth();
float screenHeight = app.getCamera().getHeight();
float aspectRatio = screenWidth / screenHeight;
float scale = 3.5f;
float distanceFromCamera = 5f;
float verticalSize = (float) (2 * Math.tan(Math.toRadians(app.getCamera().getFov() / 2)) * distanceFromCamera * scale);
float horizontalSize = verticalSize * aspectRatio;
Quad backgroundQuad = new Quad(horizontalSize, verticalSize);
background = new Geometry("LobbyBackground", backgroundQuad);
TextureKey backgroundKey = new TextureKey("Images/lobby.png", true);
Texture backgroundTexture = app.getAssetManager().loadTexture(backgroundKey);
Material backgroundMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
backgroundMaterial.setTexture("ColorMap", backgroundTexture);
background.setMaterial(backgroundMaterial);
background.setLocalTranslation(-horizontalSize / 2, -verticalSize / 2, -distanceFromCamera);
rootNode.attachChild(background);
verticalSize *= 0.99f;
Quad overlayQuad = new Quad(horizontalSize, verticalSize * 0.8f);
podest = new Geometry("TransparentOverlay", overlayQuad);
TextureKey overlayKey = new TextureKey("Images/Ceremony.png", true);
Texture overlayTexture = app.getAssetManager().loadTexture(overlayKey);
Material overlayMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
overlayMaterial.setTexture("ColorMap", overlayTexture);
overlayMaterial.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha);
podest.setMaterial(overlayMaterial);
float overlayDistance = distanceFromCamera - 0.1f;
podest.setLocalTranslation(-horizontalSize / 2, -verticalSize * 0.415f, -overlayDistance);
enterSub(SubState.AWARD_CEREMONY);
}
@Override
@@ -69,14 +112,20 @@ public void onLeave() {
rootNode.removeLight(ambient);
ceremonyDialog.prepare();
rootNode.detachChild(background);
}
@Override
protected void onEnterOverlay(Overlay overlay) {
if(rootNode.hasChild(podest)) {
rootNode.detachChild(podest);
}
}
@Override
protected void onLeaveOverlay(Overlay overlay) {
enterSub(state);
}
@Override
@@ -89,6 +138,8 @@ protected void onUpdate(float tpf) {
private void awardCeremony() {
continueButton.show();
rootNode.attachChild(podest);
for (CeremonyButton c : ceremonyButtons) {
c.show();
}
@@ -106,6 +157,10 @@ private void statistics() {
private void enterSub(SubState state) {
this.state = state;
if(rootNode.hasChild(podest)) {
rootNode.detachChild(podest);
}
backButton.hide();
continueButton.hide();
for (CeremonyButton c : ceremonyButtons) {
@@ -113,10 +168,6 @@ private void enterSub(SubState state) {
}
ceremonyDialog.hide();
if(null != background) {
guiNode.detachChild(background);
}
switch (state) {
case AWARD_CEREMONY:
awardCeremony();

View File

@@ -1,18 +1,6 @@
package pp.mdga.client.view;
import com.jme3.input.KeyInput;
import com.jme3.input.MouseInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.input.controls.MouseButtonTrigger;
import com.jme3.post.FilterPostProcessor;
import com.jme3.post.filters.ComposeFilter;
import com.jme3.renderer.ViewPort;
import com.jme3.shadow.DirectionalLightShadowFilter;
import com.jme3.shadow.EdgeFilteringMode;
import com.jme3.texture.FrameBuffer;
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;
@@ -20,14 +8,9 @@
import pp.mdga.client.MdgaApp;
import pp.mdga.client.button.ButtonLeft;
import pp.mdga.client.button.ButtonRight;
import pp.mdga.client.button.SettingsButton;
import pp.mdga.client.gui.GuiHandler;
import pp.mdga.game.Color;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class GameView extends MdgaView {
private BoardHandler boardHandler;
private CameraHandler camera;
@@ -45,8 +28,8 @@ public class GameView extends MdgaView {
public GameView(MdgaApp app) {
super(app);
cheatButton = new ButtonRight(app, settingsNode, () -> app.getModelSynchronize().enter(MdgaState.CEREMONY), "CHEAT", 1);
leaveButton = new ButtonLeft(app, settingsNode, () -> app.getModelSynchronize().leave(), "Spiel verlassen", 1);
cheatButton = new ButtonRight(app, overlayNode, () -> app.getModelSynchronize().enter(MdgaState.CEREMONY), "CHEAT", 1);
leaveButton = new ButtonLeft(app, overlayNode, () -> app.getModelSynchronize().leave(), "Spiel verlassen", 1);
confirmButton = new ButtonRight(app, guiNode, () -> app.getModelSynchronize().confirm(), "Bestätigen", 1);
@@ -74,6 +57,8 @@ public void onLeave() {
boardHandler.shutdown();
guiHandler.shutdown();
confirmButton.hide();
app.getViewPort().removeProcessor(fpp);
}

View File

@@ -2,11 +2,13 @@
import com.jme3.asset.TextureKey;
import com.jme3.light.AmbientLight;
import com.jme3.material.Material;
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;
import com.jme3.scene.shape.Quad;
import com.jme3.texture.Texture;
import com.jme3.util.SkyFactory;
import pp.mdga.client.MdgaApp;
@@ -30,14 +32,13 @@ public class LobbyView extends MdgaView {
private AmbientLight ambient = new AmbientLight();
private boolean isReady = false;
private Color own = null;
public LobbyView(MdgaApp app) {
super(app);
//TextureKey key = new TextureKey("lobby.png", false);
//Texture skyTexture = app.getAssetManager().loadTexture(key);
//Spatial sky = SkyFactory.createSky(app.getAssetManager(), skyTexture, SkyFactory.EnvMapType.SphereMap);
//rootNode.attachChild(sky);
leaveButton = new ButtonLeft(app, guiNode, this::leaveLobby, "Verlassen", 1);
readyButton = new ButtonRight(app, guiNode, this::ready, "Bereit", 1);
@@ -65,6 +66,28 @@ public void onEnter() {
navyButton.show();
rootNode.addLight(ambient);
float screenWidth = app.getCamera().getWidth();
float screenHeight = app.getCamera().getHeight();
float aspectRatio = screenWidth / screenHeight;
float scale = 3.5f;
float quadWidth = scale * aspectRatio;
float quadHeight = scale;
Quad quad = new Quad(quadWidth, quadHeight);
background = new Geometry("LobbyBackground", quad);
TextureKey key = new TextureKey("Images/lobby.png", true);
Texture texture = app.getAssetManager().loadTexture(key);
Material material = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
material.setTexture("ColorMap", texture);
background.setMaterial(material);
background.setLocalTranslation(-quadWidth / 2, -quadHeight / 2, -5);
rootNode.attachChild(background);
}
@Override
@@ -100,6 +123,8 @@ public void onLeave() {
armyButton.setTaken(LobbyButton.Taken.NOT, null);
navyButton.setTaken(LobbyButton.Taken.NOT, null);
cyberButton.setTaken(LobbyButton.Taken.NOT, null);
rootNode.detachChild(background);
}
@Override
@@ -126,11 +151,16 @@ public void setTaken(Color color, boolean isTaken, boolean isSelf, String name)
if(isTaken) {
if(isSelf) {
own = color;
taken = LobbyButton.Taken.SELF;
} else {
taken = LobbyButton.Taken.OTHER;
}
} else {
if(isSelf) {
own = null;
}
taken = LobbyButton.Taken.NOT;
}
@@ -160,6 +190,10 @@ public void setReady(Color color, boolean isReady) {
button.setReady(isReady);
if (button.getTaken() == LobbyButton.Taken.SELF) {
this.isReady = isReady;
}
if(!isReady) {
app.getAcousticHandler().playSound(MdgaSound.NOT_READY);
} else {
@@ -200,9 +234,17 @@ private void toggleTsk(Color color) {
}
}
private void ready() {
app.getModelSynchronize().setReady();
app.getAcousticHandler().playSound(MdgaSound.SELF_READY);
public void ready() {
if(own == null) {
app.getAcousticHandler().playSound(MdgaSound.WRONG_INPUT);
return;
}
if(!isReady) {
app.getAcousticHandler().playSound(MdgaSound.SELF_READY);
}
app.getModelSynchronize().setReady(!isReady);
}
private void leaveLobby() {

View File

@@ -28,11 +28,12 @@ public MainView(MdgaApp app) {
startDialog = new StartDialog(app, guiNode, this);
joinDialog = new JoinDialog(app, guiNode, this);
hostDialog = new HostDialog(app, guiNode, this);
background = createBackground("Images/startmenu.png");
}
@Override
public void onEnter() {
background = createBackground("Images/main.png");
guiNode.attachChild(background);
enterSub(SubState.MAIN);
@@ -56,13 +57,14 @@ public void onUpdate(float tpf) {
@Override
protected void onEnterOverlay(Overlay overlay) {
guiNode.detachChild(background);
overlayNode.attachChild(background);
}
@Override
protected void onLeaveOverlay(Overlay overlay)
{
protected void onLeaveOverlay(Overlay overlay) {
overlayNode.detachChild(background);
guiNode.attachChild(background);
}
private void joinMenu() {

View File

@@ -2,7 +2,6 @@
import com.jme3.asset.TextureKey;
import com.jme3.material.Material;
import com.jme3.math.Vector2f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.shape.Quad;
@@ -23,7 +22,7 @@ public enum Overlay {
protected MdgaApp app;
protected Node rootNode = new Node();
protected Node guiNode = new Node();
protected Node settingsNode = new Node();
protected Node overlayNode = new Node();
private SettingsButton settingsButton;
@@ -37,9 +36,9 @@ public MdgaView(MdgaApp app) {
this.app = app;
settingsButton = new SettingsButton(app, guiNode, this::enterSettings);
settingsDialog = new SettingsDialog(app, settingsNode, this);
videoSettingsDialog = new VideoSettingsDialog(app, settingsNode, this);
audioSettingsDialog = new AudioSettingsDialog(app, settingsNode, this);
settingsDialog = new SettingsDialog(app, overlayNode, this);
videoSettingsDialog = new VideoSettingsDialog(app, overlayNode, this);
audioSettingsDialog = new AudioSettingsDialog(app, overlayNode, this);
}
public void enter() {
@@ -109,7 +108,8 @@ protected Geometry createBackground(String texturePath) {
public void enterSettings() {
enterOverlay(Overlay.SETTINGS);
app.getGuiNode().attachChild(settingsNode);
app.getGuiNode().attachChild(overlayNode);
settingsDialog.show();
settingsDepth++;
@@ -118,7 +118,8 @@ public void enterSettings() {
public void leaveSettings() {
leaveOverlay(Overlay.SETTINGS);
app.getGuiNode().detachChild(settingsNode);
app.getGuiNode().detachChild(overlayNode);
settingsDialog.hide();
settingsDepth--;
@@ -176,7 +177,7 @@ public void pressForward() {
}
if(this instanceof LobbyView lobbyView) {
app.getAcousticHandler().playSound(MdgaSound.WRONG_INPUT);
lobbyView.ready();
}
if(this instanceof GameView gameView) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1016 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB