From 1b151aabdd1f7fdd70ca10876a821061814406be Mon Sep 17 00:00:00 2001 From: Cedric Beck Date: Tue, 26 Nov 2024 16:45:13 +0100 Subject: [PATCH] added select nodes, cards & pieces --- .../src/main/java/pp/mdga/client/Asset.java | 3 +- .../pp/mdga/client/InputSynchronizer.java | 100 +++++++++++++++++- .../mdga/client/NotificationSynchronizer.java | 5 +- .../pp/mdga/client/board/BoardHandler.java | 3 + .../board/Outline/SelectObjectOutliner.java | 1 + .../pp/mdga/client/board/OutlineControl.java | 12 ++- .../java/pp/mdga/client/gui/CardControl.java | 6 +- .../java/pp/mdga/client/gui/CardLayer.java | 4 + .../java/pp/mdga/client/gui/GuiHandler.java | 13 ++- .../java/pp/mdga/client/view/GameView.java | 18 ++-- 10 files changed, 135 insertions(+), 30 deletions(-) diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java index b92246d8..7d6f6011 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/Asset.java @@ -1,7 +1,7 @@ package pp.mdga.client; public enum Asset { - bigTent, + bigTent(0.8f), cardStack, cir, heer, @@ -23,7 +23,6 @@ public enum Asset { ship(0.8f), smallTent, tank, -// world(1.2f), world("Models/world_new/world_export_new.obj", "Models/world_new/world_new_diff.png", 1.2f), shield_ring("Models/shield_ring/shield_ring.obj", null), tree_small("Models/tree_small/tree_small.obj", "Models/tree_small/tree_small_diff.png"), diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java index ed7057db..38a25b0b 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/InputSynchronizer.java @@ -1,9 +1,22 @@ package pp.mdga.client; +import com.jme3.collision.CollisionResults; import com.jme3.input.InputManager; import com.jme3.input.KeyInput; import com.jme3.input.MouseInput; import com.jme3.input.controls.*; +import com.jme3.math.Ray; +import com.jme3.math.Vector2f; +import com.jme3.math.Vector3f; +import com.jme3.renderer.Camera; +import com.jme3.scene.Node; +import com.jme3.scene.control.AbstractControl; +import com.jme3.scene.control.Control; +import pp.mdga.client.board.NodeControl; +import pp.mdga.client.board.OutlineControl; +import pp.mdga.client.board.PieceControl; +import pp.mdga.client.gui.CardControl; +import pp.mdga.client.view.GameView; public class InputSynchronizer { @@ -13,12 +26,13 @@ public class InputSynchronizer { protected boolean rightMousePressed = false; private float rotationAngle = 180f; private int scrollValue = 0; + private CardControl hoverCard; InputSynchronizer(MdgaApp app) { this.app = app; this.inputManager = app.getInputManager(); - + hoverCard = null; setupInput(); } @@ -28,13 +42,19 @@ private void setupInput() { inputManager.addMapping("RotateRightMouse", new MouseButtonTrigger(MouseInput.BUTTON_RIGHT)); inputManager.addMapping("MouseLeft", new MouseAxisTrigger(MouseInput.AXIS_X, false)); // Left movement inputManager.addMapping("MouseRight", new MouseAxisTrigger(MouseInput.AXIS_X, true)); // Right movement + inputManager.addMapping("MouseVertical", new MouseAxisTrigger(MouseInput.AXIS_Y, false), new MouseAxisTrigger(MouseInput.AXIS_Y, true)); //Mouse Up Down movement inputManager.addMapping("MouseScrollUp", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, false)); // Scroll up inputManager.addMapping("MouseScrollDown", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, true)); // Scroll down + inputManager.addMapping("Test", new KeyTrigger(KeyInput.KEY_J)); + inputManager.addMapping("Click", new MouseButtonTrigger(MouseInput.BUTTON_LEFT)); - inputManager.addListener(actionListener, "Settings", "RotateRightMouse"); + + inputManager.addListener(actionListener, "Settings", "RotateRightMouse", "Click", "Test"); inputManager.addListener(analogListener, "MouseLeft", "MouseRight", "MouseScrollUp", "MouseScrollDown"); } + private boolean test = false; + private final ActionListener actionListener = new ActionListener() { @Override public void onAction(String name, boolean isPressed, float tpf) { @@ -44,6 +64,36 @@ public void onAction(String name, boolean isPressed, float tpf) { if (name.equals("RotateRightMouse")) { rightMousePressed = isPressed; } + if(name.equals("Click") && isPressed) { + //check Hover cardLayer + //check Hover board + if (app.getView() instanceof GameView gameView) { + CardControl cardLayerSelect = checkHover(gameView.getGuiHandler().getCardLayerCamera(), gameView.getGuiHandler().getCardLayer().getRootNode(), CardControl.class); + OutlineControl boardSelect = checkHover(app.getCamera(), app.getRootNode(), OutlineControl.class); + + if(cardLayerSelect != null) { + //cardSelect + cardLayerSelect.outline(); + } + if(cardLayerSelect == null && boardSelect != null) { + //boardSelect + if(boardSelect instanceof PieceControl pieceControl){ + pieceControl.outline(true); + } + if(boardSelect instanceof NodeControl nodeControl){ + nodeControl.outline(); + } + } + else{ + //both null + } + } + + + } + if(name.equals("Test") &&isPressed){ + test = true; + } } }; @@ -52,16 +102,56 @@ public void onAction(String name, boolean isPressed, float tpf) { public void onAnalog(String name, float value, float tpf) { if (name.equals("MouseLeft") && rightMousePressed) { rotationAngle -= value * 360f; - } else if (name.equals("MouseRight") && rightMousePressed) { + } + else if (name.equals("MouseRight") && rightMousePressed) { rotationAngle += value * 360f; - } else if (name.equals("MouseScrollUp")) { + } + else if (name.equals("MouseScrollUp")) { scrollValue = Math.max(1, scrollValue - 5); - } else if (name.equals("MouseScrollDown")) { + } + else if (name.equals("MouseScrollDown")) { scrollValue = Math.min(100, scrollValue + 5); } + else if (name.equals("MouseLeft") || name.equals("MouseRight") || name.equals("MouseVertical")){ +// hoverCardOutline(); + } } }; + private T checkHover(Camera cam, Node root, Class controlType) { + CollisionResults results = new CollisionResults(); + Ray ray = new Ray(cam.getLocation(), getMousePos(cam).subtract(cam.getLocation()).normalize()); + root.collideWith(ray, results); + if (results.size() > 0) { + return results.getClosestCollision().getGeometry().getControl(controlType); + } + return null; + } + + private void hoverCardOutline() { + if (app.getView() instanceof GameView gameView) { + CardControl control = checkHover(gameView.getGuiHandler().getCardLayerCamera(), gameView.getGuiHandler().getCardLayer().getRootNode(), CardControl.class); + if (control != null) { + if(control != hoverCard){ + hoverCardOff(); + hoverCard = control; + hoverCard.outline(); + } + } + else hoverCardOff(); + } + } + + private void hoverCardOff() { + if (hoverCard != null) hoverCard.deOutline(); + hoverCard = null; + } + + private Vector3f getMousePos(Camera cam){ + Vector2f mousePositionScreen = inputManager.getCursorPosition(); + return cam.getWorldCoordinates(mousePositionScreen, 0); + } + public float getRotation() { return (rotationAngle / 2) % 360; } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java index 76767434..7ce21153 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java @@ -81,9 +81,8 @@ private void handleGame(Notification notification) { // Handle DicingNotification } else if (notification instanceof DrawCardNotification) { // Handle DrawCardNotification - } else if (notification instanceof HomeMoveNotification) { - HomeMoveNotification n = (HomeMoveNotification)notification; - gameView.getBoardHandler().moveHomePiece(n.getPieceId(), n.getHomeIndex()); + } else if (notification instanceof HomeMoveNotification home) { + gameView.getBoardHandler().moveHomePiece(home.getPieceId(), home.getHomeIndex()); } else if (notification instanceof InterruptNotification) { // Handle InterruptNotification } else if (notification instanceof MovePieceNotification) { diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java index 6c25e12c..b338fd4b 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java @@ -66,6 +66,9 @@ private void initMap() { this.waitingPiecesMap = new HashMap<>(); this.pieceColor = new HashMap<>(); + + + List assetOnMaps = MapLoader.loadMap(MAP_NAME); for (AssetOnMap assetOnMap : assetOnMaps) { diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/Outline/SelectObjectOutliner.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/Outline/SelectObjectOutliner.java index e54a97c8..9a296d11 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/Outline/SelectObjectOutliner.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/Outline/SelectObjectOutliner.java @@ -54,6 +54,7 @@ private void hideOutlineFilterEffect(Spatial model) { outlineFilter.getOutlinePreFilter().setEnabled(false); fpp.removeFilter(outlineFilter); outlineViewport.detachScene(model); + outlineViewport.clearProcessors(); renderManager.removePreView(outlineViewport); outlineViewport = null; } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/OutlineControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/OutlineControl.java index 0ac8dee5..3f326741 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/OutlineControl.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/OutlineControl.java @@ -10,15 +10,19 @@ import pp.mdga.client.board.Outline.SelectObjectOutliner; public class OutlineControl extends AbstractControl { - private static final int OUTLINE_THICKNESS = 4; - public final SelectObjectOutliner outlineOwn; + private int thickness = 4; + private final SelectObjectOutliner outlineOwn; public OutlineControl(MdgaApp app, FilterPostProcessor fpp){ - outlineOwn = new SelectObjectOutliner(OUTLINE_THICKNESS, fpp, app.getRenderManager(), app.getAssetManager(), app.getCamera()); + outlineOwn = new SelectObjectOutliner(thickness, fpp, app.getRenderManager(), app.getAssetManager(), app.getCamera()); } public OutlineControl(MdgaApp app, FilterPostProcessor fpp, Camera cam){ - outlineOwn = new SelectObjectOutliner(OUTLINE_THICKNESS, fpp, app.getRenderManager(), app.getAssetManager(), cam); + outlineOwn = new SelectObjectOutliner(thickness, fpp, app.getRenderManager(), app.getAssetManager(), cam); + } + + public OutlineControl(MdgaApp app, FilterPostProcessor fpp, Camera cam, int thickness){ + outlineOwn = new SelectObjectOutliner(thickness, fpp, app.getRenderManager(), app.getAssetManager(), cam); } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardControl.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardControl.java index e821cf46..076da299 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardControl.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardControl.java @@ -11,14 +11,14 @@ public class CardControl extends OutlineControl { - private static final ColorRGBA OUTLINE_COLOR = ColorRGBA.White; + private static final ColorRGBA OUTLINE_COLOR = ColorRGBA.Yellow; + private static final int OUTLINE_THICKNESS = 7; public CardControl(MdgaApp app, FilterPostProcessor fpp, Camera cam){ - super(app, fpp, cam); + super(app, fpp, cam, OUTLINE_THICKNESS); } public void outline(){ super.outline(OUTLINE_COLOR); } - } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayer.java index f02f3ffe..916e9531 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayer.java @@ -88,4 +88,8 @@ public void deleteCard(Spatial spatial){ public Camera getOverlayCam(){ return overlayCam; } + + public Node getRootNode(){ + return root; + } } \ No newline at end of file diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java index 7265247f..992e769b 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/GuiHandler.java @@ -33,15 +33,17 @@ public class GuiHandler { private final FilterPostProcessor fpp; Texture2D backTexture; + private Camera cardLayerCamera; public GuiHandler(MdgaApp app, Texture2D backTexture) { this.app = app; this.fpp = new FilterPostProcessor(app.getAssetManager()); this.backTexture = backTexture; + cardLayerCamera = createOverlayCam(); } public void init(){ - cardLayer = new CardLayer(fpp, createOverlayCam(), backTexture); + cardLayer = new CardLayer(fpp, cardLayerCamera, backTexture); app.getStateManager().attach(cardLayer); ownCardsMap = new HashMap<>(); playerFont = app.getAssetManager().loadFont("Fonts/Gunplay.fnt"); @@ -167,7 +169,14 @@ public void test(){ addCard(BonusCard.TURBO, UUID.randomUUID()); addCard(BonusCard.SWAP, UUID.randomUUID()); - ownCardsMap.get(uuid).outline(); +// ownCardsMap.get(uuid).outline(); } + public Camera getCardLayerCamera() { + return cardLayerCamera; + } + + public CardLayer getCardLayer(){ + return cardLayer; + } } diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java index ebb7ba99..91549d7c 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/view/GameView.java @@ -69,19 +69,11 @@ public void onEnter() { boardHandler.addPlayer(Color.AIRFORCE, test); boardHandler.movePieceStart(player0, 0); - boardHandler.outline(player0, true); +// boardHandler.outline(player0, true); - boardHandler.outline(10); +// boardHandler.outline(10); - app.getInputManager().addMapping("Test", new KeyTrigger(KeyInput.KEY_J)); - app.getInputManager().addListener(new ActionListener() { - @Override - public void onAction(String name, boolean isPressed, float tpf) { - if(name.equals("Test") && isPressed){ - guiHandler.test(); - } - } - }, "Test"); + guiHandler.test(); } @Override @@ -118,4 +110,8 @@ private void leaveGame() { public BoardHandler getBoardHandler() { return boardHandler; } + + public GuiHandler getGuiHandler() { + return guiHandler; + } }