Add host&join menu and work on modelSyncronizer
This commit is contained in:
		@@ -3,17 +3,18 @@
 | 
			
		||||
import com.jme3.app.SimpleApplication;
 | 
			
		||||
import com.simsilica.lemur.GuiGlobals;
 | 
			
		||||
import pp.mdga.client.acoustic.AcousticHandler;
 | 
			
		||||
import pp.mdga.client.acoustic.MdgaSound;
 | 
			
		||||
import pp.mdga.client.animation.AnimationHandler;
 | 
			
		||||
import com.jme3.system.AppSettings;
 | 
			
		||||
import pp.mdga.client.board.BoardHandler;
 | 
			
		||||
import pp.mdga.client.view.*;
 | 
			
		||||
import pp.mdga.game.Color;
 | 
			
		||||
import pp.mdga.notification.TskSelectNotification;
 | 
			
		||||
 | 
			
		||||
public class MdgaApp extends SimpleApplication {
 | 
			
		||||
    private AnimationHandler animationHandler;
 | 
			
		||||
    private AcousticHandler acousticHandler;
 | 
			
		||||
    private NotificationSynchronizer notificationSynchronizer;
 | 
			
		||||
    private InputSyncronizer inputSyncronizer;
 | 
			
		||||
    private ModelSyncronizer modelSyncronizer;
 | 
			
		||||
 | 
			
		||||
    MdgaView view = null;
 | 
			
		||||
    private MdgaState state = MdgaState.MAIN;
 | 
			
		||||
@@ -45,6 +46,7 @@ public void simpleInitApp() {
 | 
			
		||||
        acousticHandler = new AcousticHandler(this);
 | 
			
		||||
        notificationSynchronizer = new NotificationSynchronizer(this);
 | 
			
		||||
        inputSyncronizer = new InputSyncronizer(this);
 | 
			
		||||
        modelSyncronizer = new ModelSyncronizer(this);
 | 
			
		||||
 | 
			
		||||
        inputManager.deleteMapping("SIMPLEAPP_Exit");
 | 
			
		||||
        GuiGlobals.initialize(this);
 | 
			
		||||
@@ -57,6 +59,7 @@ public void simpleUpdate(float tpf) {
 | 
			
		||||
        inputSyncronizer.update();
 | 
			
		||||
        view.update();
 | 
			
		||||
        acousticHandler.update();
 | 
			
		||||
        notificationSynchronizer.update();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void enter(MdgaState state) {
 | 
			
		||||
@@ -88,6 +91,10 @@ public void enter(MdgaState state) {
 | 
			
		||||
        view.enter();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void afteGameCleanup() {
 | 
			
		||||
        //TODO
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public AnimationHandler getAnimationHandler() {
 | 
			
		||||
        return animationHandler;
 | 
			
		||||
    }
 | 
			
		||||
@@ -99,10 +106,14 @@ public AcousticHandler getAcousticHandler() {
 | 
			
		||||
    public MdgaState getState() {return state; }
 | 
			
		||||
 | 
			
		||||
    public float getResolutionFactor() {
 | 
			
		||||
        return  resolutionFactor;
 | 
			
		||||
        return resolutionFactor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public MdgaView getView() {
 | 
			
		||||
        return  view;
 | 
			
		||||
        return view;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ModelSyncronizer getModelSyncronizer() {
 | 
			
		||||
        return modelSyncronizer;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,72 @@
 | 
			
		||||
package pp.mdga.client;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.client.view.LobbyView;
 | 
			
		||||
import pp.mdga.game.Color;
 | 
			
		||||
 | 
			
		||||
public class ModelSyncronizer {
 | 
			
		||||
    private MdgaApp app;
 | 
			
		||||
 | 
			
		||||
    ModelSyncronizer(MdgaApp app) {
 | 
			
		||||
        this.app = app;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectPiece() {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("selectPiece");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectCard() {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("selectCard");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectTsk(Color color) {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("selectTsk: " + color);
 | 
			
		||||
        LobbyView view = (LobbyView) app.getView();
 | 
			
		||||
        view.setTaken(color, true, true, "OwnPlayerName");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void unselectTsk() {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("unselectTsk");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void rolledDice() {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("rolledDice");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setName() {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("setName");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setReady() {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("setReady");
 | 
			
		||||
        app.enter(MdgaState.GAME);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHost(int port) {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("setHost: " + port);
 | 
			
		||||
        app.enter(MdgaState.LOBBY);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setJoin(String ip, int port) {
 | 
			
		||||
        //TODO call from somewhere
 | 
			
		||||
        System.out.println("setJoin");
 | 
			
		||||
        app.enter(MdgaState.LOBBY);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void leave() {
 | 
			
		||||
        System.out.println("leave");
 | 
			
		||||
        app.enter(MdgaState.MAIN);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void enter(MdgaState state) {
 | 
			
		||||
        System.out.println("enter:" + state);
 | 
			
		||||
        app.enter(state);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package pp.mdga.client;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.client.view.GameView;
 | 
			
		||||
import pp.mdga.client.view.LobbyView;
 | 
			
		||||
import pp.mdga.notification.*;
 | 
			
		||||
 | 
			
		||||
@@ -8,12 +9,17 @@
 | 
			
		||||
public class NotificationSynchronizer {
 | 
			
		||||
    private final MdgaApp app;
 | 
			
		||||
 | 
			
		||||
    private ArrayList<Notification> notifications = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    NotificationSynchronizer(MdgaApp app) {
 | 
			
		||||
        this.app = app;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void update() {
 | 
			
		||||
        ArrayList<Notification> notifications = new ArrayList<>();
 | 
			
		||||
    public void addTestNotification(Notification n) {
 | 
			
		||||
        notifications.add(n);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void update() {
 | 
			
		||||
        //TODO fetch model notifications
 | 
			
		||||
 | 
			
		||||
        for (Notification n : notifications) {
 | 
			
		||||
@@ -45,14 +51,14 @@ private void handleMain(Notification notification) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void handleLobby(Notification notification) {
 | 
			
		||||
        LobbyView view = (LobbyView) app.getView();
 | 
			
		||||
        LobbyView lobbyView = (LobbyView) app.getView();
 | 
			
		||||
 | 
			
		||||
        if (notification instanceof TskSelectNotification) {
 | 
			
		||||
            TskSelectNotification n = (TskSelectNotification)notification;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            lobbyView.setTaken(n.getColor(), true, n.isSelf(), n.getName());
 | 
			
		||||
        } else if (notification instanceof TskUnselectNotification) {
 | 
			
		||||
 | 
			
		||||
            TskUnselectNotification n = (TskUnselectNotification)notification;
 | 
			
		||||
            lobbyView.setTaken(n.getColor(), false, false, null);
 | 
			
		||||
        } else if (notification instanceof GameNotification) {
 | 
			
		||||
            app.enter(MdgaState.GAME);
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -61,6 +67,8 @@ private void handleLobby(Notification notification) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void handleGame(Notification notification) {
 | 
			
		||||
        GameView gameView = (GameView) app.getView();
 | 
			
		||||
 | 
			
		||||
        if (notification instanceof AcquireCardNotification) {
 | 
			
		||||
            // Handle AcquireCardNotification
 | 
			
		||||
        } else if (notification instanceof ActivePlayerNotification) {
 | 
			
		||||
@@ -74,15 +82,19 @@ private void handleGame(Notification notification) {
 | 
			
		||||
        } else if (notification instanceof DrawCardNotification) {
 | 
			
		||||
            // Handle DrawCardNotification
 | 
			
		||||
        } else if (notification instanceof HomeMoveNotification) {
 | 
			
		||||
            // Handle HomeMoveNotification
 | 
			
		||||
            HomeMoveNotification n = (HomeMoveNotification)notification;
 | 
			
		||||
            gameView.getBoardHandler().moveHomePiece(n.getPieceId(), n.getHomeIndex());
 | 
			
		||||
        } else if (notification instanceof InterruptNotification) {
 | 
			
		||||
            // Handle InterruptNotification
 | 
			
		||||
        } else if (notification instanceof MovePieceNotification) {
 | 
			
		||||
            // Handle MovePieceNotification
 | 
			
		||||
            MovePieceNotification n = (MovePieceNotification)notification;
 | 
			
		||||
            //gameView.getBoardHandler().movePiece(n.get); //TODO
 | 
			
		||||
        } else if (notification instanceof MoveThrowPieceNotification) {
 | 
			
		||||
            // Handle MoveThrowPieceNotification
 | 
			
		||||
            MoveThrowPieceNotification n = (MoveThrowPieceNotification)notification;
 | 
			
		||||
            //gameView.getBoardHandler().throwPiece(n.); //TODO
 | 
			
		||||
        } else if (notification instanceof NoShieldNotification) {
 | 
			
		||||
            // Handle NoShieldNotification
 | 
			
		||||
            NoShieldNotification n = (NoShieldNotification)notification;
 | 
			
		||||
            gameView.getBoardHandler().unshieldPiece(n.getPieceId());
 | 
			
		||||
        } else if (notification instanceof PieceInGameNotification) {
 | 
			
		||||
            // Handle PieceInGameNotification
 | 
			
		||||
        } else if (notification instanceof PlayCardNotification) {
 | 
			
		||||
@@ -98,11 +110,13 @@ private void handleGame(Notification notification) {
 | 
			
		||||
        } else if (notification instanceof SelectablePiecesNotification) {
 | 
			
		||||
            // Handle SelectablePiecesNotification
 | 
			
		||||
        } else if (notification instanceof ShieldActiveNotification) {
 | 
			
		||||
            // Handle ShieldActiveNotification
 | 
			
		||||
            ShieldActiveNotification n = (ShieldActiveNotification)notification;
 | 
			
		||||
            gameView.getBoardHandler().shieldPiece(n.getPieceId());
 | 
			
		||||
        } else if (notification instanceof ShieldSuppressedNotification) {
 | 
			
		||||
            // Handle ShieldSuppressedNotification
 | 
			
		||||
            ShieldSuppressedNotification n = (ShieldSuppressedNotification)notification;
 | 
			
		||||
            gameView.getBoardHandler().suppressShield(n.getPieceId());
 | 
			
		||||
        } else if (notification instanceof StartDialogNotification) {
 | 
			
		||||
            // Handle StartDialogNotification
 | 
			
		||||
            app.enter(MdgaState.MAIN);
 | 
			
		||||
        } else if (notification instanceof SwapPieceNotification) {
 | 
			
		||||
            // Handle SwapPieceNotification
 | 
			
		||||
        } else if (notification instanceof WaitMoveNotification) {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,143 @@
 | 
			
		||||
package pp.mdga.client.dialog;
 | 
			
		||||
 | 
			
		||||
import com.jme3.math.ColorRGBA;
 | 
			
		||||
import com.jme3.math.Vector3f;
 | 
			
		||||
import com.jme3.scene.Node;
 | 
			
		||||
import com.jme3.texture.Texture;
 | 
			
		||||
import com.simsilica.lemur.*;
 | 
			
		||||
import com.simsilica.lemur.component.QuadBackgroundComponent;
 | 
			
		||||
import com.simsilica.lemur.component.SpringGridLayout;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
 | 
			
		||||
public class HostDialog extends Dialog {
 | 
			
		||||
    private TextField portInput;
 | 
			
		||||
 | 
			
		||||
    public HostDialog(MdgaApp app, Node node, Runnable backAction) {
 | 
			
		||||
        super(app, node);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent quad1 = new QuadBackgroundComponent(ColorRGBA.Gray);
 | 
			
		||||
        quad1.setMargin(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor());
 | 
			
		||||
        container.setBackground(quad1);
 | 
			
		||||
 | 
			
		||||
        Texture texture = app.getAssetManager().loadTexture("mdga_logo.png");
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent b = new QuadBackgroundComponent(texture);
 | 
			
		||||
 | 
			
		||||
        Panel imagePanel = new Panel();
 | 
			
		||||
        imagePanel.setBackground(b);
 | 
			
		||||
 | 
			
		||||
        container.addChild(imagePanel).setPreferredSize(new Vector3f(texture.getImage().getWidth() / 4, texture.getImage().getHeight() / 4, 0));
 | 
			
		||||
 | 
			
		||||
        //abstandshalter
 | 
			
		||||
        container.addChild(new Panel(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor(), ColorRGBA.Gray));
 | 
			
		||||
 | 
			
		||||
        createTextField();
 | 
			
		||||
 | 
			
		||||
        //abstandshalter
 | 
			
		||||
        container.addChild(new Panel(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor(), ColorRGBA.Gray));
 | 
			
		||||
 | 
			
		||||
        Container sub = new Container(new SpringGridLayout(Axis.X, Axis.Y));
 | 
			
		||||
 | 
			
		||||
        createButton(sub, "Abbrechen", backAction, new Vector3f(170 * app.getResolutionFactor(), 60 * app.getResolutionFactor(), 0));
 | 
			
		||||
 | 
			
		||||
        sub.addChild(new Panel(40 * app.getResolutionFactor(), 0 * app.getResolutionFactor(), ColorRGBA.Gray));
 | 
			
		||||
 | 
			
		||||
        createButton(sub, "Starten", () -> tryStart(), new Vector3f(170 * app.getResolutionFactor(), 60 * app.getResolutionFactor(), 0));
 | 
			
		||||
 | 
			
		||||
        container.addChild(sub);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void tryStart() {
 | 
			
		||||
        if (null == portInput.getText()) {
 | 
			
		||||
            portInput.setText("");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        int port = 0;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            port = Integer.parseInt(portInput.getText());
 | 
			
		||||
        } catch (NumberFormatException e) {
 | 
			
		||||
            portInput.setText("");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(port >= 1 && port <= 65535) {
 | 
			
		||||
            app.getModelSyncronizer().setHost(port);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        portInput.setText("");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void show() {
 | 
			
		||||
        super.show();
 | 
			
		||||
 | 
			
		||||
        container.setLocalTranslation(
 | 
			
		||||
            app.getCamera().getWidth() / 2 - container.getPreferredSize().x / 2,
 | 
			
		||||
            app.getCamera().getHeight() / 2 + container.getPreferredSize().y / 2,
 | 
			
		||||
            0
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void hide() {
 | 
			
		||||
        super.hide();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void createTextField() {
 | 
			
		||||
        Container subContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y));
 | 
			
		||||
 | 
			
		||||
        Label nameLabel = new Label("Port:\t");
 | 
			
		||||
        nameLabel.setFontSize(fontSize);
 | 
			
		||||
        nameLabel.setColor(ColorRGBA.Black);
 | 
			
		||||
 | 
			
		||||
        portInput = new TextField("");
 | 
			
		||||
 | 
			
		||||
        portInput.setColor(ColorRGBA.Black);
 | 
			
		||||
        portInput.setTextHAlignment(HAlignment.Left);
 | 
			
		||||
        portInput.setFontSize(fontSize);
 | 
			
		||||
        portInput.setSingleLine(true);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent grayBackground = new QuadBackgroundComponent(ColorRGBA.DarkGray);
 | 
			
		||||
        portInput.setBackground(grayBackground);
 | 
			
		||||
 | 
			
		||||
        subContainer.addChild(nameLabel);
 | 
			
		||||
        subContainer.addChild(portInput);
 | 
			
		||||
 | 
			
		||||
        container.addChild(subContainer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void createButton(Container c, String label, Runnable action, Vector3f size) {
 | 
			
		||||
        Button button = new Button(label);
 | 
			
		||||
        button.addClickCommands(source -> action.run());
 | 
			
		||||
        button.setFontSize(fontSize);
 | 
			
		||||
        button.setHighlightColor(ColorRGBA.White);
 | 
			
		||||
        button.setColor(ColorRGBA.Black);
 | 
			
		||||
        button.setPreferredSize(size);
 | 
			
		||||
        button.setTextHAlignment(HAlignment.Center);
 | 
			
		||||
        button.setTextVAlignment(VAlignment.Center);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent background = new QuadBackgroundComponent(COLOR_DEFAULT);
 | 
			
		||||
        background.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
 | 
			
		||||
        button.setBackground(background);
 | 
			
		||||
 | 
			
		||||
        button.addCommands(com.simsilica.lemur.Button.ButtonAction.HighlightOn, (source) -> {
 | 
			
		||||
            QuadBackgroundComponent hoverBackground = new QuadBackgroundComponent(COLOR_HOVER);
 | 
			
		||||
            hoverBackground.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
 | 
			
		||||
            source.setBackground(hoverBackground);
 | 
			
		||||
            button.setHighlightColor(ColorRGBA.White);
 | 
			
		||||
            button.setColor(ColorRGBA.Black);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        button.addCommands(com.simsilica.lemur.Button.ButtonAction.HighlightOff, (source) -> {
 | 
			
		||||
            QuadBackgroundComponent normalBackground = new QuadBackgroundComponent(COLOR_DEFAULT);
 | 
			
		||||
            normalBackground.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
 | 
			
		||||
            source.setBackground(normalBackground);
 | 
			
		||||
            button.setHighlightColor(ColorRGBA.White);
 | 
			
		||||
            button.setColor(ColorRGBA.Black);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        c.addChild(button);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,192 @@
 | 
			
		||||
package pp.mdga.client.dialog;
 | 
			
		||||
 | 
			
		||||
import com.jme3.math.ColorRGBA;
 | 
			
		||||
import com.jme3.math.Vector3f;
 | 
			
		||||
import com.jme3.scene.Node;
 | 
			
		||||
import com.jme3.texture.Texture;
 | 
			
		||||
import com.simsilica.lemur.*;
 | 
			
		||||
import com.simsilica.lemur.component.QuadBackgroundComponent;
 | 
			
		||||
import com.simsilica.lemur.component.SpringGridLayout;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
public class JoinDialog extends Dialog {
 | 
			
		||||
    private TextField portInput;
 | 
			
		||||
    private TextField ipInput;
 | 
			
		||||
 | 
			
		||||
    public JoinDialog(MdgaApp app, Node node, Runnable backAction) {
 | 
			
		||||
        super(app, node);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent quad1 = new QuadBackgroundComponent(ColorRGBA.Gray);
 | 
			
		||||
        quad1.setMargin(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor());
 | 
			
		||||
        container.setBackground(quad1);
 | 
			
		||||
 | 
			
		||||
        Texture texture = app.getAssetManager().loadTexture("mdga_logo.png");
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent b = new QuadBackgroundComponent(texture);
 | 
			
		||||
 | 
			
		||||
        Panel imagePanel = new Panel();
 | 
			
		||||
        imagePanel.setBackground(b);
 | 
			
		||||
 | 
			
		||||
        container.addChild(imagePanel).setPreferredSize(new Vector3f(texture.getImage().getWidth() / 4, texture.getImage().getHeight() / 4, 0));
 | 
			
		||||
 | 
			
		||||
        //abstandshalter
 | 
			
		||||
        container.addChild(new Panel(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor(), ColorRGBA.Gray));
 | 
			
		||||
 | 
			
		||||
        createIpField();
 | 
			
		||||
 | 
			
		||||
        //abstandshalter
 | 
			
		||||
        container.addChild(new Panel(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor(), ColorRGBA.Gray));
 | 
			
		||||
 | 
			
		||||
        createPortField();
 | 
			
		||||
 | 
			
		||||
        //abstandshalter
 | 
			
		||||
        container.addChild(new Panel(100 * app.getResolutionFactor(), 50 * app.getResolutionFactor(), ColorRGBA.Gray));
 | 
			
		||||
 | 
			
		||||
        Container sub = new Container(new SpringGridLayout(Axis.X, Axis.Y));
 | 
			
		||||
 | 
			
		||||
        createButton(sub, "Abbrechen", backAction, new Vector3f(170 * app.getResolutionFactor(), 60 * app.getResolutionFactor(), 0));
 | 
			
		||||
 | 
			
		||||
        sub.addChild(new Panel(40 * app.getResolutionFactor(), 0 * app.getResolutionFactor(), ColorRGBA.Gray));
 | 
			
		||||
 | 
			
		||||
        createButton(sub, "Beitreten", () -> tryJoin(), new Vector3f(170 * app.getResolutionFactor(), 60 * app.getResolutionFactor(), 0));
 | 
			
		||||
 | 
			
		||||
        container.addChild(sub);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void tryJoin() {
 | 
			
		||||
        if (null == portInput.getText()) {
 | 
			
		||||
            portInput.setText("");
 | 
			
		||||
            ipInput.setText("");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        int port = 0;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            port = Integer.parseInt(portInput.getText());
 | 
			
		||||
        } catch (NumberFormatException e) {
 | 
			
		||||
            portInput.setText("");
 | 
			
		||||
            ipInput.setText("");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(!(port >= 1 && port <= 65535)) {
 | 
			
		||||
            portInput.setText("");
 | 
			
		||||
            ipInput.setText("");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (null == ipInput.getText()) {
 | 
			
		||||
            portInput.setText("");
 | 
			
		||||
            ipInput.setText("");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String ipv4Pattern = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
 | 
			
		||||
 | 
			
		||||
        if(!Pattern.matches(ipv4Pattern, ipInput.getText())) {
 | 
			
		||||
            portInput.setText("");
 | 
			
		||||
            ipInput.setText("");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        app.getModelSyncronizer().setJoin(ipInput.getText(), port);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void show() {
 | 
			
		||||
        super.show();
 | 
			
		||||
 | 
			
		||||
        container.setLocalTranslation(
 | 
			
		||||
            app.getCamera().getWidth() / 2 - container.getPreferredSize().x / 2,
 | 
			
		||||
            app.getCamera().getHeight() / 2 + container.getPreferredSize().y / 2,
 | 
			
		||||
            0
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void hide() {
 | 
			
		||||
        super.hide();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void createPortField() {
 | 
			
		||||
        Container subContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y));
 | 
			
		||||
 | 
			
		||||
        Label nameLabel = new Label("Port:\t");
 | 
			
		||||
        nameLabel.setFontSize(fontSize);
 | 
			
		||||
        nameLabel.setColor(ColorRGBA.Black);
 | 
			
		||||
 | 
			
		||||
        portInput = new TextField("");
 | 
			
		||||
 | 
			
		||||
        portInput.setColor(ColorRGBA.Black);
 | 
			
		||||
        portInput.setTextHAlignment(HAlignment.Left);
 | 
			
		||||
        portInput.setFontSize(fontSize);
 | 
			
		||||
        portInput.setSingleLine(true);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent grayBackground = new QuadBackgroundComponent(ColorRGBA.DarkGray);
 | 
			
		||||
        portInput.setBackground(grayBackground);
 | 
			
		||||
 | 
			
		||||
        subContainer.addChild(nameLabel);
 | 
			
		||||
        subContainer.addChild(portInput);
 | 
			
		||||
 | 
			
		||||
        container.addChild(subContainer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void createIpField() {
 | 
			
		||||
        Container subContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y));
 | 
			
		||||
 | 
			
		||||
        Label nameLabel = new Label("Ip:\t");
 | 
			
		||||
        nameLabel.setFontSize(fontSize);
 | 
			
		||||
        nameLabel.setColor(ColorRGBA.Black);
 | 
			
		||||
 | 
			
		||||
        ipInput = new TextField("");
 | 
			
		||||
 | 
			
		||||
        ipInput.setColor(ColorRGBA.Black);
 | 
			
		||||
        ipInput.setTextHAlignment(HAlignment.Left);
 | 
			
		||||
        ipInput.setFontSize(fontSize);
 | 
			
		||||
        ipInput.setSingleLine(true);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent grayBackground = new QuadBackgroundComponent(ColorRGBA.DarkGray);
 | 
			
		||||
        ipInput.setBackground(grayBackground);
 | 
			
		||||
 | 
			
		||||
        subContainer.addChild(nameLabel);
 | 
			
		||||
        subContainer.addChild(ipInput);
 | 
			
		||||
 | 
			
		||||
        container.addChild(subContainer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void createButton(Container c, String label, Runnable action, Vector3f size) {
 | 
			
		||||
        Button button = new Button(label);
 | 
			
		||||
        button.addClickCommands(source -> action.run());
 | 
			
		||||
        button.setFontSize(fontSize);
 | 
			
		||||
        button.setHighlightColor(ColorRGBA.White);
 | 
			
		||||
        button.setColor(ColorRGBA.Black);
 | 
			
		||||
        button.setPreferredSize(size);
 | 
			
		||||
        button.setTextHAlignment(HAlignment.Center);
 | 
			
		||||
        button.setTextVAlignment(VAlignment.Center);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent background = new QuadBackgroundComponent(COLOR_DEFAULT);
 | 
			
		||||
        background.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
 | 
			
		||||
        button.setBackground(background);
 | 
			
		||||
 | 
			
		||||
        button.addCommands(com.simsilica.lemur.Button.ButtonAction.HighlightOn, (source) -> {
 | 
			
		||||
            QuadBackgroundComponent hoverBackground = new QuadBackgroundComponent(COLOR_HOVER);
 | 
			
		||||
            hoverBackground.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
 | 
			
		||||
            source.setBackground(hoverBackground);
 | 
			
		||||
            button.setHighlightColor(ColorRGBA.White);
 | 
			
		||||
            button.setColor(ColorRGBA.Black);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        button.addCommands(com.simsilica.lemur.Button.ButtonAction.HighlightOff, (source) -> {
 | 
			
		||||
            QuadBackgroundComponent normalBackground = new QuadBackgroundComponent(COLOR_DEFAULT);
 | 
			
		||||
            normalBackground.setMargin(5 * app.getResolutionFactor(), 5 * app.getResolutionFactor());
 | 
			
		||||
            source.setBackground(normalBackground);
 | 
			
		||||
            button.setHighlightColor(ColorRGBA.White);
 | 
			
		||||
            button.setColor(ColorRGBA.Black);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        c.addChild(button);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -20,19 +20,25 @@ public class LobbyButtonDialog extends Dialog {
 | 
			
		||||
 | 
			
		||||
    private boolean taken = false;
 | 
			
		||||
 | 
			
		||||
    public LobbyButtonDialog(MdgaApp app, Node node, String label, Runnable action, int pos) {
 | 
			
		||||
    private final String label;
 | 
			
		||||
 | 
			
		||||
    private int val;
 | 
			
		||||
 | 
			
		||||
    public LobbyButtonDialog(MdgaApp app, Node node, String label, int pos) {
 | 
			
		||||
        super(app, node);
 | 
			
		||||
 | 
			
		||||
        clickCommand = (Button source) -> {
 | 
			
		||||
            //action.run();
 | 
			
		||||
            toggleButton();
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        this.pos = pos;
 | 
			
		||||
 | 
			
		||||
        this.label = label;
 | 
			
		||||
        this.button = new Button(label);
 | 
			
		||||
        this.button.setFontSize(fontSize);
 | 
			
		||||
 | 
			
		||||
        val = pos;
 | 
			
		||||
 | 
			
		||||
        createNotTakenButton(new Vector3f(170 * app.getResolutionFactor(), 250 * app.getResolutionFactor(), 0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -51,13 +57,17 @@ public void hide() {
 | 
			
		||||
        super.hide();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTaken(boolean isTaken, boolean self) {
 | 
			
		||||
    public void setTaken(boolean isTaken, boolean self, String name) {
 | 
			
		||||
        taken = isTaken;
 | 
			
		||||
 | 
			
		||||
        if(isTaken) {
 | 
			
		||||
            createTakenButton(new Vector3f(170 * app.getResolutionFactor(), 250 * app.getResolutionFactor(), 0), self);
 | 
			
		||||
 | 
			
		||||
            button.setText(label + "\n\n" + name);
 | 
			
		||||
        } else {
 | 
			
		||||
            createNotTakenButton(new Vector3f(170 * app.getResolutionFactor(), 250 * app.getResolutionFactor(), 0));
 | 
			
		||||
 | 
			
		||||
            button.setText(label);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -98,7 +108,12 @@ protected void createNotTakenButton(Vector3f size) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void toggleButton() {
 | 
			
		||||
        setTaken(!taken, true);
 | 
			
		||||
        if(taken) {
 | 
			
		||||
            app.getModelSyncronizer().unselectTsk();
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            app.getModelSyncronizer().selectTsk(Color.values()[val]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void createTakenButton(Vector3f size, boolean self) {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,10 +9,10 @@
 | 
			
		||||
import com.simsilica.lemur.component.SpringGridLayout;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
 | 
			
		||||
public class InputButtonDialog extends Dialog {
 | 
			
		||||
public class StartDialog extends Dialog {
 | 
			
		||||
    private TextField nameInput;
 | 
			
		||||
 | 
			
		||||
    public InputButtonDialog(MdgaApp app, Node node) {
 | 
			
		||||
    public StartDialog(MdgaApp app, Node node) {
 | 
			
		||||
        super(app, node);
 | 
			
		||||
 | 
			
		||||
        QuadBackgroundComponent quad1 = new QuadBackgroundComponent(ColorRGBA.Gray);
 | 
			
		||||
@@ -84,5 +84,3 @@ public String getName() {
 | 
			
		||||
        return nameInput.getText();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -80,7 +80,7 @@ private void forward() {
 | 
			
		||||
                enterSub(SubState.STATISTICS);
 | 
			
		||||
                break;
 | 
			
		||||
            case STATISTICS:
 | 
			
		||||
                app.enter(MdgaState.MAIN);
 | 
			
		||||
                app.getModelSyncronizer().enter(MdgaState.MAIN);
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
import pp.mdga.client.board.BoardHandler;
 | 
			
		||||
import pp.mdga.client.board.CameraHandler;
 | 
			
		||||
import pp.mdga.client.dialog.SingleButtonLeftDialog;
 | 
			
		||||
import pp.mdga.client.dialog.SingleButtonRightDialog;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
import pp.mdga.client.MdgaState;
 | 
			
		||||
@@ -10,6 +11,7 @@ public class GameView extends MdgaView {
 | 
			
		||||
    private BoardHandler boardHandler;
 | 
			
		||||
    private CameraHandler camera;
 | 
			
		||||
 | 
			
		||||
    private SingleButtonLeftDialog leaveButton;
 | 
			
		||||
    private SingleButtonRightDialog continueButton;
 | 
			
		||||
 | 
			
		||||
    public GameView(MdgaApp app) {
 | 
			
		||||
@@ -18,7 +20,9 @@ public GameView(MdgaApp app) {
 | 
			
		||||
        this.boardHandler = new BoardHandler(app);
 | 
			
		||||
        this.camera = new CameraHandler(app);
 | 
			
		||||
 | 
			
		||||
        continueButton = new SingleButtonRightDialog(app, node, "Weiter", () -> app.enter(MdgaState.CEREMONY));
 | 
			
		||||
        leaveButton = new SingleButtonLeftDialog(app, settingsNode, "Verlassen", () -> leaveGame());
 | 
			
		||||
 | 
			
		||||
        continueButton = new SingleButtonRightDialog(app, node, "Weiter", () -> app.getModelSyncronizer().enter(MdgaState.CEREMONY));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -36,4 +40,26 @@ public void onLeave() {
 | 
			
		||||
        camera.shutdown();
 | 
			
		||||
        boardHandler.shutdown();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void enterExtendedSettings() {
 | 
			
		||||
        leaveButton.show();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void leaveExtendedSettings() {
 | 
			
		||||
        leaveButton.hide();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void leaveGame() {
 | 
			
		||||
        leaveSettings(false);
 | 
			
		||||
 | 
			
		||||
        app.getModelSyncronizer().leave();
 | 
			
		||||
 | 
			
		||||
        app.afteGameCleanup();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public BoardHandler getBoardHandler() {
 | 
			
		||||
        return  boardHandler;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -24,13 +24,13 @@ public LobbyView(MdgaApp app) {
 | 
			
		||||
        background = createBackground("lobby.png");
 | 
			
		||||
        node.attachChild(background);
 | 
			
		||||
 | 
			
		||||
        readyButton = new SingleButtonRightDialog(app, node, "Fertig", () -> app.enter(MdgaState.GAME));
 | 
			
		||||
        leaveButton = new SingleButtonLeftDialog(app, node, "Verlassen", () -> app.enter(MdgaState.MAIN));
 | 
			
		||||
        readyButton = new SingleButtonRightDialog(app, node, "Fertig", () -> app.getModelSyncronizer().setReady());
 | 
			
		||||
        leaveButton = new SingleButtonLeftDialog(app, node, "Verlassen", () -> app.getModelSyncronizer().leave());
 | 
			
		||||
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "CIR", () -> System.out.println("cir"), 0));
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "LUFTWAFFE", () -> System.out.println("lw"), 1));
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "HEER", () -> System.out.println("heer"), 2));
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "MARINE", () -> System.out.println("marine"), 3));
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "HEER", 0));
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "MARINE", 1));
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "CIR", 2));
 | 
			
		||||
        lobbyButtons.add(new LobbyButtonDialog(app, node, "LUFTWAFFE", 3));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -53,10 +53,7 @@ public void onLeave() {
 | 
			
		||||
        leaveButton.hide();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTaken(Color color, boolean isTaken, boolean isSelf) {
 | 
			
		||||
        lobbyButtons.get(color.ordinal()).setTaken(isTaken, isSelf);
 | 
			
		||||
    public void setTaken(Color color, boolean isTaken, boolean isSelf, String name) {
 | 
			
		||||
        lobbyButtons.get(color.ordinal()).setTaken(isTaken, isSelf, name);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,19 @@
 | 
			
		||||
package pp.mdga.client.view;
 | 
			
		||||
 | 
			
		||||
import com.jme3.scene.Geometry;
 | 
			
		||||
import pp.mdga.client.dialog.InputButtonDialog;
 | 
			
		||||
import pp.mdga.client.dialog.Dialog;
 | 
			
		||||
import pp.mdga.client.dialog.HostDialog;
 | 
			
		||||
import pp.mdga.client.dialog.JoinDialog;
 | 
			
		||||
import pp.mdga.client.dialog.StartDialog;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
import pp.mdga.client.MdgaState;
 | 
			
		||||
 | 
			
		||||
import com.jme3.math.Vector3f;
 | 
			
		||||
 | 
			
		||||
public class MainView extends MdgaView {
 | 
			
		||||
    private Geometry background;
 | 
			
		||||
 | 
			
		||||
    private InputButtonDialog dialog;
 | 
			
		||||
    private StartDialog dialog;
 | 
			
		||||
    private Dialog subDialog;
 | 
			
		||||
 | 
			
		||||
    public MainView(MdgaApp app) {
 | 
			
		||||
        super(app);
 | 
			
		||||
@@ -19,9 +22,9 @@ public MainView(MdgaApp app) {
 | 
			
		||||
        node.attachChild(background);
 | 
			
		||||
 | 
			
		||||
        Vector3f size = new Vector3f(280, 60, 0);
 | 
			
		||||
        dialog = new InputButtonDialog(app, node);
 | 
			
		||||
        dialog.addButton("Spiel beitreten", () -> app.enter(MdgaState.LOBBY), size);
 | 
			
		||||
        dialog.addButton("Spiel hosten", () -> app.enter(MdgaState.LOBBY), size);
 | 
			
		||||
        dialog = new StartDialog(app, node);
 | 
			
		||||
        dialog.addButton("Spiel beitreten", () -> enterJoin(), size);
 | 
			
		||||
        dialog.addButton("Spiel hosten", () -> enterHost(), size);
 | 
			
		||||
        dialog.addButton("Einstellungen", () -> enterSettings(false), size);
 | 
			
		||||
        dialog.addButton("Spiel beenden", () -> app.stop(), size);
 | 
			
		||||
    }
 | 
			
		||||
@@ -34,6 +37,39 @@ public void onEnter() {
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onLeave() {
 | 
			
		||||
        dialog.hide();
 | 
			
		||||
 | 
			
		||||
        if(subDialog != null) {
 | 
			
		||||
            subDialog.hide();
 | 
			
		||||
            subDialog = null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void enterJoin() {
 | 
			
		||||
        subDialog = new JoinDialog(app, node, () -> leaveJoin());
 | 
			
		||||
 | 
			
		||||
        dialog.hide();
 | 
			
		||||
        subDialog.show();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void leaveJoin() {
 | 
			
		||||
        subDialog.hide();
 | 
			
		||||
        dialog.show();
 | 
			
		||||
 | 
			
		||||
        subDialog = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void enterHost() {
 | 
			
		||||
        subDialog = new HostDialog(app, node, () -> leaveHost());
 | 
			
		||||
 | 
			
		||||
        dialog.hide();
 | 
			
		||||
        subDialog.show();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void leaveHost() {
 | 
			
		||||
        subDialog.hide();
 | 
			
		||||
        dialog.show();
 | 
			
		||||
 | 
			
		||||
        subDialog = null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,13 +16,13 @@ public abstract class MdgaView {
 | 
			
		||||
    protected MdgaApp app;
 | 
			
		||||
    protected Node node;
 | 
			
		||||
 | 
			
		||||
    int depth = 0;
 | 
			
		||||
    boolean isVideo = false;
 | 
			
		||||
    boolean isAudio = false;
 | 
			
		||||
    protected int depth = 0;
 | 
			
		||||
    private boolean isVideo = false;
 | 
			
		||||
    private boolean isAudio = false;
 | 
			
		||||
 | 
			
		||||
    private Node settingsNode;
 | 
			
		||||
    private Node audioNode;
 | 
			
		||||
    private Node videoNode;
 | 
			
		||||
    protected Node settingsNode;
 | 
			
		||||
    protected Node audioSettingsNode;
 | 
			
		||||
    protected Node videoSettingsNode;
 | 
			
		||||
 | 
			
		||||
    private SettingsButtonDialog settingsButton;
 | 
			
		||||
 | 
			
		||||
@@ -39,8 +39,8 @@ public MdgaView(MdgaApp app) {
 | 
			
		||||
        this.node = new Node();
 | 
			
		||||
 | 
			
		||||
        this.settingsNode = new Node();
 | 
			
		||||
        this.audioNode = new Node();
 | 
			
		||||
        this.videoNode = new Node();
 | 
			
		||||
        this.audioSettingsNode = new Node();
 | 
			
		||||
        this.videoSettingsNode = new Node();
 | 
			
		||||
 | 
			
		||||
        this.settingsButton = new SettingsButtonDialog(app, node, "", () -> enterSettings(false));
 | 
			
		||||
 | 
			
		||||
@@ -48,10 +48,10 @@ public MdgaView(MdgaApp app) {
 | 
			
		||||
        settingsNode.attachChild(settingsBackground);
 | 
			
		||||
 | 
			
		||||
        this.audioBackground = createBackground("background/lautsprecher.png");
 | 
			
		||||
        audioNode.attachChild(audioBackground);
 | 
			
		||||
        audioSettingsNode.attachChild(audioBackground);
 | 
			
		||||
 | 
			
		||||
        this.videoBackground = createBackground("background/monitors.png");
 | 
			
		||||
        videoNode.attachChild(videoBackground);
 | 
			
		||||
        videoSettingsNode.attachChild(videoBackground);
 | 
			
		||||
 | 
			
		||||
        Vector3f size = new Vector3f(280, 60, 0);
 | 
			
		||||
 | 
			
		||||
@@ -60,13 +60,13 @@ public MdgaView(MdgaApp app) {
 | 
			
		||||
        this.settings.addButton("Audio", () -> enterAudio(), size);
 | 
			
		||||
        this.settings.addButton("Zurück", () -> leaveSettings(false), size);
 | 
			
		||||
 | 
			
		||||
        this.audio = new SettingsDialog(app, audioNode, "audio_icon.png");
 | 
			
		||||
        this.audio = new SettingsDialog(app, audioSettingsNode, "audio_icon.png");
 | 
			
		||||
        this.audio.addSlider("Lautstärke", new PercentRunnable(app.getAcousticHandler()::setMainVolume), size, 5);
 | 
			
		||||
        this.audio.addSlider("Musik", new PercentRunnable(app.getAcousticHandler()::setMusicVolume), size, 10);
 | 
			
		||||
        this.audio.addSlider("Sound", new PercentRunnable(app.getAcousticHandler()::setSoundVolume), size, 10);
 | 
			
		||||
        this.audio.addButton("Zurück", () -> leaveAudio(), size);
 | 
			
		||||
 | 
			
		||||
        this.video = new SettingsDialog(app, videoNode, "monitor.png");
 | 
			
		||||
        this.video = new SettingsDialog(app, videoSettingsNode, "monitor.png");
 | 
			
		||||
        this.video.addButton("A", () -> System.out.println("A"), size);
 | 
			
		||||
        this.video.addButton("B", () -> System.out.println("B"), size);
 | 
			
		||||
        this.video.addButton("Zurück", () -> leaveVideo(), size);
 | 
			
		||||
@@ -107,6 +107,9 @@ protected Geometry createBackground(String texturePath) {
 | 
			
		||||
        return background;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void enterExtendedSettings() {}
 | 
			
		||||
    protected void leaveExtendedSettings() {}
 | 
			
		||||
 | 
			
		||||
    protected void enterSettings(boolean soft) {
 | 
			
		||||
        leave();
 | 
			
		||||
 | 
			
		||||
@@ -114,6 +117,8 @@ protected void enterSettings(boolean soft) {
 | 
			
		||||
 | 
			
		||||
        if(!soft) {
 | 
			
		||||
            depth++;
 | 
			
		||||
 | 
			
		||||
            enterExtendedSettings();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        settings.show();
 | 
			
		||||
@@ -125,6 +130,7 @@ protected void leaveSettings(boolean soft) {
 | 
			
		||||
        app.getGuiNode().detachChild(settingsNode);
 | 
			
		||||
 | 
			
		||||
        if(!soft) {
 | 
			
		||||
            leaveExtendedSettings();
 | 
			
		||||
            enter();
 | 
			
		||||
            depth--;
 | 
			
		||||
        }
 | 
			
		||||
@@ -136,7 +142,7 @@ protected void enterAudio() {
 | 
			
		||||
        depth++;
 | 
			
		||||
        isAudio = true;
 | 
			
		||||
 | 
			
		||||
        app.getGuiNode().attachChild(audioNode);
 | 
			
		||||
        app.getGuiNode().attachChild(audioSettingsNode);
 | 
			
		||||
 | 
			
		||||
        audio.show();
 | 
			
		||||
    }
 | 
			
		||||
@@ -144,7 +150,7 @@ protected void enterAudio() {
 | 
			
		||||
    protected void leaveAudio() {
 | 
			
		||||
        audio.hide();
 | 
			
		||||
 | 
			
		||||
        app.getGuiNode().detachChild(audioNode);
 | 
			
		||||
        app.getGuiNode().detachChild(audioSettingsNode);
 | 
			
		||||
 | 
			
		||||
        isAudio = false;
 | 
			
		||||
        depth--;
 | 
			
		||||
@@ -155,7 +161,7 @@ protected void leaveAudio() {
 | 
			
		||||
    protected void enterVideo() {
 | 
			
		||||
        leaveSettings(true);
 | 
			
		||||
 | 
			
		||||
        app.getGuiNode().attachChild(videoNode);
 | 
			
		||||
        app.getGuiNode().attachChild(videoSettingsNode);
 | 
			
		||||
 | 
			
		||||
        depth++;
 | 
			
		||||
 | 
			
		||||
@@ -167,7 +173,7 @@ protected void enterVideo() {
 | 
			
		||||
    protected void leaveVideo() {
 | 
			
		||||
        video.hide();
 | 
			
		||||
 | 
			
		||||
        app.getGuiNode().detachChild(videoNode);
 | 
			
		||||
        app.getGuiNode().detachChild(videoSettingsNode);
 | 
			
		||||
 | 
			
		||||
        depth--;
 | 
			
		||||
        isVideo = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,15 +9,18 @@ public class TskSelectNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
    private String name;
 | 
			
		||||
    private  boolean self;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     * @param color the color of the player that is in the game.
 | 
			
		||||
     * @param name the name of the player that is in the game.
 | 
			
		||||
     * @param self true if it was the local player selecting the tsk, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    TskSelectNotification(Color color, String name) {
 | 
			
		||||
    TskSelectNotification(Color color, String name, boolean self) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
        this.name = name;
 | 
			
		||||
        this.self = self;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -35,4 +38,12 @@ public Color getColor() {
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Tells if it was the local player selecting this tsk.
 | 
			
		||||
     * @return ture if it was the local player selecting the tsk.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSelf() {
 | 
			
		||||
        return self;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user