added select nodes, cards & pieces

This commit is contained in:
Cedric Beck
2024-11-26 16:45:13 +01:00
parent 7a482b74ab
commit 1b151aabdd
10 changed files with 135 additions and 30 deletions

View File

@@ -1,7 +1,7 @@
package pp.mdga.client; package pp.mdga.client;
public enum Asset { public enum Asset {
bigTent, bigTent(0.8f),
cardStack, cardStack,
cir, cir,
heer, heer,
@@ -23,7 +23,6 @@ public enum Asset {
ship(0.8f), ship(0.8f),
smallTent, smallTent,
tank, tank,
// world(1.2f),
world("Models/world_new/world_export_new.obj", "Models/world_new/world_new_diff.png", 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), shield_ring("Models/shield_ring/shield_ring.obj", null),
tree_small("Models/tree_small/tree_small.obj", "Models/tree_small/tree_small_diff.png"), tree_small("Models/tree_small/tree_small.obj", "Models/tree_small/tree_small_diff.png"),

View File

@@ -1,9 +1,22 @@
package pp.mdga.client; package pp.mdga.client;
import com.jme3.collision.CollisionResults;
import com.jme3.input.InputManager; import com.jme3.input.InputManager;
import com.jme3.input.KeyInput; import com.jme3.input.KeyInput;
import com.jme3.input.MouseInput; import com.jme3.input.MouseInput;
import com.jme3.input.controls.*; 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 { public class InputSynchronizer {
@@ -13,12 +26,13 @@ public class InputSynchronizer {
protected boolean rightMousePressed = false; protected boolean rightMousePressed = false;
private float rotationAngle = 180f; private float rotationAngle = 180f;
private int scrollValue = 0; private int scrollValue = 0;
private CardControl hoverCard;
InputSynchronizer(MdgaApp app) { InputSynchronizer(MdgaApp app) {
this.app = app; this.app = app;
this.inputManager = app.getInputManager(); this.inputManager = app.getInputManager();
hoverCard = null;
setupInput(); setupInput();
} }
@@ -28,13 +42,19 @@ private void setupInput() {
inputManager.addMapping("RotateRightMouse", new MouseButtonTrigger(MouseInput.BUTTON_RIGHT)); inputManager.addMapping("RotateRightMouse", new MouseButtonTrigger(MouseInput.BUTTON_RIGHT));
inputManager.addMapping("MouseLeft", new MouseAxisTrigger(MouseInput.AXIS_X, false)); // Left movement inputManager.addMapping("MouseLeft", new MouseAxisTrigger(MouseInput.AXIS_X, false)); // Left movement
inputManager.addMapping("MouseRight", new MouseAxisTrigger(MouseInput.AXIS_X, true)); // Right 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("MouseScrollUp", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, false)); // Scroll up
inputManager.addMapping("MouseScrollDown", new MouseAxisTrigger(MouseInput.AXIS_WHEEL, true)); // Scroll down 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"); inputManager.addListener(analogListener, "MouseLeft", "MouseRight", "MouseScrollUp", "MouseScrollDown");
} }
private boolean test = false;
private final ActionListener actionListener = new ActionListener() { private final ActionListener actionListener = new ActionListener() {
@Override @Override
public void onAction(String name, boolean isPressed, float tpf) { 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")) { if (name.equals("RotateRightMouse")) {
rightMousePressed = isPressed; 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) { public void onAnalog(String name, float value, float tpf) {
if (name.equals("MouseLeft") && rightMousePressed) { if (name.equals("MouseLeft") && rightMousePressed) {
rotationAngle -= value * 360f; rotationAngle -= value * 360f;
} else if (name.equals("MouseRight") && rightMousePressed) { }
else if (name.equals("MouseRight") && rightMousePressed) {
rotationAngle += value * 360f; rotationAngle += value * 360f;
} else if (name.equals("MouseScrollUp")) { }
else if (name.equals("MouseScrollUp")) {
scrollValue = Math.max(1, scrollValue - 5); scrollValue = Math.max(1, scrollValue - 5);
} else if (name.equals("MouseScrollDown")) { }
else if (name.equals("MouseScrollDown")) {
scrollValue = Math.min(100, scrollValue + 5); scrollValue = Math.min(100, scrollValue + 5);
} }
else if (name.equals("MouseLeft") || name.equals("MouseRight") || name.equals("MouseVertical")){
// hoverCardOutline();
}
} }
}; };
private <T extends AbstractControl> T checkHover(Camera cam, Node root, Class<T> 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() { public float getRotation() {
return (rotationAngle / 2) % 360; return (rotationAngle / 2) % 360;
} }

View File

@@ -81,9 +81,8 @@ private void handleGame(Notification notification) {
// Handle DicingNotification // Handle DicingNotification
} else if (notification instanceof DrawCardNotification) { } else if (notification instanceof DrawCardNotification) {
// Handle DrawCardNotification // Handle DrawCardNotification
} else if (notification instanceof HomeMoveNotification) { } else if (notification instanceof HomeMoveNotification home) {
HomeMoveNotification n = (HomeMoveNotification)notification; gameView.getBoardHandler().moveHomePiece(home.getPieceId(), home.getHomeIndex());
gameView.getBoardHandler().moveHomePiece(n.getPieceId(), n.getHomeIndex());
} else if (notification instanceof InterruptNotification) { } else if (notification instanceof InterruptNotification) {
// Handle InterruptNotification // Handle InterruptNotification
} else if (notification instanceof MovePieceNotification) { } else if (notification instanceof MovePieceNotification) {

View File

@@ -66,6 +66,9 @@ private void initMap() {
this.waitingPiecesMap = new HashMap<>(); this.waitingPiecesMap = new HashMap<>();
this.pieceColor = new HashMap<>(); this.pieceColor = new HashMap<>();
List<AssetOnMap> assetOnMaps = MapLoader.loadMap(MAP_NAME); List<AssetOnMap> assetOnMaps = MapLoader.loadMap(MAP_NAME);
for (AssetOnMap assetOnMap : assetOnMaps) { for (AssetOnMap assetOnMap : assetOnMaps) {

View File

@@ -54,6 +54,7 @@ private void hideOutlineFilterEffect(Spatial model) {
outlineFilter.getOutlinePreFilter().setEnabled(false); outlineFilter.getOutlinePreFilter().setEnabled(false);
fpp.removeFilter(outlineFilter); fpp.removeFilter(outlineFilter);
outlineViewport.detachScene(model); outlineViewport.detachScene(model);
outlineViewport.clearProcessors();
renderManager.removePreView(outlineViewport); renderManager.removePreView(outlineViewport);
outlineViewport = null; outlineViewport = null;
} }

View File

@@ -10,15 +10,19 @@
import pp.mdga.client.board.Outline.SelectObjectOutliner; import pp.mdga.client.board.Outline.SelectObjectOutliner;
public class OutlineControl extends AbstractControl { public class OutlineControl extends AbstractControl {
private static final int OUTLINE_THICKNESS = 4; private int thickness = 4;
public final SelectObjectOutliner outlineOwn; private final SelectObjectOutliner outlineOwn;
public OutlineControl(MdgaApp app, FilterPostProcessor fpp){ 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){ 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);
} }

View File

@@ -11,14 +11,14 @@
public class CardControl extends OutlineControl { 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){ public CardControl(MdgaApp app, FilterPostProcessor fpp, Camera cam){
super(app, fpp, cam); super(app, fpp, cam, OUTLINE_THICKNESS);
} }
public void outline(){ public void outline(){
super.outline(OUTLINE_COLOR); super.outline(OUTLINE_COLOR);
} }
} }

View File

@@ -88,4 +88,8 @@ public void deleteCard(Spatial spatial){
public Camera getOverlayCam(){ public Camera getOverlayCam(){
return overlayCam; return overlayCam;
} }
public Node getRootNode(){
return root;
}
} }

View File

@@ -33,15 +33,17 @@ public class GuiHandler {
private final FilterPostProcessor fpp; private final FilterPostProcessor fpp;
Texture2D backTexture; Texture2D backTexture;
private Camera cardLayerCamera;
public GuiHandler(MdgaApp app, Texture2D backTexture) { public GuiHandler(MdgaApp app, Texture2D backTexture) {
this.app = app; this.app = app;
this.fpp = new FilterPostProcessor(app.getAssetManager()); this.fpp = new FilterPostProcessor(app.getAssetManager());
this.backTexture = backTexture; this.backTexture = backTexture;
cardLayerCamera = createOverlayCam();
} }
public void init(){ public void init(){
cardLayer = new CardLayer(fpp, createOverlayCam(), backTexture); cardLayer = new CardLayer(fpp, cardLayerCamera, backTexture);
app.getStateManager().attach(cardLayer); app.getStateManager().attach(cardLayer);
ownCardsMap = new HashMap<>(); ownCardsMap = new HashMap<>();
playerFont = app.getAssetManager().loadFont("Fonts/Gunplay.fnt"); playerFont = app.getAssetManager().loadFont("Fonts/Gunplay.fnt");
@@ -167,7 +169,14 @@ public void test(){
addCard(BonusCard.TURBO, UUID.randomUUID()); addCard(BonusCard.TURBO, UUID.randomUUID());
addCard(BonusCard.SWAP, 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;
}
} }

View File

@@ -69,19 +69,11 @@ public void onEnter() {
boardHandler.addPlayer(Color.AIRFORCE, test); boardHandler.addPlayer(Color.AIRFORCE, test);
boardHandler.movePieceStart(player0, 0); 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)); guiHandler.test();
app.getInputManager().addListener(new ActionListener() {
@Override
public void onAction(String name, boolean isPressed, float tpf) {
if(name.equals("Test") && isPressed){
guiHandler.test();
}
}
}, "Test");
} }
@Override @Override
@@ -118,4 +110,8 @@ private void leaveGame() {
public BoardHandler getBoardHandler() { public BoardHandler getBoardHandler() {
return boardHandler; return boardHandler;
} }
public GuiHandler getGuiHandler() {
return guiHandler;
}
} }